为每个具有公网IPV6的设备分别进行DDNS,访问不再依赖端口转发
配置静态ip
脚本是根据设定一段固定的v6后缀,再与运营商下发前缀拼合得到一串ip。由于设定的v6后缀固定,所以需要设备的v6后缀固定。在路由里对需要DDNS的设备配置v6的静态后缀即可,Linux一般采用eui64分配,win需在适配器选项里也设置好。
配置基础DDNS
需要在IP地址版本处勾选IPV6,并在cf里为查询主机名添加一个任意的AAAA记录。在高级设置中,需要把IP地址来源改为脚本,并在下方事件网络处选择br-lan。脚本内容往下看。
编写脚本并上传
适用于luci-app-ddns,搭配ddns-scripts-cloudflare使用。
参考以下脚本,保存成.sh文件。SUFFIX后面写设备固定的v6后缀。我用的immortalwrt,如使用其他固件,首行按需求改为#!/bin/bash,否则会报错not found。
#!/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开头的地址。
ip -6 addr show dev $INTERF | awk '/inet6 2/ && !/fe80::|deprecated/ {print $2}' | cut -d':' -f1-4 | sed "s/$/:$SUFFIX/"
我在Windows上编辑完后上传,immortalwrt没有sftp服务,使用cat上传。
scp C:\Users\Administrator\Documents\v6script.sh root@192.168.2.1:/www/v6script.sh
上传完成后,使用vim手动删除每行最后^M的dos换行符,并记得使用chmod +x v6script.sh 授予运行权限。然后回到DDNS设置界面填写上脚本绝对路径。
如使用ddns-go,可改用以下命令,各参数参照上述说明修改。
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则接受转发,避免前缀变化造成无法访问。
