Networking

我可以在啟動介面時阻止添加預設路由嗎?

  • August 26, 2021

我有一個帶有兩個 NIC 的系統。這台機器和一些附帶的設備將被移動並連接到不同的 LAN,或者有時它會使用撥號。

   eth0:
   - 10.x.x.x address space
   - no internet gateway
   - only a few devices

eth1 (when used):
- 172.16.x.x or 192.168.x.x or other address spaces
- access to the gateway from LAN to internet

ppp0 (when used):
- internet access through dialup using KPPP

我正在使用 ifconfig 來啟動或關閉介面(除了由 KPPP 處理的 ppp0 之外)。

如果我首先啟動 eth1,它會從其 DHCP 獲取地址並獲取網關,然後將其添加到路由中,因此訪問 LAN 和 Internet 不會有任何問題。

如果我首先或第二次啟動 eth0,它會獲取其地址並將預設網關設置為在其地址空間內(在 10.xxx 範圍內)。如果我先調出 eth0,然後再調出 eth1,預設網關仍保持在 10.xxx 範圍內。

所以無論我做什麼,eth0 都會覆蓋 eth1 並在路由中“聲明”網關。

有什麼方法可以防止 eth0 聲明網關,或者確保 eth1(如果第二個)使用它的網關?或者我可以以某種方式優先考慮應該使用哪個介面的網關的排名?

我基本上想確保 eth1 的預設地址空間網關是否處於活動狀態,如果沒有,則使用 ppp0 的預設網關。我希望能夠防止 eth0 擁有預設網關。

我在 Raspbian 上遇到了類似的問題(我想下面的解決方案也適用於 Debian)。Raspberry Pi 3 集成了 2 個 NIC:Wi-Fi 和乙太網。我同時使用它們,它們分別是 wlan0 和 eth0。wlan0 連接到我家的 Wi-Fi 網路,並且通過此介面訪問網際網路。它通過我家路由器的 DHCP 獲取其設置。eth0 直接連接到我的 Windows PC 並分配了靜態IP。由於我沒有在我的 Windows PC 上配置它,因此無法通過 eth0 訪問網際網路。

在 Raspbian 中,dhcpcd 守護程序負責配置網路介面。為了將靜態 IP 設置為 eth0 介面,在末尾添加了以下幾行/etc/dhcpcd.conf

interface eth0

static ip_address=192.168.2.2/24
static routers=192.168.2.1
static domain_name_servers=192.168.2.1

使用此設置,dhcpcd 創建了 2 個預設路由,並且通過 eth0 的路由比通過 wlan0 的路由具有更高的優先級:

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.2.1     0.0.0.0         UG    202    0        0 eth0
default         192.168.1.254   0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     *               255.255.255.0   U     303    0        0 wlan0
192.168.2.0     *               255.255.255.0   U     202    0        0 eth0

所以我無法訪問網際網路,因為系統試圖通過 eth0 路由它並且它沒有網際網路訪問權限,正如我上面提到的。

為了解決這個問題,我在for eth0 界面中使用nogateway了選項。/etc/dhcpcd.conf所以 eth0 特定的配置開始看起來像這樣:

interface eth0

static ip_address=192.168.2.2/24
static routers=192.168.2.1
static domain_name_servers=192.168.2.1
nogateway

保存此配置並重新啟動後,沒有通過 eth0 的預設路由:

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.254   0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     *               255.255.255.0   U     303    0        0 wlan0
192.168.2.0     *               255.255.255.0   U     202    0        0 eth0

上網出現了,問題就解決了。

在 RHEL6/Fedora 22 上測試了以下內容。

在 /etc/sysconfig/network-scripts/ifcfg-eth1 添加以下行:

DEFROUTE=no

將 eth1 替換為不需要預設路由的介面名稱。

這也可以通過網路管理器 GUI 完成,方法是選中 IPv4 選項卡底部的“僅將此連接用於其網路上的資源”框。

DEFROUTE=no 防止在啟用介面時將預設路由(目標 0.0.0.0)添加到路由表。IE。不會添加以下條目。

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         172.16.x.x      0.0.0.0         UG        0 0          0 eth1

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