1、介绍
之前写的 《openwrt软路由实现ipv6上网配置》文档,经过长期的使用测试和网友评论反馈,之前写的配置方法没有实现必然ipv6上网,重启路由器后就会导致不能ipv6上网,经过查找文章,找到了 ipv6 nat 上网配置方式,ipv4就是使用nat模式上网,nat模式上网是一个非常稳定方法,不会像ipv6直通模式有时能上网,有时不能上网,非常不稳定。
为了解决 ipv6 直通模式上网不稳定问题,换成了 nat模式,经过多此重启路由器和长期使用测试,非常稳定,每一次路由器启动后就能通过ipv6上网。
2、参考文档
wherelse 博主文章: Openwrt的IPV6 NAT的实现 ;直接按照此文章配置就能实现ipv6 nat 上网
3、资源准备
准备一台安装好了openwrt软路由的电脑或刷好openwrt系统路由器
本人使用是openwrt系统版为:sirpdboy大神发布的openwrt x86版软路由系统,地址https://www.right.com.cn/forum/thread-4053752-1-1.html
4、开始配置
直接说重点核心配置
1、在 网络->接口 中, 设置全局网络选项中的 IPv6 ULA 前缀 , 将开头的 f 改成 d 或者改为:dd00:101:101::/48
2、在 网络->接口->LAN 中,设置 DHCP 服务器,将路由器通告服务、DHCPv6 服务选为服务器模式,NDP 代理选为已禁用,DHCPv6 模式选为有状态(或则 无状态+有状态 ),同时勾选 总是通过默认路由。
3、在 网络->防火墙->自定义规则 中添加以下内容:
WAN6=pppoe-wan
LAN=br-lan
ip6tables -t nat -A POSTROUTING -o $WAN6 -j MASQUERADE
ip6tables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -i $LAN -j ACCEPT
配置好这个就可以实现ipv6 nat模式上网
4、修改正错误的路由
此步骤不是必须的,上面的步骤都配置好了无法ipv6上网可以检查路由是否正确
在终端中输入:ip -6 route, 查看自己的 IPV6 网关,在 PPPOE 拨号情况下正常的网关应该类似于:
default via fe80::96db:daff:fe3e:8fcf dev pppoe-wan proto ra metric 1024
但是可能会存在错误的网关,如:
default from 2001:xxx:xxxx:xxxx::/64 via fe80::96db:daff:fe3e:8fcf dev pppoe-wan proto static metric 512 pref medium
这些会导致路由可以正常使用 IPV6 而通过 NAT 分配的设备无法正常使用 IPV6,我们需要使用脚本将错误的网关进行更改。
添加网关修改脚本。在终端中输入: vi /etc/hotplug.d/iface/99-ipv6, 进入编辑界面,将以下内容复制进去:
#!/bin/sh
[ "$ACTION" = ifup ] || exit 0
iface=wan6
[ -z "$iface" -o "$INTERFACE" = "$iface" ] || exit 0# Bad route 1
bad=$(ip -6 route show default | grep -v "pppoe-wan" | sed 's/expire.*//')
logger -t IPv6 "Old IPv6 route w/o PPPoE: $bad"
if [ "x$bad" != "x" ]; thenlogger -t IPv6 "Remove old IPv6 route..."status=$(ip -6 route delete $bad 2>&1)logger -t IPv6 "Done: $status"
fi# Bad route 2
good=$(ip -6 route show default | grep "pppoe-wan" | sed 's/from [^ ]* //' | head -n1)
logger -t IPv6 "Good route is: $good"
logger -t IPv6 "Add good IPv6 route..."
status=$(ip -6 route add $good 2>&1)
logger -t IPv6 "Done: $status"