Centos

CentOS 7 沒有從 DHCP 設置我的網關

  • October 29, 2019

我有一個 CentOS 7 的最小安裝。

我已禁用網路管理器,因為我想以“老派”方式設置我的網路。

systemctl stop NetworkManager 
systemctl disable NetworkManager
chkconfig network on
service network restart

我的網路配置(/etc/sysconfig/network-scripts/ifcfg-ens4)如下所示:

DEVICE="ens4"
TYPE="Ethernet"
NOZEROCONF="yes"
PERSISTENT_DHCLIENT="1"
BOOTPROTO="dhcp"
DEFROUTE="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
NAME="ens4"
ONBOOT="yes"
NM_CONTROLLED="no"

我的 DHCP 租約文件如下所示:

lease {
 interface "ens4";
 fixed-address 144.76.190.238;
 option subnet-mask 255.255.255.255;
 option routers 144.76.190.224;
 option dhcp-lease-time 86400;
 option dhcp-message-type 5;
 option domain-name-servers 8.8.8.8,8.8.4.4;
 option dhcp-server-identifier 144.76.190.224;
 option host-name "hello.example.com";
 option domain-name "example.com";
 renew 2 2014/10/21 05:44:47;
 rebind 2 2014/10/21 15:04:03;
 expire 2 2014/10/21 18:04:03;
}

現在,我的問題是 DHCP 中的“路由器”欄位似乎被 CentOS 7 忽略了。IP、網路遮罩和主機名設置正確,但我的預設路由沒有設置(空白)。

如您所見,我使用的是網路遮罩 255.255.255.255,因此網關 IP 在我的網路“外部”。因此需要額外的路線。如果我手動執行這些:

route add -host 144.76.190.224 dev ens4
route add default gw 144.76.190.224

然後一切正常:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         144.76.190.224  0.0.0.0         UG    0      0        0 ens4
144.76.190.224  0.0.0.0         255.255.255.255 UH    0      0        0 ens4

我測試過的所有其他 linux 發行版,包括 Centos 6,都可以正常工作並從 DHCP 自動設置這兩個路由。

所以我的問題是這樣的;為什麼它沒有在 CentOS 7 中自動設置?是否發生了一些變化,我必須向 DHCP 客戶端添加一些額外的標誌才能使其工作?

似乎 CentOS 6 使用 dhclient 版本 4.1.1-P1 而 CentOS 7 使用 4.2.5。也許他們在這些版本之間改變了一些東西?

更新 1:

我查看了 dhclient 的發行說明,發現它適用於 4.0.0:

“如果為 IPv4 地址提供的子網遮罩是 /32,則更新 dhclient 腳本以創建預設網關的主機路由。這允許客戶端在運營商不想要客戶端的“俘虜”網路環境中工作直接串音。”

所以這應該從很久以前就開始工作了。也許 CentOS 7 已將其從“dhclient-script”中刪除?

更新 2:

我將文件“/sbin/dhclient-script”從 CentOS 6 安裝複製到 CentOS 7 伺服器。現在一切正常。我將調查他們做了哪些更改,但似乎他們在 CentOS 7 中引入了一個錯誤。

更新 3:

我弄清楚了這個問題。他們在新版本的 /sbin/dhclient-script 中添加了一個(愚蠢的)ping 檢查,它會在添加網關之前嘗試 ping 網關。由於我在 DHCP 伺服器上的防火牆中阻止 ping,它沒有響應,因此 dhclient-script 沒有添加任何預設路由。

確保 DHCP 伺服器響應 ping。否則,/sbin/dhclient-script 將無法正確設置預設路由。

這個額外的“檢查”似乎已被添加到更高版本的 dhclient 或特別添加在 CentOS 7 中。在 CentOS 7 之前的版本中不存在 ping-check。

也許您已經設置了預設網關/etc/sysconfig/network/routes

如果沒有,您至少可以配置您手動路由的內容在該文件中自動完成:

144.76.190.224 - 255.255.255.255 ens4
default 144.76.190.224 - ens4

引用自:https://serverfault.com/questions/638542