我在Azure云中运行了一些Ubuntu 16.04虚拟机.每当我重新启动VM时,我都必须手动设置默认网关.
网关应由dhclient设置.我激活了调试并得到了这个:
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,1,32,168,63,129,16,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-script会忽略路由器选项.
rfc3442由/etc/dhcp/dhclient-exit-hooks.d/rfc3442-classless-routes中的退出钩子脚本处理
我的问题是我有另一个自定义的exit-hook,它在结尾处执行了一个退出0,因此结束了dhclient-script的执行,而dhclient-script从来没有执行rfc3442-classless-routes exit-hook.
这被埋没了,花了我差不多一天的工作.所以我希望这将使某人在将来遇到同样的问题.