OpenWrt下ipv6的ddns-cloudflare及Socat端口转发
HTML 2023-11-28 01:06 1711
外网通过移动的ipv6地址访问内网设备
网络环境:
移动宽带、光猫拨号、openwrt19.07
1.首先在光猫管理界面关闭ipv6防火墙(超级密码登陆)
2.openwrt安装软件包:
opkg update
# opkg install luci-app-socat (官方库中好像没有,自行本地安装)
opkg install ddns-scripts_cloudflare.com-v4
opkg install luci-app-ddns
3.ddns-cloudflare配置
按图上设置,其中lookup hostname填写你的域名
domain填写cloudflare中需要更新记录的域名,注意若非顶级域名需要使用@代替.,例如test.zhangxiaoqiang.top需要写成test@zhangxiaoqiang.top
高级设置中:
为防止获取到内网ipv6地址,需要使用第三方url方式获取目前的公网ip,ip address source 选择url方式,url填写一个可以获取ipv6的api,默认的比较慢。
我的openwrt作为旁路由使用,不需要为其他设备分配ipv6地址,为防止ddns获取到ipv6前缀,我将获取前缀关闭了:Interfaces » WAN6中将Request IPv6-prefix of length 设置为disabled,也可以在上图中修改url方式为使用script方式获取地址,具体script自行编写。
配置完成后回到ddns主页,在记录所在的pid列的start按钮启动ddns。
4.socat端口转发
原生端口转发无法支持ipv6入站请求,故使用该插件完成
请提前在cloudflare中添加AAAA记录
安装完成后应用入口位于network-socat,配置参考:
更新:
不知为何我的wan6会同时获取到/64和/128的公网地址
其中/128的无法通过外网访问,这里改为script方式获取ip,官方文档:detecting_wan_ip_with_script
如图修改
/root/script/getIpv6.sh
ip addr show eth0.2 | grep "inet6.*/64.*global" | awk '{print $2}' | awk -F"/" '{print $1}'
请按实际情况修改eth0.2以及实际获取到可用的ipv6地址后缀:/64
以下是命令解析
ip addr show eth0.2 | grep "inet6.*/64.*global"
筛选出ipaddr命令结果中ipv6地址那一行,结果为
inet6 xxxx:fe5d:c297/64 scope global dynamic
awk '{print $2}'
将结果以空格方式分割获取第二个内容,即
xxxx:fe5d:c297/64
awk -F"/" '{print $1}'
再将上述结果根据斜杠 / 分割,打印分割后的第一个字段,最终获取实际ip地址
xxxx:fe5d:c297
注意wan口所在网口的所有interface都不能设为bridge(例如wan和wan6),否则会导致dhcpv6无法获取ipv6地址:Daemon.err odhcp6c: Failed to send DHCPV6 message to ff02::1:2 (Permission denied)
参考文章:
发布于 2023-11-28 01:06, 最后修改于2024-01-09 15:50
© 2019 - ZXQ's Diary - zhangxiaoqiang.top