2012年2月13日星期一

DHCP的问题

打开Windows下的CentOS虚拟机,ifup得不到DHCP地址了。CentOS是在VirtualBox里面用Bridge模式连网的,这种情况下虚拟机会和宿主机从同一个DHCPD(办公室路由器)获得地址。

DHCP超时失败前,屏幕上出现了ping几个地址失败的消息。在/etc目录下用grep没有找到这个地址,很奇怪。/etc/resolv.conf里面有两行nameserver,我把这两行删除后DHCP就成功了。

后来在/var/lib/dhclient/dhclient-eth1.leases里面找到了ping过的几个地址。这个文件里面有几个租约历史,有的还未过期。原来dhclient.conf(5)里面有解释:
The DHCP client may decide after some period of time (see PROTOCOL TIMING) that it is not going to succeed in contacting a server. At that time, it consults its own database of old leases and tests each one that has not yet timed out by pinging the listed router for that lease to see if that lease could work.
原来如果DHCP失败,dhclient会尝试曾经租约过但是还未过期的地址。不过只有在DHCP失败的情况下才会尝试,这也就是为什么是在出现ping的消息后ifup命令也马上回到了命令提示符。

本来我以为是resolv.conf中过期的内容导致DHCP失败,但后来却未能复现这样的判定,resolv.conf中加入错误的信息后DHCP还是可以成功的。那么,目前能得出的最可信的结论,就是办公室的无线路由器,或者Windows电脑正好出问题了,让CentOS虚拟机没能获得地址。在写这篇文章之前,我电脑就一度连不上网,这或许可以提高前面推测的可信性。

在此记录这个小小的“灵异事件”,以供日后参考。

没有评论:

发表评论