我可以在啟動介面時阻止添加預設路由嗎?
我有一個帶有兩個 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