dhclient不设置默认网关

我正在Azure云中运行一些Ubuntu 16.04虚拟机。 每当我重新启动虚拟机,我必须手动设置默认网关。

网关应该由dhclient设置。 我激活了debugging,并得到这个:

root @ backend01:/etc/dhcp/dhclient-exit-hooks.d# cat /tmp/dhclient-script.debug

root@backend01:/etc/dhcp/dhclient-exit-hooks.d# cat /tmp/dhclient-script.debug Thu Jun 2 17:18:33 UTC 2016: entering /etc/dhcp/dhclient-enter-hooks.d, dumping variables. reason='PREINIT' interface='eth0' -------------------------- Thu Jun 2 17:18:33 UTC 2016: entering /etc/dhcp/dhclient-enter-hooks.d, dumping variables. reason='REBOOT' interface='eth0' new_ip_address='10.10.0.13' new_network_number='10.10.0.0' new_subnet_mask='255.255.0.0' new_broadcast_address='10.10.255.255' new_routers='10.10.0.1' new_rfc3442_classless_static_routes='0 10 10 0 1 32 168 63 129 16 10 10 0 1' new_domain_name='azure-prod' new_domain_search='azure-prod.' new_domain_name_servers='10.11.0.250 10.11.0.251' 

所以路由器选项设置正确。 即使租约文件显示正确的值:

 lease { interface "eth0"; fixed-address 10.10.0.13; server-name "RD7CFE90879C98"; option subnet-mask 255.255.0.0; option dhcp-lease-time 4294967295; option routers 10.10.0.1; option dhcp-message-type 5; option dhcp-server-identifier 168.63.129.16; option domain-name-servers 10.11.0.250,10.11.0.251; option domain-search "azure-prod."; option dhcp-renewal-time 4294967295; option rfc3442-classless-static-routes 0,10,10,0,1,32,168,63,129,16,10,10,0,1; option unknown-245 a8:3f:81:10; option dhcp-rebinding-time 4294967295; option domain-name "azure-prod"; renew 0 2152/07/09 23:41:47; rebind 0 2152/07/09 23:41:47; expire 0 2152/07/09 23:41:47; } 

这是我的/etc/dhcp/dhclient.conf的样子:

 option rfc3442-classless-static-routes code 121 = array of unsigned integer 8; send host-name = gethostname(); request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes, ntp-servers; timeout 300; supersede domain-name "azure-prod"; supersede domain-search "azure-prod"; 

为什么不dhclient设置我的默认路由?

我发现了这个问题。 由于Azure DHCP设置了rfc3442-classless-static-routes选项,因此路由器选项被dhclient脚本忽略。

rfc3442被/etc/dhcp/dhclient-exit-hooks.d/rfc3442-classless-routes的退出钩子脚本处理

我的问题是,我有另一个自定义的退出钩子,它在最后做了一个exit 0 ,因此结束了dhclient脚本的执行,作为回报,永远不会执行rfc3442-classless-routes退出钩子。

这埋葬了很深,花了我几乎一天的工作。 所以我希望这样可以防止某人在将来遇到同样的问题。