在诸如校园网或者其他需要认证的网络条件下,由于实名制上网的要求,通常不支持DHCP6-PD,因此要使用IPV6需要使用NAT6
目前最新版本的官方openwrt(23.05)已经自动支持NAT6了(firewall.xxx.masq6),因此,如果需要开启ipv6,不再需要复杂的安装各种包,直接LuCI网页操作即可。
发现论坛和网上找不到使用原生软件设置ipv6的教程,于是自己尝试,踩了很多坑,最后在官方教程处找到了信息。
1. LAN接口设置DHCPv6
网络>接口>LAN>编辑>DHCP服务器>IPv6 RA 设置
默认路由器 --> 设置为强制的
2 WAN6接口开启DHCPv6客户端
网络>接口>WAN6>编辑
请求IPV6地址 --> 强制(force)
请求指定长度的 IPv6 前缀 --> 禁用
3. 关闭IPv6 源路由
网络>接口>WAN6>编辑>高级设置
4. 开启NAT6
网络>防火墙>WAN>编辑>高级设置
IPV6伪装 --> 勾选
5. 配置系统转发
编辑/etc/sysctl.conf,加入以下这些
net.ipv6.conf.default.forwarding=2
net.ipv6.conf.all.forwarding=2
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.all.accept_ra=2
实测这个方法可行。
备忘一个旧版openwrt配置方法:
旧版OpenWRT的解决办法
防火墙
在之前的OpenWRT中,我用了一个清华大佬的贴子中的NAT办法,首先安装一堆IPv6相关的包:
opkg update
opkg install ip6tables kmod-ipt-nat6 kmod-ip6tables kmod-ip6tables-extra
然后在自定义防火墙文件/etc/firewall.user中添加自定义规则:
ip6tables -t nat -A POSTROUTING -o pppoe-wan -j MASQUERADE
ip6tables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -i br-lan -j ACCEPT
路由
此外,OpenWRT从DHCP服务器拿到地址后,会自动添加一条路由:
default from 2001:xxxx:xxxx:xxxx::/64 via fe80::xxxx dev pppoe-wan metric 512
这条路由对路由器下的设备没有用,因此,需要在/etc/hotplug.d/iface文件夹下新加一条接口热插拔规则,姑且起名为99-ipv6(前面的数字表示执行顺序,后面的名字随便起):
#!/bin/sh
[ "$ACTION" = ifup ] || exit 0
iface=wan6 # 这个接口名称对应/etc/config/network中定义的IPv6接口
[ -z "$iface" -o "$INTERFACE" = "$iface" ] || exit 0
ip -6 route add default via fe80::xxxx dev pppoe-wan metric 1
比较稳妥的办法就像上面这样,记住默认路由中的DHCP服务器地址,然后添加一条metric比较小的默认路由。
清华大佬用了sed替换上面那条默认路由,但我的网络中获取IPv6地址有延迟,导致一开始没有默认路由,于是就失败了。此外,第二条删除默认路的代码也有问题,语法有错。附上清华大佬的默认路由替换脚本:
#!/bin/sh
[ "$ACTION" = ifup ] || exit 0
iface=wan6
[ -z "$iface" -o "$INTERFACE" = "$iface" ] || exit 0
ip -6 route add `ip -6 route show default | sed -e 's/from [^ ]* //'| sed -e 's/metric [0-9]*/metric 1/'`
ip -6 route del `ip -6 route show default | grep from`
到这里应该内网就能上IPv6了。