Routing

如何同時橋接 IPv4 但路由 IPv6?

  • July 20, 2020

我的 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 到專用網路,並從該網路為節點分配另一個地址?有沒有更直接的選擇?

(所有這些命令都應該在 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,根本無法工作。

引用自:https://unix.stackexchange.com/questions/432967