Linux

兩個網卡 - 兩個路由表?

  • September 16, 2013

我的設置中有零星的路由問題,我懷疑這是路由和兩個網路介面的問題。

  • 我正在使用 XenServer 執行兩台機器
  • 他們都有一個公共 NIC,有一個自己的 IP 用於網際網路流量
  • 它們都有一個私有 NIC,帶有用於本地流量的交叉電纜

虛擬機都有兩個(虛擬)網卡,eth0 有自己的公共 IP,eth1 用於本地流量。

有時我可以從外部訪問伺服器,但它們無法在本地相互 ping/訪問。

配置:

         Public IP               local IP
xh01      aa.bb.10.214            192.168.1.1
xh02      aa.bb.10.215            192.168.1.2
lb01      aa.bb.10.242            192.168.1.3
lb02      aa.bb.10.241            192.168.1.4
be01      aa.bb.10.239            192.168.1.5
be02      aa.bb.10.240            192.168.1.6

lb01 上的範例路線:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         aa.bb.10.215    0.0.0.0         UG    100    0        0 eth0
aa.bb.10.192    aa.bb.10.193    255.255.255.192 UG    0      0        0 eth0
aa.bb.10.193    0.0.0.0         255.255.255.255 UH    0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

現在,例如,有時我無法從 be01 ping lb01。

在 lb01 上使用 ’tcpdump’ 我可以看到 ICMP 回應要求到達 lb01 但我看不到答案。此外,如果我在其中一台主機上向另一台主機發出跟踪路徑,ping 會突然得到回复。

我的懷疑是,由於機器可以通過兩個介面相互訪問,因此連接的傳出流量不會路由到與傳入相同的介面。我想這意味著我必須設置不同的路由表?

對整個路由有更深入了解的人可以給我一些關於如何解決這個問題的提示嗎?

從您發布的主機上的路由表中看不到路由問題。但是,我注意到您正在使用一些非常尷尬的行為,即您設置了兩個網關,這些網關位於您沒有地址的子網中,其中一個您沒有本地路由,這讓我想知道您是否遇到了一些未定義的行為。我很想在 ping 不通過時查看主機上 ARP 表的內容。

我想我明白你在這裡想要做什麼——這種事情是非標準的。試圖強制流量通過一個網路上的網關似乎有點沒有目的,但只對直接連接在其他子網上的主機這樣做,但如果您想通過路由器發送流量,正確的解決方案是提供一個/30 子網為每個主機。

否則,網關可能正在執行某種狀態處理(例如 m_conntrack,如果它正在執行 linux)並且嚴重未配置,或者您可能會失去數據包。或者,Xen 伺服器可能需要時間來確定數據包的去向,尤其是當您使用具有許多令人驚訝的狀態行為的 openvswitch 時。可能還需要在接收入站流量之前發送一些出站流量,但這並不常見。

如果路由表看起來確實如此,那麼到您的非 RFC1918 網路的流量肯定不會通過 eth1 傳輸。沒有路線可以做到這一點。此外,請記住,每台主機都有一個路由表,其中路由與介面相關聯。任何需要路由的數據包(基本上是出站數據包)都會遍歷同一個表並遵循相同的規則,匹配最具體的路由,使用度量來打破關係。

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