校园网环境配置 IPv6 网络
坑边闲话:中国高效的校园网 IPv6 分配一般基于 DHCP/SLAAC,且百分之九十九的情况下都不会给 ipv6-pd 前缀,因此在宿舍内网里分配 IPv6 同时兼容 IPv4 NAT 一直是一个老大难的问题。中继模式看似可行,但是 OpenWrt 支持度并不高;NAT66 过于野蛮,也没有太好的用武之地。
本文介绍的方案可将路由器变成一个 IPv6 交换机,同时保持 IPv4 内网功能不变。
1. 警告·
注意,虽然通过 ebtables-legacy
命令在以太网层次实现校园网 IPv6 接入很棒,效果非常稳定。然而,这里面存在安全隐患。这种方式相当于把外网接到内网里,因为该方案利用了 IPv6、IPv4 双栈分离的特性,因此,OpenWrt 的防火墙对 IPv6 的入侵流量没有任何防护能力,所有的基于转发的过滤规则都不起作用。
这必然给骇客攻击留下了后门,毕竟 LAN Zone 是我们的后花园,允许另一个属性的流量自由出入,肯定不是好事情。虽然现在还不清楚有什么隐患,但是应该提醒读者,这并不是最佳实践。
最后,如果你确实对校园网 IPv6 分配有需求,而且需要用到软路由,那么本文将把命令提供给你,有需要自己研究即可。同时要特别注意混杂模式和环路问题。
2. 固件配置·
首先固件需要支持 ebtables
命令或者 ebtables-legacy
命令。随后,找到你接入到校园网交换机的那个网卡的 id
. 因为这套方案基于 ESXi 或者 Proxmox VE 虚拟化,所以我先把使用场景描述一下:
- ESXi 有两个网口,一个接校园网,一个接内网交换机
- 两个网卡分别配置到两个虚拟交换机上充当上行链路
OpenWrt 软路由要配置两个校园网网卡,如图 2 所示。其中一个网卡给 OpenWrt 自己用,接在 WAN6
防火墙下;另一个接入 br-lan
.
接入 br-lan
的校园网网卡,要主动丢掉所有 IPv4 数据包,这是基于 ebtabls
实现的。ebtables
可以在链路层工作并处理以太网数据帧。命令如下:
1 | ebtables-legacy -t broute -A BROUTING -i eth2 -p ! ipv6 -j DROP |
务必要把 eth2
改成你自己的网卡 id.
最后,ebtables
开机失效,所以要在启动项里添加:
1 | ebtables-legacy -t broute -A BROUTING -i eth2 -p ! ipv6 -j DROP |
如果最后,因为有很多广播包是漫无目的发送的,而且校园网 IPv6 分配是基于 SLAAC(至少我们学校是这样),所以要开启 ESXi 端口组的混杂模式:
如果你采用了这个方案,那我就不保证网络安全了。之前我说 IPv6 是安全的,那是因为有基于转发的防火墙策略,现在你将裸奔在广阔的 IPv6 世界。
3. 操作原理·
3.1 Linux bridge 网络基础·
Linux 对于网卡的配置非常灵活,单网卡可以直接配置 IP 地址并接入网络。此外,Linux 内核还提供一种名为 bridge 的桥网络。桥网络的应用场景很多,特别是在虚拟化和容器领域。
Linux 内核的 bridge 设备提供了以下功能:
- 数据包转发:根据数据包的目的 MAC 地址在不同的网络接口之间转发数据包;
- MAC地址学习:自动学习和维护一个 MAC 地址表,以便高效转发数据包;
- 广播和组播处理:处理广播和组播数据包,将其发送到所有相关接口;
- 生成树协议(STP)支持:支持 STP 协议,以防止网络环路;
- VLAN 支持:可以创建和管理 VLAN,隔离不同的网络流量;
- 防火墙规则:与
ebtables
结合使用,可以在桥接设备上应用链路层的防火墙规则。
3.2 ebtables
实现的内核网络行为·
在 OpenWrt 系统上,br-lan
指的就是处于 LAN Zone 防火墙下的、接入内网的、桥网络类型的接口。
注意,我们使用的是网络接口一词,而非网卡。在 Linux 中,可以创建虚拟接口或接口别名来实现多个逻辑接口共用一个物理网卡。如 wan
和 wan6
指代的可能都是 eth1
网卡。一般我们的软路由有三个及以上数量的网口,因此可将一个网口设置为公网接口,其余网口并入到一个桥网络(br-lan
)并接入局域网(这些物理网口可以接内网设备),以统一的 MAC 地址和 IP 地址与内网中的其他设备通信并提供内网数据转发。
那么如本文所述,如果将校园网接入了 br-lan
,系统内的流量会发生什么变化呢?
eth2
在 br-lan
桥接设备中且 br-lan
连接到内网,则内网的 IPv4 广播流量会通过 eth2
发送到校园网。这是因为桥接设备在默认情况下会转发广播和组播流量到所有端口,包括 eth2
. 如果学校那边的交换机做了下游 DHCP 流量阻断,我们内网中的信息广播出去也问题不大。然而,如果学校的网管没有做配置,我们的路由器就会对校园网造成网络攻击。此外,mDNS 等服务也会被广播带出去,造成内网的服务泄露,导致内网安全问题。总之,我们希望仅仅对 IPv6 做桥接,IPv4 流量进不来也出不去。
可以使用 ebtables
来阻止通过 eth2
的所有 IPv4 广播流量:
1 | # 过滤所有通过 eth2 的非 IPv6 广播流量 |
以下规则将阻止所有从 br-lan
接口进入 eth2
的 IPv4 流量:
1 | # 阻止从 br-lan 到 eth2 的非 IPv6 流量 |
如此,可以保证我们不侵入校园网。
总结·
通过将 IPv6 模式配置为“交换机”,可以实现校园网 IPv6 流量的内网透入。该操作要求路由器支持 ebtables
,同时也要自己承担安全风险。
后续可能会出一些与 netfilter 技术相关的文章,敬请期待。