配置静态ip

脚本是根据设定一段固定的v6后缀,再与运营商下发前缀拼合得到一串ip。由于设定的v6后缀固定,所以需要设备的v6后缀固定。在路由里对需要DDNS的设备配置v6的静态后缀即可,Linux一般采用eui64分配,win需在适配器选项里也设置好。

配置基础DDNS

详见在OpenWrt里设置Cloudflare的DDNS

需要在IP地址版本处勾选IPV6,并在cf里为查询主机名添加一个任意的AAAA记录。在高级设置中,需要把IP地址来源改为脚本,并在下方事件网络处选择br-lan。脚本内容往下看。

编写脚本并上传

适用于luci-app-ddns,搭配ddns-scripts-cloudflare使用。

参考以下脚本,保存成.sh文件。SUFFIX后面写设备固定的v6后缀。我用的immortalwrt,如使用其他固件,首行按需求改为#!/bin/bash,否则会报错not found

1
2
3
4
#!/bin/ash
INTERF=br-lan
SUFFIX="6dcb:1863:2bd1:b28f"
ip -6 addr show dev $INTERF | awk '/inet6/ && !/fe80::|deprecated/ {print $2}' | cut -d':' -f1-4 | sed "s/$/:$SUFFIX/"

如果你在接口全局网络选项中设置了IPv6 ULA 前缀,则使用上述脚本会获取到2个ip,其中一个是本地唯一地址,需要调整awk过滤条件。以下命令只会获取以2xxx开头的地址。

1
ip -6 addr show dev $INTERF | awk '/inet6 2/ && !/fe80::|deprecated/ {print $2}' | cut -d':' -f1-4 | sed "s/$/:$SUFFIX/"

我在Windows上编辑完后上传,immortalwrt没有sftp服务,使用cat上传。

1
scp C:\Users\Administrator\Documents\v6script.sh root@192.168.2.1:/www/v6script.sh

上传完成后,使用vim手动删除每行最后^Mdos换行符,并记得使用chmod +x v6script.sh 授予运行权限。然后回到DDNS设置界面填写上脚本绝对路径。

如使用ddns-go,可改用以下命令,各参数参照上述说明修改。

1
INTERF=br-lan; SUFFIX="6dcb:1863:2bd1:b28f"; ip -6 addr show dev $INTERF | awk '/inet6/ && !/fe80::|deprecated/ {print $2}' | cut -d':' -f1-4 | sed "s/$/:$SUFFIX/"

放行DDNSv6的设备

通信规则里,匹配ip规则自定义为::6dcb:1863:2bd1:b28f/::ffff:ffff:ffff:ffff,意思为只要匹配后缀为::6dcb:1863:2bd1:b28f则接受转发,避免前缀变化造成无法访问。