在从我的脚本启动虚拟机之前,我需要弄清楚它将获得哪个 IP 地址。
所以我做了:
dhclient <interface>
这是有效的,因为dhclient
使用指定接口的 MAC 地址macvtap
,并从 DHCP 服务器返回 IP 地址。
这不是一个万无一失的解决方案,因为可能有些人家里有路由器,但它并不总是为相同的 MAC 返回相同的 IP。但我拥有的每一个路由器都是如此,所以如果它适用于 99% 的情况,那对我来说就足够了。
但问题是,它dhclient
也会更改本地配置,因为它认为我想在主机上实际使用该地址。有一个-n
标志可以防止这种情况,但 Debian 或大多数其他发行版不支持它。
那么,仅询问 DHCP 服务器计划为某个 MAC 地址提供哪个 IP,而不实际修改主机上的任何设置的最佳方法是什么?
答案1
dhcp
不直接更改本地配置,它在获得租约后调用脚本(/sbin/dhclient-script
Debian 中默认)。
您可以指定自己的脚本-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 客户端进程(dhclient
、NetworkManager
、 ...)交互,因为在这种情况下,结果可能会有所不同。
答案2
您不能询问 DHCP 服务器将要颁发什么 IP 地址,然后依赖该地址继续前进。至少,除非服务器可以更新其配置数据库,以便它“记住”它给您的地址。
要么它向您颁发了地址,在这种情况下它必须记录事实,要么它没有向您颁发地址,并且可供其他设备声明。