如何使用兩個不同的介面 ping 到外部 IP?
我已經瀏覽了該站點上有關多介面 ping 的一些範例,但似乎沒有一種方法對我有用。
我有兩個介面
- eth0 (192.168.0.x)
- wlan0 (192.168.1.2)
eth0 從 dhcp 伺服器獲取其 IP。
wlan0 有靜態 IP。
當我執行命令時
ping -I eth0 www.google.com
我得到的結果似乎來自 eth0(ipv6 的東西)。
當我執行命令時
ping -I wlan0 www.google.com
我得到以下輸出。
connect: Network is unreachable
如果我拔掉我的 eth0,然後我再次執行命令,我會得到想要的結果。
如何通過選擇介面 ping 外部伺服器?這幾乎就像一個占主導地位,如果一個存在,另一個被忽視。
問題是路由是如何工作的。
如果您有多個介面,則可以為每個介面配置一個網關。我不能確定你的特定係統上的路由表是如何被填滿的,但我懷疑你的系統給第一個出現的預設路由提供了最高優先級,然後是第二個出現的預設路由,依此類推。只有最佳預設路由處於活動狀態。如果你把相應的介面放下,它的預設路由也消失了,所以如果還有其他的預設路由,它就會接管。該優先級稱為“度量”。
當您 ping 時,您的系統會創建一個帶有某個源地址的數據包。它可以自己選擇一些地址(來自本地網路路由的“src”屬性),但是您可以使用 -I 開關指定要使用的地址或本地網路路由從中獲取該地址的介面。這就是這個開關所做的;in 只設置源地址。它不選擇路由,也不影響使用哪個介面。
發生了什麼:您將具有“第二”介面源地址的數據包從“第一”介面發送到“第一”網關。很可能它被丟棄在網關上,它不知道如何到達該源地址(何時回复,它應該回复誰?),或者不希望它以這種方式出現。
該怎麼辦?您應該根據源地址設置路由。這是高級話題。在 Linux 中,你設置了多個路由表,每個路由表都有不同的預設路由,並指示系統根據數據包源地址選擇使用哪個路由表。這稱為多宿主。
在您的情況下,在 Linux 中基本的多宿主設置將是:
ip route add default via 192.168.0.GW0 table 1 ip route add default via 192.168.1.GW1 table 2 ip rule add from 192.168.0.x lookup 1 ip rule add from 192.168.1.2 lookup 2
前兩個分別是預設路由。gateways,第三個和第四個是哪個表用於哪個地址。當然,您最好將具體的實際值放入佔位符中。DHCP?乙太忘記多宿主,或者編寫一個腳本,在接收地址時動態設置所有內容,並在地址失去時刪除(通常路由將自動刪除,應始終手動刪除規則)。開機自動配置?您的分發手冊可以指導您進入正確的方式,準備好斷開網路並知道如何將其恢復到干淨狀態。