CentOS 7 没有从 DHCP 设置我的网关

Dan*_*sta 8 dhcp centos dhclient centos7

我有一个 CentOS 7 的最小安装。

我已禁用网络管理器,因为我想以“老派”方式设置我的网络。

systemctl stop NetworkManager 
systemctl disable NetworkManager
chkconfig network on
service network restart
Run Code Online (Sandbox Code Playgroud)

我的网络配置 (/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"
Run Code Online (Sandbox Code Playgroud)

我的 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;
}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是来自 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
Run Code Online (Sandbox Code Playgroud)

然后一切正常:

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
Run Code Online (Sandbox Code Playgroud)

我测试过的所有其他 linux 发行版,包括 Centos 6,都可以正常工作并从 DHCP 自动设置这 2 个路由。

所以我的问题是这样的;为什么它不会在 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 没有添加任何默认路由。

Dan*_*sta 4

确保 DHCP 服务器响应 ping。否则,/sbin/dhclient-script 将无法正确设置默认路由。

这个额外的“检查”似乎已添加到更高版本的 dhclient 中或在 CentOS 7 中专门添加。7 之前的 CentOS 版本中不存在 ping 检查。