一招搞定路由器下全部设备的ddns

2022-02-08 10:52:31 259点赞 2880收藏 95评论

需求再现

如果你有以下需求:

  1. 没有ipv4公网地址,但是想要在外访问家中设备。

  2. 不想折腾穿透等复杂操作,或者对zerotier每次还要打开软件感到疲倦

  3. 想要让内网下windows可以远程桌面,但是找了半天发现windows下ddns软件不好用

  4. socat启动后出现各种问题

那么这篇文章所介绍的方法一定适合你。为了简介本文不再解释有状态无状态、socat、ipv6前缀后缀等名词,而且本人也未必能够解释清楚,还可能误导大家。只要大家跟着步骤走就可以啦。


本文旨在针对没有公网ipv4地址的小伙伴(目前三大运营商基本上都完成了ipv6公网部署,除了极少部分地区ipv6是大内网)实现只在路由器端进行部署,路由器下各个客户端无需安装任何软件即可实现每台设备的ipv6地址和域名绑定,在不使用socat等ipv6转ipv4端口转发工具的情况下完成外网直接访问内网设备。

需要你的路由器可以运行sh脚本同时可以自定义ipv6防火墙。


开始部署

以下环节以openwrt为例。其他路由系统按照自己的系统操作即可。

第一步

获得自己的域名。这里推荐免费的dynv6域名服务,虽然不是顶级域名,但是他家可以直接设定mac地址和ipv6前缀自动组合。(因为ipv6地址后缀是根据设备的mac地址生成的,一般不会变动)。进入网页后注册。

注册账户注册账户


第二步

点击创建域名,按照下图进行填写

注册域名注册域名

第三步

点进你刚才注册的域名,复制下你的域名和密码(其实是token)

复制关键信息复制关键信息

然后点击记录,开始填写mac地址。注意添加AAAA记录,你路由下有几个设备要联网就添加几个,填写的信息看图。

mac地址mac地址

到此结束,等到上传了ipv6前缀后,dynv6网站会自动帮我们结合mac地址生成完整的ipv6地址

第四步

创建脚本,按照注释修改。(主要是填入你的域名和token)
由于大妈对代码支持不好,这里上传写好的脚本文件。各位用记事本或者编程软件打开修改即可。
脚本下载链接:点击下载
修改完成后上传到openwrt中,建议放到/bin目录下。

第五步

验证脚本。openwrt进入TTYD终端,输入账号和密码登录后运行脚本看是否成功输出。

验证脚本验证脚本

如果出现了问题也不要急,按照我下面给出的排查即可:

  • 如果打马赛克的地方没有成功显示,多半是你的接口填错了,看一下我脚本里写的注释,改一下对应接口。

  • 如果出现了linexxxx,说明你在更改脚本的时候改了不该改的东西,建议输入vim “脚本名称”进入看一下是不是格式哪里弄错了。

  • 如果出现了ipv6前缀,但是没有上传成功,可能是/60那里出现了问题,检查一下你的前缀长度是不是60.

如果进行到这里都没有问题,可以进行最后一步定时执行了。

第六步

添加定时任务,使得脚本可以定时监测ipv6地址变动

添加定时添加定时

最后一步

到防火墙位置,点击端口转发,对你所需要的端口进行放行。这一步大家按照需求自己寻找教程吧,我这里就不详细说了。最后根据你的“设备名.域名”练一下试试吧。
此处注意,如果你没有设置回流,可能会出现在同一局域网下的设备无法访问的情况,你只需要切换到外网环境就正常了。

一招搞定路由器下全部设备的ddns

写在末尾

