如何“预测”DHCP IP 地址?

如何“预测”DHCP IP 地址?

在从我的脚本启动虚拟机之前,我需要弄清楚它将获得哪个 IP 地址。

所以我做了:

dhclient <interface>

这是有效的,因为dhclient使用指定接口的 MAC 地址macvtap,并从 DHCP 服务器返回 IP 地址。

这不是一个万无一失的解决方案,因为可能有些人家里有路由器,但它并不总是为相同的 MAC 返回相同的 IP。但我拥有的每一个路由器都是如此,所以如果它适用于 99% 的情况,那对我来说就足够了。

但问题是,它dhclient也会更改本地配置,因为它认为我想在主机上实际使用该地址。有一个-n标志可以防止这种情况,但 Debian 或大多数其他发行版不支持它。

那么,仅询问 DHCP 服务器计划为某个 MAC 地址提供哪个 IP,而不实际修改主机上的任何设置的最佳方法是什么?

答案1

dhcp不直接更改本地配置,它在获得租约后调用脚本(/sbin/dhclient-scriptDebian 中默认)。

您可以指定自己的脚本-sf并使用$new_ip_address来查找租用的 IP。有一个专用联机帮助页对于这种类型的脚本。

dhcp一旦获得租约,它将继续运行,因此您需要停止它。默认情况下,pid 存储在中,/var/run/dhclient.pid但您可以使用 更改它-pf

一个示例脚本:

#!/bin/sh

case $reason in
BOUND|RENEW|REBIND|REBOOT)
    echo "MY IP IS " $new_ip_address
    kill $(cat /var/run/dhclient.pid)
    ;;
*)
    ;;
esac

然后,如果你运行:

dhclient -sf /path/to/your_script -d  interface 2>&1 | grep "MY IP"

你会得到价值。

请务必避免与其他 DHCP 客户端进程(dhclientNetworkManager、 ...)交互,因为在这种情况下,结果可能会有所不同。

答案2

您不能询问 DHCP 服务器将要颁发什么 IP 地址,然后依赖该地址继续前进。至少,除非服务器可以更新其配置数据库,以便它“记住”它给您的地址。

要么它向您颁发了地址,在这种情况下它必须记录事实,要么它没有向您颁发地址,并且可供其他设备声明。

相关内容