动态域名解析 openwrt 动态域名解析配置教程

OpenWrt部署动态域名解析,简单来讲,就是让路由器持续监测公网IP,IP发生变动时,自动向域名服务商修改解析记录。家庭宽带无论是IPv4还是IPv6,运营商分配的基本都是动态地址,IP会不定期变化,不做监测,外部设备就无法找到家里网络,DDNS就是用来解决这个问题。

先看看你手里有什么

配置前,需要确认三件事。第一,路由器需要获取公网IP。IPv4场景,很多地区已经无法拿到公网地址,运营商分配的是大内网地址,这种情况DDNS配置也无法从外网访问内网设备。IPv6情况相对好一些,国内三大运营商家庭宽带基本会下发公网IPv6前缀,但前缀同样会变动,IPv6环境下DDNS依旧有作用。判断方法很简单,登录路由器后台,查看WAN口IP,如果以100.64开头,代表属于运营商级NAT,IPv4公网通路无法使用。

动态域名解析 openwrt 动态域名解析配置教程

第二,准备域名。阿里云、腾讯云、Cloudflare购买的域名都可以,免费DuckDNS域名也支持。域名准备完成后,在服务商控制台手动新建A记录用于IPv4,或者AAAA记录用于IPv6,记录值随便填写合法IP,例如1.1.1.1或者240e::1,DDNS插件启动之后会自动更新为真实公网地址。

第三,获取服务商API凭据。阿里云需要AccessKey ID和AccessKey Secret,推荐创建子账户,仅授予AliDNSFullAccess权限,不要直接使用主账户密钥。腾讯云DNSPod获取DNSPod Token的ID和Token,在DNSPod控制台密钥管理页面创建。Cloudflare需要API Token,在Profile的API Tokens页面创建,权限选择Zone DNS Edit,用户名填写Bearer,密码填写令牌本身。

插件选哪个

OpenWrt实现DDNS主要有两套方案。一套是老牌ddns-scripts,通过opkg安装,配置文件路径/etc/config/ddns,LuCI界面对应luci-app-ddns。优势是和OpenWrt深度集成,依赖少,安装即可使用。短板是原生支持国内服务商有限,阿里云、DNSPod需要额外安装ddns-scripts-aliyun、ddns-scripts-dnspod这类扩展包。

另一套方案是ddns-go,Go语言编写的独立程序,LuCI软件包名称luci-app-ddns-go。支持域名服务商更多,阿里云、腾讯云、Cloudflare、华为云、百度云、GoDaddy、porkbun全部覆盖,自带Web管理页面,配置操作比ddns-scripts直观。缺点是属于外部程序,资源占用略高于ddns-scripts,现代路由器的硬件性能完全可以承受这点开销。

两套方案都可行,根据个人习惯选择。下面以ddns-scripts演示配置流程,这套配置逻辑在LuCI通用,切换ddns-go之后基础概念一致。

安装和配置

SSH连接路由器,先更新软件源索引再安装:


opkg update opkg install ddns-scripts luci-app-ddns

如果你使用OpenWrt 25.12或者更新版本,可能遇到依赖报错:ddns-scripts依赖ip包,但软件源只有ip-full,包名不匹配,安装失败。解决办法先单独安装ip-full,再安装ddns-scripts:


opkg install ip-full opkg install ddns-scripts luci-app-ddns

安装完成后刷新LuCI页面,服务菜单下出现动态DNS选项。点击进入,新增服务。配置项分为多个模块。

服务名称自定义,方便识别,例如“aliyun-v4”。查询主机名填写完整域名,例如“nas.example.com”。IP地址版本按需选择IPv4、IPv6,也可以两项同时启用。

DDNS服务提供商下拉框选择对应服务商。阿里云需要提前安装ddns-scripts-aliyun,选项才会出现aliyun.com。选中服务商后,域名填写格式有讲究。阿里云格式hostname@yourdomain.TLD,主域名写@example.com,子域名写nas@example.com。Cloudflare填写test@abc.com,用户名填Bearer,密码填API Token。DNSPod直接填写完整域名,用户名填写Token ID,密码填写Token。

用户名和密码对应服务商API凭证。阿里云填写AccessKey ID和AccessKey Secret,Cloudflare填写Bearer和API Token,DNSPod填写Token ID和Token。信息填写错误,日志会提示认证失败,状态栏上次更新时间不会刷新。

检查间隔设置10分钟或者15分钟比较稳妥。设置过短容易触发服务商限流,Cloudflare免费套餐TTL最小600秒,高频更新没有意义。间隔太长,IP变更后外部访问恢复会延迟。10分钟属于折中方案。

还有一个容易忽略的选项,IP地址来源默认是网络。部分用户修改为接口之后,DDNS开机无法自动启动,改回网络即可正常运行。没有特殊需求,保持默认。

配置完成点击保存并应用,回到DDNS列表查看状态。上次更新时间刷新,说明配置生效。登录域名服务商控制台,解析记录IP会更新为路由器当前公网IP。

一些容易被忽略的地方

DDNS和防火墙关联紧密。OpenWrt默认防火墙规则拦截WAN口入站流量,DDNS插件向外发送更新请求不受影响,但外网访问内网设备,需要手动添加防火墙通信规则。IPv6场景尤其重要,内网主机IPv6为公网地址,路由器不做NAT,防火墙默认拒绝入站连接,需要在通信规则里允许WAN区域到LAN区域指定端口的TCP、UDP流量。

IPv6还有一个细节,运营商下发的IPv6前缀会变化。前缀变更,内网设备IPv6同步改变,DDNS插件检测变动后更新AAAA记录,IPv6的检测更新速度普遍慢于IPv4,插件需要先获取新前缀再拼接完整设备地址。IPv6 DDNS更新缓慢的话,可以缩短检查间隔至5分钟。

日志是排查故障的首要手段,执行logread | grep ddns查看DDNS日志,认证失败、获取IP为空、服务未启动等问题都能找到线索。日志提示更新成功,但域名解析依旧是旧IP,需要等待TTL缓存过期,Cloudflare免费版最小TTL600秒,最长等待10分钟生效。同时确认DNS查询服务器,本地运营商DNS缓存可能没有刷新。

还有一点需要留意,IPv6环境下域名解析到动态IPv6地址,但不少公共Wi-Fi、移动网络对IPv6支持不完善。在外网通过域名访问家里设备,如果手机网络仅支持IPv4,就无法连通。这种场景IPv4 DDNS实用性更强,前提是拥有IPv4公网IP。两项同时配置最优,A记录和AAAA记录分别对应两条通路,优先使用可连通线路。

免责声明:本文提供的方法与建议仅供技术参考,实际部署效果受机房环境、运营商线路、系统配置等多重因素影响。请在专业人员指导下操作,因自行操作导致的业务损失本站不承担责任。