有人可能会说设置socat进行ipv6转ipv4,还能解决ipv6无法直接访问qb等问题,但是我在使用socat的过程中发现和我正在使用的插件有冲突,于是使用了这个方法。
也可能有人会说,直接在每个设备上放一个ddns脚本就可以了,毕竟各大dns服务商都给了api。但是我个人觉得一个脚本完成全部操作更方便一点。
笔者学疏才浅,难免会有描述错误之处,还望大家批评指正。有疑问也可以留言,我会竭尽所能回复。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
95评论

  • 精彩
  • 最新
  • 这个脚本有问题:如果得到的ipv6地址中的某一段恰好是"123:"而不是预期的"1234:"就无法正常工作。
    解决办法是把脚本中的所有[0-f]改成[0-9a-f],就不会读取到":"了 [小眼睛]

    校验提示文案

    提交
  • 感谢楼主分享。之前一直想实现路由器自己更新下面所有设备的ipv6地址,一直没找到好办法,这回终于有了!感谢!

    校验提示文案

    提交

    cosz

    作者

    telanx

    能帮到你就好 [脸红]

    校验提示文案

    提交
    收起所有回复
  • 威联通配了ipv6 做到了域名外网连入,但有两个问题,一是域名时不时会被解析成出口的ipv4地址,导致连不上;二是为了联通关了小米路由器的ipv6防火墙,安全性降低,但又懒得折腾刷系统什么的。

    校验提示文案

    提交
    我当时放弃威联通官方ddns主要就是他不能指定只解析ipv6。但是威联通docker下有个ddns-go很好用,可以解决你的第一个烦恼。至于小米的ipv6防火墙确实很烦人…

    校验提示文案

    提交
    使用wireguard,ipv6联入家中,这样ipv6防火墙只要放开一个端口就行

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 重庆联通是不是缺德地禁用了dynv6解析啊?我电信卡能联上,联通卡就不行

    校验提示文案

    提交
    不清楚重庆那边情况…如果真的是那就是缺德到家了

    校验提示文案

    提交
    联通默认的DNS服务器连github都找不到,换成223.5.5.5

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 楼主楼主,阿里云怎么用这套东西呀 明示一下呗 [棒棒哒] [棒棒哒]

    校验提示文案

    提交
    没用过阿里云的ddns,不知道能不能直接二级域名绑定mac。如果不可以的话,可以试试把脚本里对应的::/60换成mac地址对应的ipv6后缀,去掉curl那一行后在动态ddns里引用(不再从接口获取ipv6地址而是从脚本获取),随后通过自带的阿里云接口上传到对应的二级域名。不过麻烦在于需要每个设备要单独设置一条ddns规则。

    校验提示文案

    提交
    收起所有回复
  • 问题是光猫拨号没有超级权限任何设置ipv6呢?

    校验提示文案

    提交
    光猫改桥接,换路由器拨号。如果不能改那就用zerotier等软件吧

    校验提示文案

    提交
    光猫走桥接IPTV就没有了

    校验提示文案

    提交
    还有4条回复
    收起所有回复
  • 重要步骤都没说,这篇文章废了

    校验提示文案

    提交
    重要部分都在脚本里写了注释啊…跟着脚本里我写的注释改就可以了 [喜极而泣]

    校验提示文案

    提交
    最后根据你的“设备名.域名”练一下试试吧。
    这句话什么意思?举个例子? [锁眉]

    校验提示文案

    提交
    收起所有回复
  • 目前两个NAS,威联通解析不到ipv6,群晖docker装ddnsgo解析ipv6,路由器防火墙开ipv6端口,群晖自带的反向代理,目前用着没问题。群晖装tailscale备用。

    校验提示文案

    提交
    我nas也是威联通我这边ipv6正常啊,是哪种解析不上呢。不过群晖的反向代理真的好用,威联通那个我有点折腾不来。

    校验提示文案

    提交
    群晖的反向代理,荔枝相册没问题,QB就是不行,不知何故?

    校验提示文案

    提交
    收起所有回复
  • 如果是这样的情况也可以用嘛,光猫-华为路由器-nas(虚拟openwrt)-pc [狂汗]

    校验提示文案

    提交

    cosz

    作者

    Rideo

    nas里op作旁路由?dhcp设在哪里的

    校验提示文案

    提交
    收起所有回复
  • 这个只能通过ipv6进行访问吧?没办法通过ipv4进行访问

    校验提示文案

    提交
    是的,纯ipv6需要客户端也有ipv6环境。

    校验提示文案

    提交
    收起所有回复
  • 头图机场登录界面 [皱眉]

    校验提示文案

    提交
    op登录界面 [喜极而泣] [喜极而泣]

    校验提示文案

    提交
    收起所有回复
  • 他家域名后缀就那几个海军、陆军的2年前就观察过,最后选了别家,每半年要上网站登录一次不然会被注销帐号。
    我crond里设置的是每天更新一次,因为是动态公网IP4。

    校验提示文案

    提交
    每半年登录的那家是noip么?其实脚本放到pppoe自带的定时脚本里更好,这样ip一变自动就运行了。但是有些固件没有。

    校验提示文案

    提交
    不是,noip不支持脚本必须要api。
    登录网站验证,跟脚本ddns是分开的。

    校验提示文案

    提交
    收起所有回复
  • 红米AX6可以用吗?是不是只能软路由

    校验提示文案

    提交
    ax6可以刷固件~刷完就可以用了

    校验提示文案

    提交
    [损失几个亿] 打不开SSH,老费劲了

    校验提示文案

    提交
    收起所有回复
  • 楼主你好,我是电信光猫直接拨号当路由的,有ipv6,后接的交换机和ap,能获取ipv6。请问这样能否动态解析,给我的群晖用呢,不想再接一台单独的路由了。电信这个华为的一体光猫还可以

    校验提示文案

    提交
    如果只有硬路由并且只给群晖用,直接在群晖上部署ddns会很不错

    校验提示文案

    提交
    收起所有回复
  • 楼主你好,很感谢你的分享,不过里面有好几个地方都很容易造成误解,比如脚本文件说到
    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

    校验提示文案

    提交
    另外就是运行:sh dynv6.sh时,提示command failed:not found,这是啥意思呀,是我的openwrt没有sh命令吗

    校验提示文案

    提交
    另外就是运行:sh dynv6.sh时,提示command failed:not found,这是啥意思呀,是我的openwrt没有sh命令

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 嗯问下opwer没设wan口只当旁路由器的这个wan没如何设?

    校验提示文案

    提交
    旁路由WAN口删除都可以,LAN口设置好网关.DNS就可以。

    校验提示文案

    提交
    从lan口获取

    校验提示文案

    提交
    收起所有回复
  • r86s?土豪啊,请问你的风扇声音大吗?为啥我的风扇声音感觉有点大。另外,自带的ddns插件不能能解析ipv6?为啥还要用脚本?

    校验提示文案

    提交
    风扇还好,就是劲太小 [喜极而泣] [喜极而泣] 自带的ddns只能解析到ap的ipv6,ap下每个设备的ipv6不方便获取。

    校验提示文案

    提交
    收起所有回复
  • 闲的蛋疼,一台ddns不就行了,剩下全反向代理。简单,高效且安全

    校验提示文案

    提交
  • 你这个确实好,能和MAC地址绑定。

    校验提示文案

    提交
  • 这方案挺好的,我现在用的就是这个,还可以配合socat实现端口转发

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
2.8K
扫一下,分享更方便,购买更轻松