ifconfig 未报告 DHCP 分配的地址

ifconfig 未报告 DHCP 分配的地址

我正在更新设备的内核,并遇到了 DHCP 工作方式的变化。在启动脚本的末尾,我检查是否已经有 DHCP 分配的地址,如果没有,我会自行分配:

ifconfig eth0 169.254.1.1 up

然后,当 DHCP 最终为我获取一个地址时,它会将其分配给 eth0。事实上,这似乎确实发生了:如果我能找出设备的地址,我就可以通过 DHCP 分配的地址与其通信。

但是,ifconfig 继续显示 169.254.1.1 地址。

这是我在 dhcpcd 5.2.12 和 linux 3.2.9 中看到的新行为。

在没有 DHCP 服务器的情况下,我该如何自行分配地址,让 DHCP 在出现时覆盖该分配,随后,我如何找出 DHCP 分配的地址?

root@appliance:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:22:4D:4F:B3:69  
          inet addr:169.254.1.1  Bcast:169.254.255.255  Mask:255.255.0.0
          inet6 addr: fe80::222:4dff:fe4f:b369/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2686 errors:0 dropped:1 overruns:0 frame:0
          TX packets:589 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:403995 (394.5 Kb)  TX bytes:73691 (71.9 Kb)
          Interrupt:20 Memory:fa200000-fa220000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:985 (985.0 b)  TX bytes:985 (985.0 b)

root@appliance:~# grep dhcp /var/log/messages
Jul 18 16:03:55 (none) dhcpcd[2330]: version 5.2.12 starting
Jul 18 16:03:56 (none) dhcpcd[2330]: eth0: waiting for carrier
Jul 18 16:03:57 (none) dhcpcd[2330]: eth0: carrier acquired
Jul 18 16:03:57 (none) dhcpcd[2330]: eth0: broadcasting for a lease
Jul 18 16:03:57 (none) dhcpcd[2330]: eth0: offered 10.10.0.177 from 10.10.0.1
Jul 18 16:03:57 (none) dhcpcd[2330]: eth0: acknowledged 10.10.0.177 from 10.10.0.1
Jul 18 16:03:57 (none) dhcpcd[2330]: eth0: checking for 10.10.0.177
Jul 18 16:04:02 (none) dhcpcd[2330]: eth0: leased 10.10.0.177 for 86400 seconds
Jul 18 16:04:02 (none) dhcpcd[2330]: forked to background, child pid 2868

答案1

RFC3927 的整个想法是地址应该是无状态的。因此,DHCP 客户端应该随机生成地址的最后两个八位字节,然后通过 ARP 验证该地址是否唯一。静态设置一个值(即 169.254.1.1)违背了这一目的。让 dhcpcd(或您正在使用的任何客户端)完成它的工作,它可能会解决您的问题。

答案2

我找到了一个不错的解决方法。我没有设置 eth0 以使其具有固定 IP 地址,而是创建了一个虚拟网络接口作为后备。因此:

ifconfig eth0:0 169.254.1.1 up

如果没有 DHCP 服务器,我可以使用 169.254 地址与设备通信,如果有 DHCP 服务器,则会将其分配给 eth0,我可以使用 ifconfig 看到它!

相关内容