经常玩 PT 的同学很可能也遇到过下面这个令人头疼的问题:目前大多数路由器并不支持 IPv6 的局域网转发,虽然可以利用 Lan 口互相是桥接的原理强行把路由器接成交换机模式实现校园网的 AP 接入,但是这样也同时失去了同一路由器下多设备的局域网互联,这给平时多设备的数据传输带来了很大的不便。为此,我们需要一台 OpenWrt 的路由器解决这个问题。
1. 前期准备与思考
我的网络环境为:
- 一根教育网有线网(IPv4 和 IPv6 均为公网 IP)
- 一根移动宽带光纤(IPv4 和 IPv6 均无公网 IP)注[1]
设备环境为:
- 华为光猫一台,办理移动宽带租用的,固件锁了路由功能,只能单 WAN 输出。
- 一台刷了 OpenWrt 的网件路由器 WNDR3800
- 两台 Win10PC,其中一台作为 NAS
- 众多需要 WLAN 的移动设备
理想实现的效果:
- 尽量少的折腾,最好能在一台路由器上搞定所有需求,即连接到这台路由器的所有设备可以自动获取到
IPv4
和IPv6
IP 地址并能顺利联网。 - 进一步的要求,由于 PT 需要,每台设备的 IPv6 地址最好是
公网
的。
2. IPv6 的三种模式
路由器配置的最难点在于对 IPv6 的支持上,尽管 OpenWrt 三四年前的版本就已经可以转发 IPv6 流量了,但是依旧不完善,尤其是图形化界面的操作大不如 IPv4。
我通过整理一些大神的技术博客流传下来的资料,了解到现在 IPv6 转发有以下三种方式:
(1) Relay 中继模式
这是最早用的一种模式,即用路由器作为中继,路由器获得 IPv6 公网地址,获得数据后,转发给后面所有连接到路由器的局域网设备。
实现中继模式有以下两种方法:
6relay,现在搜索‘教育网 IPv6 OpenWrt’关键词,出来的大多数教程都还是用这种方式,实际上 OpenWrt BB 版本后就已经不再用这种方式。故忽略。
odhcpd,似乎 CC 版本后的 OpenWrt 已经支持从 luci 配置这种方式,可见它还是较为稳定,不过经实际测试,虽然后面的设备能够获得路由器局域网 IPv6 地址并成功联网,但 10 分钟左后后会断流,需要重启路由器。我似乎没有找到比较完美的解决办法,故而放弃。注[2]
(2) NAT6 模式
众所周知,在 IPv4 网络下路由器是用 NAT 进公网到局域网地址转换的,NAT6 即为 IPv6 编写的 NAT 服务。网上也能搜到很多有关 NAT6 配置的方法,事实上,这种模式现在非常稳定,使用过程中完全察觉不到,和普通的 IPv4 路由没有什么区别。
不过 NAT6 模式下还是有个小问题,就是由于后面的设备都是局域网 IPv6 地址,加上 OpenWrt 可能对端口转发之类的支持不太好,所以挂 PT 时,utorrent 的连接性很差。
(3) 桥接穿透模式
目前来看,对于教育网 IPv6 环境,这可能是最适合的一种转发方式。事实上,它和我们平时用到的反插网线强行交换机模式的原理很相似,通过设置将 IPv6 网线接口与 LAN 口桥接,这样 LAN 口相当于 AP 接入校园网 IPv6 环境;与此同时我们再叠加一个 IPv4 的宽带即可。这样的方式下,路由器本身没有 IPv6 地址,但是后端所有设备都有公网 IPv6,非常适合拿来刷 PT。不过由于路由器没有公网 IP,所以想用路由器挂 PT 的可能要考虑上述两种方式了。
总结
路由器 IP | 设备 IP | 连接性 | |
---|---|---|---|
Relay | 公网 | 内网 | 较差 |
NAT6 | 公网 | 内网 | 一般 |
桥接 | 无 | 公网 | 非常好 |
对于用路由器做主力 NAS 的情况
: 首选 NAT6
对于每个设备都需要公网 IP 的情况
: 首选桥接
3. 路由器配置
(1) 双 WAN 口设置
WNDR3800 上只有一个原生 WAN 口,我们首先要先通过 luci 界面的交换机
设置 VLAN,把一个 LAN 口用作WAN6
。
设置方式为:
CPU 接口: 所有 VLAN 均需与之已标记(Tagged)
VLAN 连接的接口: 设置为未标记(Untagged)
未与 VLAN 连接的接口: 设置为关闭(Closed)
设置完后的 VLAN 如下
VLAN ID | CPU | LAN 1 | LAN 2 | LAN 3 | LAN 4 |
---|---|---|---|---|---|
1 | 已标记 | 关 | 未标记 | 未标记 | 未标记 |
2 | 已标记 | 未标记 | 关 | 关 | 关 |
这样,连接在 LAN 1 的网口 VLAN 2 就可以用作一个新的 WAN 口。
(2)配置两个 WAN 口
在 luci 中找到接口
,比较新的 OpenWrt 中应该都自带添加了WAN
和WAN6
两个接口,如果没有的话,手动添加一个接口并命名为WAN6
。
对于WAN
口,正常设置即可,比较重要的一点是,因为我不想用移动宽带的 IPv6,要在接口
-高级设置
-获取 IPv6 地址
设置为已禁用
。
对于WAN6
口,找到物理设置
,选择接口为VLAN 'eth0.2'
(默认 IPv6 插在了刚刚设置的 LAN 1,宽带插在 WAN)。
之后就是重头戏,我们要设置 IPv6 的桥接。网上教程中提到需要安装ebtables
去转发即将设置桥接的 WAN 口的 IPv4 数据,但是显然在我们这个双 WAN 的操作中是用不到的,因为校园网 IPv4 计流量而宽带不限量,故忽略这一步。
直接在接口
-LAN
-物理设置
,会看到已经有了一个桥接,这个是把 2 个 WLAN 接口及 LAN(eth0.1 即交换机设置中原有的 VLAN1)桥接在一起,使得 LAN 下的设备彼此互联。我们在这个已有的桥接中添加勾选VLAN 'eth0.2'
即把 WAN6 和全部 LAN 桥接在一起。
虽然原理讲起来非常复杂,但实际操作我们只需这样简单的一个操作,就完成了 IPv6 的桥接穿透。
当然,根据网上教程最后还需要在启动项
中禁用 odhcp,以免它反复报错。
后续思考
桥接模式下的一个小 BUG
由于开机过程比较缓慢,在路由器刚启动时,DHCP 还没有来得及给设备分 IP,这时由于桥接,设备已经获取到了校园网的 IPv4 地址,这显然是我们不希望的。这个现象目前我的解决办法就是开机先让路由器缓一会儿再连网,还没有找到更好的办法。
NAT6 模式下的端口转发
理论上来说,通过ip6tables
可以设置 IPv6 的端口转发,不过囧于 luci 没有很好地适配 ip6tables,所以需要在命令行操作,加之我自己没有需要,就懒得研究了,以后有空了没准会研究一下。
参考链接
OpenWRT IPv6 三种配置方式
http://blog.kompaz.win/2017/02/22/OpenWRT%20IPv6%20%E9%85%8D%E7%BD%AE/
Lede、PandoraBox IPv6 NAT66 的实战操作