Linux

從 Linux 機器訪問兩個隔離的子網

  • October 18, 2018

我有一個帶有兩個 NIC 的 Linux 機器,每個都連接到不同的 LAN:

LAN A: 192.168.1.0 255.255.255.0
LAN B: 192.168.2.0 255.255.255.0

路由器是:

RouterA: 192.168.1.1
RouterB: 192.168.2.1

無線接入點是:

WAP-B1: 192.168.2.3
WAP-B2: 192.168.2.4

Linux NIC 是:

NIC A: 192.168.1.2 (eth0) default gateway 192.168.1.1, metric 100
NIC B: 192.168.2.2 (eth1) metric 101

這是一個ASCII圖:

+-------+                                                           +-------+ 
| ISP A |                                                           | ISP B |
+-------+                                                           +-------+ 
   |                                                                   |
+---------+      +-------+      +-----------+      +-------+      +-----------+ 
| RouterA | <--> | LAN A | <--> | Linux Box | <--> | LAN B | <--> | RouterB-1 |
+---------+      +-------+      +-----------+      +-------+      +-----------+ 
                                                                   |        |
                                                           +--------+      +--------+
                                                           | WAP-B1 |      | WAP-B2 |
                                                           +--------+      +--------+ 

我希望所有 Internet 流量都通過 LAN A 和 ISP A。我只將這個 Linux 機器連接到 LAN B,這樣我就可以對 LAN-B 上的設備執行管理,特別是 RouterB 和 WAP-B1、WAP-B2。因此,我只想通過 NIC B (eth1) 路由地址 192.168.2.0/24。我希望通過 NIC A 路由所有其他流量。我不希望任一 LAN 中的主機能夠相互連接(或相互 ping 等)。我希望 LAN A 和 LAN B 保持隔離。

我連接了網線,似乎一切正常。我假設路由指標是按照我連接電纜的順序建立的。但是,我想知道設置路由規則以確保我維護工作配置的正確方法。

更新:作為對評論的回應,這裡是輸出route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
0.0.0.0         192.168.2.1     0.0.0.0         UG    101    0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     101    0        0 eth1

這是我猜想是正確的路由表。(這只是一個猜測。)

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
192.168.2.0     192.168.2.1     255.255.255.0   UG    101    0        0 eth1
192.168.1.0     192.168.1.1     255.255.255.0   U     100    0        0 eth0

在 NetworkManager > IPv4 > Routes 中,我檢查了“忽略自動獲取的路由”並添加了這個靜態路由:192.168.2.0,網路遮罩:255.255.255.0,網關:192.168.2.1,指標:101

這是由這些更改產生的路由表。

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
192.168.2.0     192.168.2.1     255.255.255.0   UG    101    0        0 eth1
192.168.2.0     0.0.0.0         255.255.255.0   U     101    0        0 eth1
192.168.1.0     192.168.1.1     255.255.255.0   U     100    0        0 eth0

這對我來說看起來不對,但今天是我第一次查看路由表。

更新:我正在執行 Arch Linux 和 NetworkManager。但是,我更喜歡基於ip address和之類的命令的答案ip route

更新 2:感謝@vaha的回答,這是所需的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     101    0        0 eth1

我還沒有弄清楚如何創建一個持久配置,以確保在重新啟動時此路由表。

但是,我可以使用以下步驟手動建立這些路線:

  1. 在 NetworkManager > IPv4 > Routes 中,選中兩個介面的“忽略自動獲取的路由”。
  2. $ sudo ip route add default via 192.168.1.1 metric 100 dev eth0
  3. $ sudo ip route delete default via 192.168.2.1 dev eth1

對此的其他變體,例如不檢查 eth0 的“忽略自動獲得的路由”,都不起作用。例如,當我只忽略 eth1 的自動獲取路由時,在啟動時,我的系統使用 192.168.2.1 作為預設 gw。這是一個意想不到且令人困惑的結果。

我的最後一個問題是如何配置我的系統,以便這些是重啟後的預設路由?

讓我們分兩步清除您的疑慮:

第1步

因此,我只想通過 NIC B (eth1) 路由地址 192.168.2.0/24。我希望通過 NIC A 路由所有其他流量。

預設路由表(您手動配置之前的表)提供您正在查找的路由規則。

以下是詳細解釋:

192.168.2.0     0.0.0.0         255.255.255.0   U     101    0        0 eth1

表示子網 192.168.2.0/24 是本地網路,不需要網關。任何以該網路中的地址為目標的數據包都將直接傳送到目的地而無需一跳。

192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

對子網 192.168.1.0/24 說同樣的話。

0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
0.0.0.0         192.168.2.1     0.0.0.0         UG    101    0        0 eth1

表示剩餘流量將通過 eth0 和 eth1 路由,其中​​路由決策取決於度量值。較低的度量值具有較高的優先級。但是如果 eth0 關閉,那麼所有流量都將通過 eth1 路由,反之亦然。順便說一句,我不確定,但我對 eth0 的優先級高於 eth1 的最佳猜測是介面名稱的字母順序。

作為結論,下表是您正在尋找的。我對 NetworkManager 不熟悉,但我認為您可以忽略自動獲取的兩個介面的路由並手動設置自己的路由來實現此路由表。

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     101    0        0 eth1

第2步

我不希望任一 LAN 中的主機能夠相互連接(或相互 ping 等)。我希望 LAN A 和 LAN B 保持隔離。

簡單地將您的 linux 機器連接到兩個不同的網路不會影響它們的隔離,除非在機器的防火牆上定義了 NAT 規則或機器的介面被橋接。

iptables您可以通過 Arch Linux 上管理防火牆的工具或nftables工具來檢查 NAT 規則。另請參閱Arch Linux wiki - 防火牆

列出 NAT 規則的範例命令:iptables -t nat -L -v -n

在您的路由表上看不到網橋,但您可以使用Arch Linux wiki-Network bridge中描述的一種方法詳細檢查網橋。

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