Iptables

多個網卡同一個子網

  • March 10, 2016

我有一個如圖所示的設置。我知道這很瘋狂,但我只需要處理這個配置。

它基本上是一個ubuntu 伺服器,充當具有 4 個介面的路由器。其中 3 個(eth0、eth1 和 eth3)分別充當 PC1、PC2 和 PC3 的網關。

我希望 PC 通過它們訪問網際網路並設置 iptable 規則以在 ubuntu 伺服器上建構防火牆。


                             -----
                            | PC1 |10.1.0.101/16 (gw & dns-10.1.0.20)
                             ----- 
                               |
                          eth1 |10.1.0.20/16
                        ---------------
                       |               |
                  eth0 |    Ubuntu     | eth2         ----- 
10.1.5.244 -------------|    Server     |-------------| PC2 |10.1.0.102/16
(Router)    10.1.0.10/16|               |10.1.0.30/16  ----- (gw & dns-10.1.0.30)
                        ---------------            
                          eth3 |10.1.0.40/16
                               |
                             -----
                            | PC3 |10.1.0.103/16
                             ----- (gw & dns-10.1.0.40)

eth0 - connected to router (internet connected interface - gw=10.1.5.244)
      inet addr:10.1.0.10  Bcast:10.1.255.255  Mask:255.255.0.0
eth1 - inet addr:10.1.0.20  Bcast:10.1.255.255  Mask:255.255.0.0
eth2 - inet addr:10.1.0.30  Bcast:10.1.255.255  Mask:255.255.0.0
eth3 - inet addr:10.1.0.40  Bcast:10.1.255.255  Mask:255.255.0.0

$route -n 
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.1.5.244      0.0.0.0         UG    0      0        0 eth0
10.1.0.0        *               255.255.0.0     U     0      0        0 eth2
10.1.0.0        *               255.255.0.0     U     0      0        0 eth1
10.1.0.0        *               255.255.0.0     U     0      0        0 eth3
10.1.0.0        *               255.255.0.0     U     0      0        0 eth0

我已經通過以下 arp 配置解決了 ARP 通量問題。

echo "1" > /proc/sys/net/ipv4/conf/all/arp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

我還在 3 個介面 eth1、eth2 和 eth3 上設置了 ip 路由,如下所示的 eth2。

echo "152 table2" >>/etc/iproute2/rt_tables
ip route add default via 10.1.0.10 dev eth0 table table2
ip route add 10.1.0.0/16 dev eth2 table table2
ip rule add from 10.1.0.30 table table2
ip rule add to 10.1.0.30 table table2

我不確定 eth0 上的 IP 規則。

通過上述配置,我可以使用 PC1、PC2 和 PC3 連接到單獨的介面 eth1、eth2、eth3(解決 arp 通量問題)。

但是我無法在 PC1 和 PC3 上連接到網際網路。

似乎返回的數據包僅路由到 eth2(路由 -n 中的第一個條目,用於 10.1.0.0/16 子網),而與原始 PC1、PC2 或 PC3 無關。 (我也保留了 rp_filter=1因為我只想使用相應的傳出介面。)

所以我的問題是如何將返回數據包路由到相應的介面或如何僅從相應的介面訪問 PC 上的網際網路。

看起來您正試圖強制路由器完成交換機的工作……但為什麼不將伺服器變成實際的交換機呢?

您可以使用 Ubuntu 中的網橋解決方案來橋接所有介面,然後將伺服器用作透明防火牆,而無需任何第 3 層介面參與從 PC 到 Internet 的流量。

見這裡:https ://help.ubuntu.com/community/NetworkConnectionBridge

或者,將其設置為真正的路由器,但在這種情況下,將您的 /16 拆分為較小的子網,這樣每台 PC 都位於其自己的子網中,然後在伺服器和 Internet 網關之間有一個最終子網。

引用自:https://serverfault.com/questions/762769