目前中国电信、中国联通的宽带还支持申请公网IP,但是申请到的是不固定的IP,短则24小时,长则十天半个月就会更换公网IP。如何能长期通过域名实时掌握当前的对外IP,动态DNS(DDNS)服务是一个不错的选择。许多厂商提供DDNS服务,我们常用的是DNSPOD、花生壳等等,很简单也很方便,适合国内域名使用。
其实,Cloudflare也提供DDNS服务,在OpenWRT路由环境下,Cloudflare也是一个不错的选择。本文介绍下如何在OpenWRT路由环境下使用Cloudflare的动态DNS服务。
需要根据在Cloudflare上的DNS设置来配置OpenWRT路由器,因此我们需要在Cloudflare网站创建一个API令牌,可以使用全局API令牌(修改所有域名),但建议选择限制性的API令牌,只针对某个域名。
一、在Cloudflare上创建令牌
登录Cloudflare用户后台,进入”我的个人资料“(My profile)->”API令牌“(API Tokens)->”创建令牌“(Create Token)->”创建自定义令牌“(Create custom token)。
为令牌命名,例如”OpenWRT DDNS“,并添加新的权限,在Permissions选项里,选择Zone,然后选择DNS,选择Edit。
在ZoneResources选项里,选择Include,然后选择Specific Zone,并选择目标域名,例如example.com。点击Continue to summary,然后点击Create Token。
点击copy记住这个token,稍后在OpenWRT里配置的时候会需要它。
二、配置OpenWRT
接下来是配置OpenWRT路由器以与Cloudflare一起使用。在路由器后台管理页面中,执行以下操作:
进入”系统->软件“,按更新列表。在过滤器字段中输入“ddns”,然后安装安装ddns-scripts-cloudflare和luci-app-ddns软件包。注销并重新登录,可以看到”服务->动态DNS”选项。
如果存在ipv4的默认选项,比如“ipv4_preset”、“myddns_ipv4”,编辑即可,没有的话选择添加。
选择“IPv4 地址”,DDNS服务提供商[IPv4]设置为“cloudflare.com-v4”并单击切换服务。
然后将“查询主机名”(Lookup Hostname)和“域名“(Domain)设置为您要更新的域名,例如example.com。(如果想改为更新子域名,在“域名”字段中设置:sub@example.com,在“查询主机名”字段中设置:sub.example.com。)
选中”启用“(Enable)和”使用 HTTPS“(Use HTTPSecure)复选框,将”CA 证书路径“(Path to CA-Certificate)设置为/etc/ssl/certs(默认)。
最后,将用户名设置为”Bearer“,并将创建的Cloudflare令牌粘贴到密码字段中,然后点击保存并应用。
正常运行后,在”日志查看器“中,可以读取运行日志。
三、使用Cloudflare为使用DDNS的域名代理流量
上面的设置是通过使用DNS来检查域名example.com指向什么IP。如果该域名没有指向当前的IP,那么它就会被更新。
但是,如果还需要使用Cloudflare来代理请求怎么办?当Cloudflare代理请求时,example.com不再直接指向您的IP地址。相反,example.com指向Cloudflare,Cloudflare成为当前IP和访问用户之间的中间人。
反向代理可以在多个方面有所帮助:Cloudflare可以对访问用户隐藏真实IP地址,也可以为网站缓存图像等。
首先,在Cloudflare上域名的DNS设置中,创建一个新的子域名,比如zhegeziyuminghenchang.example.com。
按添加记录 -> 选择A记录 -> 在名称栏中输入zhegeziyuminghenchang.example.com -> 在IPv4栏中输入一个不正确的IP,如123.123.123.123。确保它没有被代理,然后按保存。
接着,删除被代理的域名的A记录,本例子中是example.com。然后,创建一个新的DNS记录,为example.com,选择”CNAME记录“。把它指向zhegeziyuminghenchang.example.com,并启用代理,然后保存。
接下来,唯一需要做的就是在OpenWRT中对DDNS设置进行两个小的改动。转到OpenWRT中DDNS的配置,将”查询主机名“更改为zhegeziyuminghenchang.example.com,并将域名设置为zhegeziyuminghenchang@example.com(注意@)。单击保存并应用。
这样,DDNS将与秘密子域名(zhegeziyuminghenchang.example.com)交互以保持DNS更新,而实际访问的域名(example.com)指向该子域名而不暴露真实IP。