我有一臺帶有兩個網絡接口的PC:eth0和eth1。操作系統如何知道哪個網絡接口用於互聯網?
eth0 - 具有192.168.11.X/24的IP。
eth1 - 具有192.168.130.X/24的IP。 eth1具有互聯網連接。
當我嘗試連接到互聯網時,操作系統如何知道使用哪個接口?它是否遍歷所有默認網關?它有緩存每個接口提供什麼? Windows和Linux之間的行爲有什麼不同?
我有一臺帶有兩個網絡接口的PC:eth0和eth1。操作系統如何知道哪個網絡接口用於互聯網?
eth0 - 具有192.168.11.X/24的IP。
eth1 - 具有192.168.130.X/24的IP。 eth1具有互聯網連接。
當我嘗試連接到互聯網時,操作系統如何知道使用哪個接口?它是否遍歷所有默認網關?它有緩存每個接口提供什麼? Windows和Linux之間的行爲有什麼不同?
我要回答的房子Linux端(至少對於基於Debian的系統,如Ubuntu,因爲它更普遍的用戶在這一點上):
鍵入以下成命令行:
route -n
你應該可以看到你的「路由表」顯示,有類似以下內容:
Destination Gateway Genmask ... Iface
0.0.0.0 192.168.11.254 0.0.0.0 ... eth0
169.254.0.0 0.0.0.0 255.255.0.0 ... eth0
192.168.11.0 0.0.0.0 255.255.255.0 ... eth0
192.168.130.0 0.0.0.0 255.255.255.0 ... eth1
我省略了幾個欄,但基本上,行即在「目的地」下面的「0.0.0.0」是確定您的默認路線所在的線路。換句話說,所有的流量都不是針對其他行中的任何其他子網(google.com,facebook.com等)。
如果這是不對的(如在上表中,其中將對「eth1」是你想上網的卡),你應該改變默認路由:
sudo route del default
sudo route add default gw 192.168.130.254 netmask 255.255.255.0
這將修復它現在。要使其永久,編輯您的接口文件:
sudo gedit /etc/network/interfaces
編輯它看起來像以下(根據需要更改您的具體情況):
auto eth0
iface eth0 inet dhcp
up route del default
auto eth1
iface eth1 inet dhcp
up route add default gw 192.168.130.254 netmask 255.255.255.0
然後重新啓動網絡,看看是否能做到技巧:
sudo /etc/init.d/networking restart
您所要求的功能是路由表,即主機已知的目標列表。
當操作系統需要轉發數據包時,它會檢查此列表並選擇最合適的一個(從特定目標到一般目標)。例如:
192.0.2.0/28 - 192.0.2.1 via eth1
198.51.100.0/27 - 198.51.100.1 via eth0
0.0.0.0/0 - 203.0.113.1 via eth0
注意的最後一個目標:它會匹配任何IPv4地址。
但是,第一次打開PC並嘗試連接到互聯網會發生什麼?它不知道哪個eth提供訪問互聯網。它是否迭代接口,並在成功將信息放入路由表中?謝謝。 –
@UriH它期望來自用戶或路由協議的某種形式的配置。它不會隨機嘗試路由數據包。 – cnicutar
謝謝,我去檢查通過刪除默認路由並重新啓動eth1,然後我看到添加了默認路由,我假設由於DHCP請求包含路由器選項。 –