我想使用 dnsmasq 在 Linux 桥上提供 DHCP 服务:
- 预计只有一个虚拟机可以连接到网桥
- VM 的 MAC 已修复
- VM 应通过 DHCP 获取静态 IP
- 网桥本身不应该从子网获取任何 IP(但可以使用虚拟 IP,如 169.254.xx/16)
以下是我正在使用的配置:
port=0
bind-interfaces
interface=br0
dhcp-range=10.0.0.2,static,255.255.0.0
dhcp-host=52:54:00:d1:82:c4,10.0.0.2,infinite
问题是,在我看来,我必须为网桥指定一个子网内的 IP(如 10.0.0.1/16)才能使整个系统正常工作。如果我不在网桥上指定任何 IP,或者只指定一个虚拟 IP(如 169.254.xx/16),我的虚拟机将不会从 DHCP 获取任何 IP。
那么是否有任何 dnsmasq 选项/标志可让我利用来实现这一点?非常感谢!
答案1
DHCP 确实需要客户端和服务器之间的本地子网通信。
初始 DISCOVER、OFFER、REQUEST 和 ACK 是在 0.0.0.0 和 255.255.255.255 之间进行的,但服务器确实从其自己的 IP 进行响应。但是,任何续订都直接单播到服务器 IP。
因此,您想要做的事情有点超出规格,但是通过增加一层 DHCP 中继也许可以实现。
答案2
在深入研究了 dnsmasq 的源代码后,我发现共享网络功能似乎对我有用。添加的shared-network=...
行确实起了作用,尽管我不能 100% 确定这是正确/安全的方法。
port=0
bind-interfaces
interface=br0
shared-network=br0,10.0.0.101
dhcp-range=10.0.0.101,static,255.255.0.0
dhcp-host=52:54:00:d1:82:c4,10.0.0.101,infinite