我的 ISP 授予我一IPv4 地址和 IPv6 前缀,已细分为几个网络。
+--------------+
| | eth1
| |---------- <IPv6 network>
| |
eth0 | Linux Router | eth2
ISP ----------| |---------- <IPv6 network>
| |
| | eth3
| |---------- <IPv6 network>
+--------------+
正好一连接到的 IPv6 网络的节点eth1
将受益于拥有 IPv4 地址。
看来我想要路由器桥IPv4 流量,以及路线IPv6 流量。不?
我听说过代理 ARP,但据我所知,我需要为路由器提供另一个 IPv4 地址,否则它不会尝试与 ISP 的 v4 流量进行交互,对吧?再说一遍,我只有一个 v4 地址。
我认为,普通桥接也不是一种选择,因为那是第 2 层,它无法区分 IPv4 流量和 IPv6 流量之间的区别。如果桥接 IPv4,也会桥接 IPv6,这会破坏当前的 IPv6 设置。
我是否被迫将流量 NAT 到专用网络,并从该网络为节点分配另一个地址?有更直接的选择吗?
答案1
(所有这些命令都应该在Linux路由器上执行。)
步骤 1:正常创建网桥,就好像它要路由两个接口之间的所有流量一样。
ip link add name br0 type bridge
ip link set br0 up
ip link set eth0 master br0
ip link set eth1 master br0
步骤 2:通过 ebtables 规则,告诉内核应该桥接 IPv4 流量,并且应该路由 IPv6 流量。
ebtables -t broute -A BROUTING -p ipv4 -j ACCEPT
ebtables -t broute -A BROUTING -p ipv6 -j DROP
(在BROUTING链中,“ACCEPT”表示桥接,“DROP”表示忽略桥接。)
Linux 路由器的接口都不需要 IPv4 地址。
该解决方案不应在 Virtualbox VM 上进行测试,因为存在一些问题桥接错误br0
根本无法工作的地方。