Ubuntu

當主要網路介面關閉時,使用另一個網路介面的網際網路訪問

  • December 17, 2020

我有一個執行 Ubuntu 18.04 LTS 的嵌入式系統,它有一個 3G 調製解調器和一個乙太網介面 (eth0)。

這兩個介面都可以訪問 Internet。

當乙太網介面無法上網時(拔掉電纜),我想將預設網關自動設置為 3G 調製解調器之一,以便系統始終可以訪問網際網路。

現在,出於測試目的和簡單起見,我將 3G 調製解調器替換為另一個乙太網介面(連接到另一個網路的 USB 乙太網適配器 - 介面 enxd037458b96e3),我注意到當乙太網連接在 eth0 上失去時(它的電纜連接到 4 埠千兆路由器)預設網關消失,我無法訪問網際網路,而 USB 乙太網介面處於活動狀態(並且它的 IP 地址自動分配給 DHCP,就像 eth0 一樣)。

在這種情況下,這是 route 命令的輸出:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 uap0
192.168.137.0   0.0.0.0         255.255.255.0   U     0      0        0 enxd037458b96e3

而當 eth0 啟動或恢復時:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.30.102  0.0.0.0         UG    0      0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 uap0
192.168.30.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.137.0   0.0.0.0         255.255.255.0   U     0      0        0 enxd037458b96e3

下面,這個/etc/network/interfaces的內容

# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto  lo
iface lo inet loopback

iface eth0 inet dhcp
#   post-up route add default via [gateway-ip-address] dev eth0

# interface usb eth
allow-hotplug   enxd037458b96e3
iface enxd037458b96e3 inet dhcp

# auto  wlan0
allow-hotplug  wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

auto uap0 
# allow-hotplug uap0
iface uap0 inet static
     address   192.168.2.10
     netmask   255.255.255.0
     broadcast 192.168.2.255
     post-up    /etc/rc.apstart || true
#     post-up    /bin/uaputl.exe sys_cfg_80211d country DE || true
#     post-up    /bin/uaputl.exe sys_config /etc/uapTest.conf || true
#     post-up    /bin/uaputl.exe bss_start || true
     post-down  /bin/uaputl.exe bss_stop
     post-down  /bin/uaputl.exe sys_reset
#     post-up    /sbin/ifconfig uap0 192.168.0.2
   

 

更新:與 eth0 介面不同,當我從 USB 乙太網適配器上拔下電纜時,路由總是顯示最後一個的預設網關。使用 eth0 介面,預設網關會消失,只有在插入電纜後才會返回。

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.137.1   0.0.0.0         UG    0      0        0 enxd037458b96e3
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 uap0
192.168.30.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.137.0   0.0.0.0         255.255.255.0   U     0      0        0 enxd037458b96e3

類似於這個問題:https ://askubuntu.com/questions/948453/internet-connection-stops-after-one-interface-is-down-in-ubuntu-server我將使用 NetworkManager 來管理我的連接(3G 也是) .

但是,當度量值最低的介面無法訪問網際網路時,系統將無法再訪問網際網路,而存在度量值較高但連接到網際網路的介面(例如 3G 調製解調器),在這種情況下,我們確實需要手動增加未連接到網際網路的介面的指標。

我會看看我是否可以請求一個帶有內置介面綁定的新系統映像。

否則,可以編寫一個服務來監控具有最低度量的預設路由是否連接到網際網路並可以控制 NetworkManager。

引用自:https://unix.stackexchange.com/questions/624531