一招搞定路由器下全部设备的ddns
需求再现
如果你有以下需求:
没有ipv4公网地址,但是想要在外访问家中设备。
不想折腾穿透等复杂操作,或者对zerotier每次还要打开软件感到疲倦
想要让内网下windows可以远程桌面,但是找了半天发现windows下ddns软件不好用
socat启动后出现各种问题
那么这篇文章所介绍的方法一定适合你。为了简介本文不再解释有状态无状态、socat、ipv6前缀后缀等名词,而且本人也未必能够解释清楚,还可能误导大家。只要大家跟着步骤走就可以啦。
本文旨在针对没有公网ipv4地址的小伙伴(目前三大运营商基本上都完成了ipv6公网部署,除了极少部分地区ipv6是大内网)实现只在路由器端进行部署,路由器下各个客户端无需安装任何软件即可实现每台设备的ipv6地址和域名绑定,在不使用socat等ipv6转ipv4端口转发工具的情况下完成外网直接访问内网设备。
需要你的路由器可以运行sh脚本同时可以自定义ipv6防火墙。
开始部署
以下环节以openwrt为例。其他路由系统按照自己的系统操作即可。
第一步
获得自己的域名。这里推荐免费的dynv6域名服务,虽然不是顶级域名,但是他家可以直接设定mac地址和ipv6前缀自动组合。(因为ipv6地址后缀是根据设备的mac地址生成的,一般不会变动)。进入网页后注册。
第二步
点击创建域名,按照下图进行填写
第三步
点进你刚才注册的域名,复制下你的域名和密码(其实是token)
然后点击记录,开始填写mac地址。注意添加AAAA记录,你路由下有几个设备要联网就添加几个,填写的信息看图。
到此结束,等到上传了ipv6前缀后,dynv6网站会自动帮我们结合mac地址生成完整的ipv6地址
第四步
创建脚本,按照注释修改。(主要是填入你的域名和token)
由于大妈对代码支持不好,这里上传写好的脚本文件。各位用记事本或者编程软件打开修改即可。
脚本下载链接:点击下载
修改完成后上传到openwrt中,建议放到/bin目录下。
第五步
验证脚本。openwrt进入TTYD终端,输入账号和密码登录后运行脚本看是否成功输出。
如果出现了问题也不要急,按照我下面给出的排查即可:
如果打马赛克的地方没有成功显示,多半是你的接口填错了,看一下我脚本里写的注释,改一下对应接口。
如果出现了linexxxx,说明你在更改脚本的时候改了不该改的东西,建议输入vim “脚本名称”进入看一下是不是格式哪里弄错了。
如果出现了ipv6前缀,但是没有上传成功,可能是/60那里出现了问题,检查一下你的前缀长度是不是60.
如果进行到这里都没有问题,可以进行最后一步定时执行了。
第六步
添加定时任务,使得脚本可以定时监测ipv6地址变动
最后一步
到防火墙位置,点击端口转发,对你所需要的端口进行放行。这一步大家按照需求自己寻找教程吧,我这里就不详细说了。最后根据你的“设备名.域名”练一下试试吧。
此处注意,如果你没有设置回流,可能会出现在同一局域网下的设备无法访问的情况,你只需要切换到外网环境就正常了。
写在末尾
有人可能会说设置socat进行ipv6转ipv4,还能解决ipv6无法直接访问qb等问题,但是我在使用socat的过程中发现和我正在使用的插件有冲突,于是使用了这个方法。
也可能有人会说,直接在每个设备上放一个ddns脚本就可以了,毕竟各大dns服务商都给了api。但是我个人觉得一个脚本完成全部操作更方便一点。
笔者学疏才浅,难免会有描述错误之处,还望大家批评指正。有疑问也可以留言,我会竭尽所能回复。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~








解决办法是把脚本中的所有[0-f]改成[0-9a-f],就不会读取到":"了
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
我crond里设置的是每天更新一次,因为是动态公网IP4。
校验提示文案
校验提示文案
校验提示文案
username="把这里换成你的password"
domain="把这里换成你的域名地址"
你上面的密码、域名是用双引号【"】引起的,教程第三步中dynv6拷出来的密码是用的单引号 【'】 引起的,
假设我的
password='123-_ZQFx8pH81RE61vt'
域名:123.dynv6.net
那改好后是不是这样的呢:
username='123-_ZQFx8pH81RE61vt'
domain=123.dynv6.net
另外有说到
pd=`ubus call network.interface.wan_6 status .....后面省略一长串字符
wan_6应当换成你对应的接口,我的接口是eth3,那前面是不是变成了:
pd=`ubus call network.interface.eth3 status
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
解决办法是把脚本中的所有[0-f]改成[0-9a-f],就不会读取到":"了
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
我的路由器是ASUS RT-5300 中途也用過一些百元級的路由器 印象中也都有自帶DDNS
開啟後 在設定一下印射端口就可以正常外網連結使用了 ASUS的DDNS速度也還不錯
不看4K 基本上沒怎麼發生卡頓
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案