CentOS 7不是从DHCP设置我的网关

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

我已经禁用networkingpipe理器,因为我想将我的networking设置为“老派”方式。

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

我的networkingconfiguration(/ 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,networking掩码和主机名设置正确,但我的默认路由没有被设置(空白)。

正如你所看到的,我正在使用networking掩码255.255.255.255,所以网关IP是“我的networking之外”。 因此需要额外的路线。 如果我手动运行这些:

 route add -host 144.76.190.224 dev ens4 route add defualt 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 

我testing过的所有其他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脚本以创build默认网关的主机路由,这允许客户端在”专属“networking环境中工作,其中运营商不希望客户端直接相互串扰“。

所以这个应该早就有效了 也许CentOS 7已经从“dhclient-script”中删除了它?

更新2:

我将CentOS 6安装文件“/ sbin / dhclient-script”复制到CentOS 7服务器。 现在一切正常。 我会调查他们做了哪些改变,但似乎他们在CentOS 7中引入了一个bug。

更新3:

我想出了这个问题。 他们在新版本的/ sbin / dhclient-script中添加了一个(愚蠢的)ping检查,在添加之前尝试ping网关。 由于我在DHCP服务器的防火墙中阻止ping,因此没有回应,因此dhclient脚本没有添加任何默认路由。

确保DHCP服务器响应ping。 否则,/ sbin / dhclient脚本将不会正确设置默认路由。

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

也许你已经在/etc/sysconfig/network/routes设置了一个默认网关了?

如果没有,你至less可以configuration你手动路由的内容是在该文件中自动完成的:

 144.76.190.224 - 255.255.255.255 ens4 default 144.76.190.224 - ens4