本文以博主家庭网络为例,介绍在旁路由上配置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,标红部分替换为用于注册acme的邮箱。
curl https://get.acme.sh | sh -s email=[email protected]
配置证书
由于80和443端口无法使用,只能使用手动dns方式在域名上添加一条txt 解析记录, 验证域名所有权。Cloudflare Domain API提供了两种自动颁发证书的方法。
使用全局API密钥
使用Cloudflare账户的全局API密钥和域名注册邮箱替换下面命令行中标红部分,然后在OpenWrt上执行命令:
export CF_Key="<key>"
export CF_Email="<[email protected]>"
使用DNS区域令牌
用上面获取的数据替换下面命令标红部分,然后在OpenWrt上执行命令:
export CF_Token="<token>" export CF_Zone_ID="<zone>" export CF_Account_ID="<id>"
/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配置文件
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,检查证书是否生效,挂锁是否成功。