配网完成——brouter配置与IPv6 NAT

今天我发现昨天配的源进源出和策略路由的策略有问题, 并进行了修复。晚上, 我在同学们都下班之后完成了割接。

由于这是我这辈子第一次配置成功brouter, 特此记录如下。

这篇文章所述, 我们实验室同时接入了双栈的教育网和校园网, 并且校园网内的一些信息系统(可能是IPv4也可能是IPv6)只能通过校园网访问, 而平常上网通过教育网比较好(不用在校园网内多走几跳路由器)。经过拍脑袋, 我的配置目标是: 对于IPv4, 由于公网地址有限, 我们只能向下游分配内网地址, 然后通过NAT访问教育网和校园网; 对于IPv6, 由于我们的上游接口只能配置静态地址或通过SLAAC来配置地址, 而我们的网段只有一个/64, 因此不方便将整个网段路由到我们的路由器, 又因为ND代理非常不优雅, 目前也没有一个能够完美代理一整个网段的ND代理实现(ndppd可以大致实现该功能, 但经研究, 我发现其不支持MLD的转发, 因此不是完美符合标准, 可能在存在MLD Snooping交换机的情况下工作不正常), 我最终选择将下游接口直接桥接到上游接口, 使得下游接口能够直接获得教育网的IPv6地址。此外, 对于访问校园网的IPv6分组, 我还需要用某种方式截获并将其源地址NAT到校园网的IPv6地址。

总体而言, 这是一个brouter的配置, 即IPv6桥接、IPv4路由。首先, 可以将教育网接口和下游接口加入一个网桥br0中, 并设置该网桥只能转发IPv6帧:

ebtables -A FORWARD -p ! IPv6 -j DROP

此外, 需要将目标地址是校园网的IPv6分组以及源地址是校园网的IPv6分组截获至我们的路由器的网络层进行转发, 方便我们设置路由表和NAT。其中, 核心关键技术是-j redirect

ebtables -t nat -A PREROUTING -p IPv6 --ip6-dst 校园网前缀/长度 --ip6-proto tcp --ip6-dport 0:1024 -j redirect 
ebtables -t nat -A PREROUTING -p IPv6 --ip6-src 校园网前缀/长度 --ip6-proto tcp --ip6-sport 0:1024 -j redirect 
ebtables -t nat -A PREROUTING -p IPv6 --ip6-dst 校园网前缀/长度 --ip6-proto udp --ip6-dport 0:1024 -j redirect 
ebtables -t nat -A PREROUTING -p IPv6 --ip6-src 校园网前缀/长度 --ip6-proto udp --ip6-sport 0:1024 -j redirect

此处, 为了截获较少的流量, 我只截获了访问校园网的低端口的分组。截获后, 路由表、NAT以及源进源出的配置与IPv4的类似, 此处省略。还值得一提的是, 截获源地址是校园网的IPv6分组是为了截获校园网访问下游IPv6地址的分组, 让它们经过我们的路由器的网络层转发一下, 使得源进源出的流表状态正常。

为了访问IPv4网络, 还需要配置IPv4地址。由于教育网接口和下游接口都接在了网桥br0上, 因此我在网桥br0上同时配置了教育网和下游的IPv4地址(以及直连路由)。顺便指出, 我发现, 直连路由会自动包含源地址选项, 内核向不同网络发送分组时会自动选择正确的源地址。由于此前设置了网桥只能转发IPv6帧, 因此我们不用担心两个网络之间发生混乱。但是, 此处需要注意的是, 内核在发送广播(如ARP)或组播包时, 仍然会同时向网桥中的两个接口发送, 因此我们还需要如下规则来使得内核只向每个接口发送(以及只从每个接口接收)正确的网络的包, 以ARP为例:

ebtables -A INPUT -p ARP -i 教育网接口 --arp-ip-dst ! 教育网前缀/长度 -j DROP
ebtables -A INPUT -p ARP -i 下游接口 --arp-ip-dst ! 下游前缀/长度 -j DROP
ebtables -A OUTPUT -p ARP -o 教育网接口 --arp-ip-dst ! 教育网前缀/长度 -j DROP
ebtables -A OUTPUT -p ARP -o 下游接口 --arp-ip-dst ! 下游前缀/长度 -j DROP

至此, 就基本配置完成了。此外, 对于额外的路由表项, 无论是去往教育网还是下游, 下一跳接口都可以设置为网桥br0

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

本文链接:https://twd2.me/archives/17759QrCode