背景

IPv6 的好处不多说,在有 IPv6 的网络环境下当然是能用则用。但是很多情况下,由于种种原因,经常会有 IPv6 的情况。比如使用 DHCPv6 分配地址,且不支持 PD。这样的话路由器就没法分配子网,路由器下的设备就没法使用 IPv6。下面介绍一种在路由器下进行 IPv6 穿透的方法,可以较好地支持 IPv6。

原理

在 WAN 和 LAN 之间搭建一个网桥,过滤 IPv4 连接,只允许 IPv6 通过。即在 IPv6 下处于交换机模式,这样连接到路由器的设备的 IPv6 环境相当于与路由器同等,就可以自行获得地址了。

步骤(以梅林固件为例)

设 WAN 口的网卡名叫 vlan2

1
2
# ebtables -t broute -A BROUTING -i vlan2 -p ! ipv6 -j DROP
# brctl addif br0 vlan2

此后将其设置为开机启动即可。

补充:梅林双线路下的处理 / IPv6 专线

如果已经开启了梅林的双线路模式,则无法直接对 WAN 口进行桥接。这时可以单独使用一条网线作为传输 IPv6 的专线。

将一个 LAN 口设置为 IPv6 WAN

比如将 LAN1 设置为 IPv6 的 WAN 接口,网卡名起作 vlan4

1
2
3
4
# nvram set vlan1ports="2 3 4 5*"
# nvram set vlan4ports="0 5"
# nvram set vlan4hwname=et0
# nvram commit

重启后生效。

设置网桥的脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/sh

if [ -f /tmp/ipv6-vlan ]; then
	echo "already set up ipv6 via vlan"
else
	ifconfig vlan4 up
	ebtables -A INPUT -i vlan4 -p ! ipv6 -j DROP
	ebtables -A FORWARD -i vlan4 -p ! ipv6 -j DROP
	ebtables -A INPUT --in-interface vlan4 --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
	ebtables -A FORWARD --out-interface vlan4 --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
	brctl addif br0 vlan4
	touch /tmp/ipv6-vlan
fi

添加到开机启动即可。

参考教程