本文以博主家庭网络为例,介绍在旁路由上配置CloudFlare动态域名并安装ACME证书,实现远程SSL访问的方法。博主家庭网络主路由为华为P812E光猫,采用路由模式,除了负责拨号,还要为四个86面板AP提供Poe供电。四个面板组成Mesh网络,由一台r6s旁路由负责分配DHCP,并提供其他服务。
设置动态域名的前提条件:光猫拨号后获取的必须是公网地址。
一、P812E开启端口转发
进入P812E光猫Web设置界面,转到高级设置>转发规则>IPv4端口映射,添加一条映射规则。由于运营商一般都将公网常用的80、443、8080等端口屏蔽,我们选择一个可用的端口进行映射。在本示例使用9443端口,将WAN接口上的9443端口映射到OpenWrt旁路由443端口上。192.168.18.2为旁路由的LAN地址。
点击应用,就可以使用https://wan ip:9443端口访问OpenWrt。
二、设置动态域名
1、在CloudFlare上,添加一条动态域名记录,这里使用了一个二级域名,IPv4地址输入临时地址(客户端配置好动态域名程序后会自动更新地址),关闭代理选项,点击保存。
2、在OpenWrt上,转到服务>DDNS-GO,启用DDNS-GO服务。
浏览器输入LAN IP:9876地址打开DDNS-GO设置页面,设置参数如下图所示,本教程使用cloudflare管理的域名,只需要输入DNS的令牌和域名信息即可。其他服务商请参考设置说明。
设置完成点击左上方的Save按钮,保存配置。实时连接信息可以点击右上方的日志进行查看。如果设置无误,那么在CloudFlare上添加的记录应该更新了光猫WAN接口的公网地址。
浏览器输入https://test.pfchina.xyz:9443,打开OpenWrt旁路由登录界面。由于没有配置证书,会提示连接不安全。
三、配置ACME证书
详细安装说明请参考这里。
安装acme.sh
使用SSH命令进入OpenWrt的后台,运行以下命令安装acmd.sh,email替换为用于注册acme的邮箱。
curl https://get.acme.sh | sh -s email=my@example.com
配置证书
由于80和443端口无法使用,只能使用手动dns方式在域名上添加一条txt 解析记录, 验证域名所有权。Cloudflare Domain API提供了两种自动颁发证书的方法。
使用全局API密钥
使用Cloudflare账户的全局API密钥和域名注册邮箱替换下面命令行中对应"<>"中的内容,然后在OpenWrt上执行命令:
export CF_Key="<key>"
export CF_Email="<youremail@example.com>"
使用DNS区域令牌
登录Cloudflare帐户,找到网站,打开自己使用的动态域名所使用的顶级域名,在右侧找到区域ID(export CF_Zone_ID)和帐号ID(export)。找到个人资料菜单,点击左侧的API令牌栏,然后点击创建令牌,添加一个对应项级域名的API令牌(export
用上面获取的数据替换下面命令行中对应"<>"内容,然后在OpenWrt上执行命令:
export CF_Token="<token>"
export CF_Zone_ID="<zone>"
export CF_Account_ID="<id>"
txt 解析记录添加完以后,执行以下命令申请证书了,test.pfchina.xyz为教程示例设置的域名。
/root/.acme.sh/acme.sh --issue --dns dns_cf -d test.pfchina.xyz -d www.test.pfchina.xyz
申请证书需要一点时间,请耐心等待。申请成功以后将会出现以下信息:
证书和私钥默认保存在以下位置:
/root/.acme.sh/test.pfchina.xyz_ecc/test.pfchina.xyz.cer
/root/.acme.sh/test.pfchina.xyz_ecc/test.pfchina.xyz.key
证书的有效期为三个月,acme.sh安装程序添加了定时任务,到期会自动更新证书。
四、修改OpenWrt配置文件
使用vi命令,打开/etc/config/uhttpd文件,修改证书位置,并将option redirect_https选项修改为1,保存退出。
config uhttpd 'main'
list listen_http '0.0.0.0:80'
list listen_http '[::]:80'
list listen_https '0.0.0.0:443'
list listen_https '[::]:443'
option redirect_https '1'
option home '/www'
option rfc1918_filter '1'
option max_connections '100'
option cert '/root/.acme.sh/test.pfchina.xyz_ecc/test.pfchina.xyz.cer'
option key '/root/.acme.sh/test.pfchina.xyz_ecc/test.pfchina.xyz.key'
执行以下命令,重启uhttpd。
/etc/init.d/uhttpd restart
五、检查测试
浏览器输入https://test.pfchina.xyz:9443,检查证书是否生效,挂锁是否成功。