如何在 Ubuntu Linux 下設置網路介面親和性?
我有一個帶有 6 個網路介面的多宿主 linux 盒子,我用它來執行路由器硬體的一些測試。我希望能夠在任意程序上設置“NIC 親和性”(因為沒有更好的術語),這樣即使目標 IP 可能對應於本地介面,該程序的所有網路流量都將通過另一個程序路由出去介面(並由外部設備環回)。理想情況下,一個程序的關聯設置不會影響另一個程序。
作為一個範例案例,假設我有 eth0=192.168.0.1 和 eth1=10.0.0.1。以及連接到 eth0 和 eth1 的外部路由器,IP 分別為 192.168.0.2 和 10.0.0.2。如果我打開我的 shell 並 ping 10.0.0.1,沒有流量會通過外部連接,因為目標對應於本地機器,但如果我以某種方式將 shell 程序的親和性設置為 eth0,ICMP 流量將通過 eth0 流出,進入外部路由器,然後再回到 eth1。我要保證的是對外部路由器的遍歷,因為會有不止一個,所以我需要能夠綁定到任意 NIC。
這可能嗎?鑑於我到目前為止的搜尋,我沒有看到任何答案,但是沒有提到我正在嘗試做的事情讓我懷疑我錯過了一個重要的考慮因素,因為這看起來不像是一個原始問題(只是一個奇怪的問題)。
FWIW,這是一個 Ubuntu Linux 11.10 機器。任何指向類似工作或工具建議的指針將不勝感激。謝謝!
在這種情況下,您可能需要退後一步,以更一般的方式讓我們知道您要完成的工作,而不是如何實施特定的解決方案。
話雖如此,為了在 Linux 中設置綁定到特定介面的程序,您需要破解 bind 系統呼叫 (
man 2 bind
)。您可以通過使用替代庫並預載入它們來做到這一點,請參閱如何在超級使用者上為不同的程序使用不同的網路介面。
您可以將新的預設路由添加到新網路,然後刪除舊的網路關聯,如下所示。
sudo ip route replace default via 192.168.100.1 dev wlp2s0 proto static metric 50 sudo ip route delete default via 192.168.100.1 dev wlp2s0 proto static metric 600
這裡第二行是公制為 600 的舊路由,第一行是 50 的親和性,這是公制