OpenWrt下ipv6的ddns-cloudflare及Socat端口转发

HTML  2023-11-28 01:06  249  

外网通过移动的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)


参考文章:

关闭光猫ipv6防火墙

OpenWRT使用cloudflare DDNS

通过socat,使OpenWrt实现ipv6端口转发


发布于 2023-11-28 01:06, 最后修改于2024-01-09 15:50