2014-11-24 106 views
0

我的Linux(Debian)服務器具有eth0和eth1,並且兩者在同一個子網上。 它從兩個接口接收數據包,但它只從eth0進行回覆。 發送到eth1的包從eth0回覆,並且回覆包含eth0的src mac和eth1的src IP。 我通過在Linux服務器上運行tcpdump時向eth1發送ping來驗證此情況。Linux從一個接口的源IP發送數據包,但發送另一個接口的源MAC

這是一個問題,因爲: 由於沒有數據包與eth1的源mac(除了初始arp)一起發送,交換機會忘記eth1 mac。然後,交換機接收到eth1目標mac的每個數據包爲broadcasted across the network, flooding it,這讓我們感到悲傷。

我想: 我的Linux服務器從eth0和eth1發出數據包。我認爲最好的解決方案是我們獲得每個數據包,我們從相同的接口回覆。另一種解決方法是我想將每個接口綁定到它的IP和MAC,這樣它就只會發送來自這些地址的數據包。

更多詳細信息: 我的Linux服務器是一個ISCSI目標,與一個作爲ISCSI啓動器的ESX進行通信 - 儘管是一個Cisco交換機。 5分鐘後交換機會忘記MAC,並且ESX可能會記住它們20分鐘(如討論的herehere)。因此,當ESX記住Linux的mac時,ESX不斷髮送網絡泛洪的ISCSI請求,而我的服務器只通過其中一個接口發送ISCSI響應。

+0

您是否研究過綁定接口? (或者,如果您不關心吞吐量,將兩個ips分配給一個接口) – 2014-11-24 18:27:36

+0

@thatotherguy,我希望我的客戶能夠選擇eth0和eth1是否在同一個子網上。而且,我寫的解決方案(如果存在的話)將允許我們其餘的代碼保持原樣,這很好。 Still- [bonding](https://www.corelan.be/index.php/2007/08/21/bind-network-interfaces-on-linux-for-redundancy-load-balancing-and-performance/)是一個很好的方向,謝謝 – Hibuki 2014-11-26 14:49:55

回答

0

這不是你問什麼,但如果你只是設置上做了

ping -c 1 -I eth1 <address of eth1's default gateway> 

每分鐘框中cron作業,那麼你就必須離開eth1的每分鐘至少一個包eth1的MAC地址就在它上面。 -I告訴ping綁定到特定的接口,所以即使這是首選路由,也不會使用eth0。

+0

謝謝,作爲解決方法,我做了類似的事情:我[發送arp](http://serverfault.com/questions/175803/how-to-broadcast-arp-更新到所有鄰居在Linux中)每分鐘通過cron。 – Hibuki 2014-12-20 14:53:58

相關問題