OPENWRT固件路由器上实现内网设备的IPV6 ddns(支持阿里云)

2021-07-07
0评论
/
3206阅读
爱搜啊

以前写过一篇关于《荒野无灯老毛子华硕padavan固件设置阿里云DDNS内网穿透方法》后来使用过一段时间,遇到过一个关于DDNS内网穿透的we问题,就是反复获取《aliddns阿里云ddns内网穿透获取IP反复变化

讲过使用阿里云ddns后无法正常的识别WAN IP地址的解决办法

使用OPENWRT固件实现阿里云DDNS方法

阿里云的最新办法
利用自带的动态dns插件,添加一个配置

内网设备的IPV6 ddns

内网设备的IPV6 ddns

注意上面的1、2、3处

ip地址来源为脚本

2处为脚本文件的在路由器上的存放路径

3处是触发脚本执行更新的接口,根据你的实际情况进行选择为了保证刷机之后脚本文件还在,一般这样设置

#!/bin/sh

pd=$(ubus call network.interface.wan6 status | grep  -A 3 '"ipv6-prefix":' | grep address | awk '{print $2}' | awk '{print substr($0,1,length($0)-4)}' | sed 's/^.//')
hz=:209:34ff:fe2c:5ab0
wanip6=${pd}${hz}

echo "${wanip6}"

补充,@conupefox提供的获取PD的另外一个方法

<blockquote>.  /lib/functions/network.sh

这个跟以前的方法类似,主要是通过代码获取pd然后加上客户机IPV6地址的固定后缀,就是一个完整的V6地址

以下为非阿里云,如dynu等二级域名的使用放大

在IPV6环境,网内各设备均会获得一个全球地址,路由上可以通过DDNS等工具最其自身所获取的wan6 ip实现域名绑定,并自动更新,但不能解决通过域名访问网内其它设备IPV6地址的问题,经过观察发现我们的路由获取的IPV6除了128位地址外还有一个PD前缀(移动为60位,电信为56位),如下图

内网设备的IPV6 ddns

发现前面方框内即前面所说的前缀,后面方框内为给此设备分配的IPV6地址后缀,仔细观察还可以看出后缀最后6位与设备mac地址的后6位一样,但这并不是所有设备都是如此。

在经过多次观察,会发现路由对设备分配的IPV6后缀基本是固定的,当路由器重新拨号后,运营商分配的IPv6前缀会和wan ip一样发生变化,但后缀部分并不会变(此处不绝对,有些设备每次都不一样,此方法不适用)

同时在IPV4我们可以在路由上对局域网内设备指定IP地址分配,在IPV6我们一样也可以,但不再是固定的IP地址了,只能固定的后缀,再加上运营商分配的前缀就组成一个完整的IPV6地址

OpenWRT的网络-DHCP/DNS菜单的最下面有个静态地址分配

内网设备的IPV6 ddns

方框内填好后缀就行了,我习惯于用IPV4地址做后缀,其中DUID这个字段从“已分配的 DHCPv6 租约”里面找到对应关系选取。但此方式不建议,因为有时候并不会生效,会造成解析失败,建议后缀还是全地址(例如:2e0:b4ff:fe1c:4c63)
以上工作做好后,现在来讲如何通过脚本来实现动态域名的更新。
首先我们在dynu.com注册n个免费域名,该网站现在需要fq访问,但不影响解析
我们在openwrt的/etc/ppp/ip-up.d目录下新建一个dynu-a.sh的文件,内容如下:

#!/bin/sh

USERNAME="user"   #你注册dynu用户名
PASSWORD="password"   #你注册的dynu密码
DOMAIN="kobxx.dynu.net"  #你注册的dynu免费域名
wanip=`ifconfig pppoe-wan 2>/dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2 2>/dev/null`   #获取路由器IPV4地址

pd=`ubus call network.interface.wan6 status | grep  -A 3 '"ipv6-prefix":' | grep address | awk '{print $2}' |   grep -oE '[0-f]{0,4}\:[0-f]{0,4}\:[0-f]{0,4}\:[0-f]{0,4}'`     #获取路由器IPV6前缀
hz=::123    #123为路由上给a设备分配的IPV6后缀
wanip6=${pd}${hz}   #前缀后缀组合为设备的IPV6地址

curl  -k  "https://207.38.70.46/nic/update?hostname=${DOMAIN}&username=${USERNAME}&password=${PASSWORD}&myip=${wanip}&myipv6=${wanip6}"    #执行将ip地址发送到域名服务器进行更新

以上用户名密码等信息自行修改,保存后修改文件权限为0755

在lede的文件系统,放在/etc/ppp/ip-up.d目录下的脚本会在发生pppoe拨号自动触发执行,也就是说只要路由器重新拨号即可完成域名更新

如果有多台设备,可以继续新建文件dynu-b.sh,替换相应内容,依次可以将网内所有设备按照此方式实现域名更新。

这样做的好处就是避免了所有设备的域名更新IP全部在路由实现,而且路由只要重新拨号就触发,不需要花精力为每台设备去找ddns插件,有的平台可能根本就没合适的插件

aliyun-1.rar阿里云脚本


本站附件分享,如果附件失效,可以去找找看

诚通网盘附件百度网盘附件


于2021-07-07发布