Linux

具有 4 個 NIC 的 Linux 路由器無法正常工作

  • May 7, 2011

我正在設置一個基於 Linux 的路由器,帶有 4 個 NIC,儘管遵循各種網站上建議的步驟,但我似乎無法說服它工作。

每個介面都在一個單獨的子網上,如下所示:

eth0 10.1.0.254 (255.255.255.0)
eth1 10.1.1.254 (255.255.255.0)
eth2 10.1.2.254 (255.255.255.0)
eth3 10.1.3.254 (255.255.255.0)

每個網路上的每個設備都配置為使用 10.1。x .254 作為本地網路上的網關。

我已啟用 IP 轉發(並使其永久化/etc/sysctl.conf

$ cat /proc/sys/net/ipv4/ip_forward
1

並且路由表看起來是正確的

$ route
Kernel IP routing table
Destination     Gateway    Genmask         Flags Metric Ref    Use Iface
localnet        *          255.255.255.0   U     0      0        0 eth0
10.1.1.0        *          255.255.255.0   U     0      0        0 eth1
10.1.2.0        *          255.255.255.0   U     0      0        0 eth2
10.1.3.0        *          255.255.255.0   U     0      0        0 eth3

介面

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:50:8d:xx:xx:xx
         inet addr:10.1.0.254  Bcast:10.1.0.255  Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:28919 errors:0 dropped:0 overruns:0 frame:0
         TX packets:16132 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:35054376 (35.0 MB)  TX bytes:1424175 (1.4 MB)
         Interrupt:22

eth1      Link encap:Ethernet  HWaddr 00:1b:21:xx:xx:xx
         inet addr:10.1.1.254  Bcast:10.1.1.255  Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:8 errors:0 dropped:0 overruns:0 frame:0
         TX packets:54 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:480 (480.0 B)  TX bytes:3996 (3.9 KB)

eth2      Link encap:Ethernet  HWaddr 00:1b:21:xx:xx:xx
         inet addr:10.1.2.254  Bcast:10.1.2.255  Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:9 errors:0 dropped:0 overruns:0 frame:0
         TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:1024 (1.0 KB)  TX bytes:4122 (4.1 KB)

eth3      Link encap:Ethernet  HWaddr 00:1b:21:xx:xx:xx
         inet addr:10.1.3.254  Bcast:10.1.3.255  Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:6419 errors:0 dropped:0 overruns:0 frame:0
         TX packets:6702 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:701177 (701.1 KB)  TX bytes:612622 (612.6 KB)

lo        Link encap:Local Loopback
         inet addr:127.0.0.1  Mask:255.0.0.0
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         RX packets:1753 errors:0 dropped:0 overruns:0 frame:0
         TX packets:1753 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:194373 (194.3 KB)  TX bytes:194373 (194.3 KB)

一台PC連接到10.1.1.0/24網路(IP地址為10.1.1.1,網關配置正確為10.1.1.254),可以ping通Linux路由器的本地介面,但是其他3個路由器介面都打不通網關。

我在此網路設置中沒有任何防火牆(硬體或軟體)。

我錯過了一些基本的東西嗎?

編輯 1

從 PC 10.1.1.1,我現在可以 ping 路由器上的所有介面,除了一個介面,即 10.1.0.254。(我不確定我做了什麼來解決這個問題!)

所涉及的所有子網都由許多作為 VLAN 的第 3 層交換機託管。Linux 路由器上沒有響應的介面是我們核心交換機上唯一具有路由介面的 VLAN。

tcpdump儘管 10.1.1.1 被配置為使用 10.1.1.254(Linux 路由器上的 eth1),但當我嘗試訪問此介面時,eth1 上沒有顯示任何 ICMP 回顯跡象。

是否是從交換機廣播的路由協議導致 10.1.1.1 上的 PC 無法通過 10.1.1.254 路由?

編輯 2

在處理其他事情的同時,我現在又回到了這個(沒有更改 Linux 路由器上的任何內容)並且它再次停止工作。

編輯 3

iptables 配置

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

根據您的描述,它應該可以工作。如果您可以在同一網路上 ping 網關的介面,但無法 ping 任何其他介面,那就太奇怪了。TCP/IP 堆棧應正確響應對介面 A 的 ping,即使通過介面 B 接收也是如此。

當您 ping 網關的本地地址時(儘管在不同的網路上),不涉及數據包轉發。我看到三個可能的原因:

1)網關實際上沒有收到數據包(客戶端上的路由/過濾問題)。

  1. 網關沒有將回復發送到正確的地方。

3)網關選擇不回复(某種防火牆。我會仔細檢查,以確保不是這種情況)。

我會使用 tcpdump 或 wireshark 來確定線路上發生了什麼。您應該看到 ping 請求離開客戶端。然後在網關的界面上,您應該會看到它們到達。然後我會監聽所有介面,看看是否有任何回復發送到任何地方。如果你看到一個 ping 請求進來,那麼客戶端的路由就可以了。如果您沒有看到任何介面發出 ping 回复,則可能是防火牆或網關上的路由表發生了一些奇怪的事情。最後,如果網關通過正確的介面發送回复並且沒有在客戶端上註冊,這都是客戶端的錯。

我會嘗試其他網路上的設備(例如 10.1.3.0/24),最好直接連接到伺服器的 NIC,以確保沒有任何東西干擾通信。這可能只是一個錯字,如果你知道你應該看到什麼,那很難看出來。配置另一台設備(或重新配置您用於第一次測試的 PC)可以降低您再次輸入錯誤的可能性。

最後一個問題——它有沒有用過,還是一個新的盒子設置並插入網路?

編輯:

只要您沒有在 Linux 機器上啟用任何路由守護程序,它就會忽略來自交換機的路由器流量。

你觀察到的東西強烈表明了一些外部影響(交換機、防火牆、外星人或被鎖定在 NOC 中的實習生;))。嘗試使用兩個直接連接到 Linux 機器的客戶端來測試設置,如下所示:

          +-------------+
client1 ---+ ethX   ethY +--- client2
          +-------------+
             Linux box

在此設置中,在 Linux 機器上測試所有介面之間的路由。否則,您將同時在多個戰線上進行戰鬥,這會降低成功排除故障的機會。一旦您知道 Linux 機器可以工作(或不能工作),就該尋找觀察到的干擾的原因了。

如果你有智能交換機連接到你的 Linux 機器的所有介面,你可以在直接連接到 Linux 機器的埠上定義一個 IP 地址,並嘗試在機器和路由器之間 ping。我是一個多疑的偏執狂,我會把自己的筆記型電腦和一些已知的優質跳線一起帶到盒子裡,看看發生了什麼。

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