一招搞定路由器下全部设备的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],就不会读取到":"了
校验提示文案
telanx
校验提示文案
gengeng
校验提示文案
OuchYoung
校验提示文案
伟哥9988
校验提示文案
userzacb
校验提示文案
超神奇办公室
校验提示文案
赛博维斯
校验提示文案
Rideo
校验提示文案
snipergg
校验提示文案
啥都想买的乐人
校验提示文案
焱炎火
我crond里设置的是每天更新一次,因为是动态公网IP4。
校验提示文案
阿拉斯加的小企鹅
校验提示文案
难用的都该扔
校验提示文案
一江春水1977
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],就不会读取到":"了
校验提示文案
冬来与你
校验提示文案
dongzhiks
校验提示文案
值友4266001958
校验提示文案
值友9629395061
校验提示文案
值友2910094653
校验提示文案
值友4954148024
我的路由器是ASUS RT-5300 中途也用過一些百元級的路由器 印象中也都有自帶DDNS
開啟後 在設定一下印射端口就可以正常外網連結使用了 ASUS的DDNS速度也還不錯
不看4K 基本上沒怎麼發生卡頓
校验提示文案
捡垃圾的小熊
校验提示文案
sontjer
校验提示文案
梦楠溪梦
校验提示文案
标准氢电极
校验提示文案
永远wyg
校验提示文案
冰影世界
校验提示文案
fuzilin
校验提示文案
小猪佩奇10086
校验提示文案
黑夜呐喊
校验提示文案
一个普通的值友
校验提示文案
王小二放羊
校验提示文案
老虎喜欢猫
校验提示文案
值友5923922075
校验提示文案