我正在尝试在 Mac OS(Ventura)上设置 DHCP 服务器,dnsmasq
以便它可以为我正在运行的虚拟机提供 IP 地址。
我已将此行包含到我的/opt/homebrew/etc/dnsmasq.conf
:
dhcp-range=192.168.1.2,192.168.1.100,255.255.255.0,12h
并使用重新启动服务
sudo brew services restart dnsmasq
我还禁用了内置的 Mac OS DHCP 服务器,以便它不会干扰dnsmasq
:
sudo /bin/launchctl unload -w /System/Library/LaunchDaemons/bootps.plist
我正在使用 QEMU 运行 Linux VM,其网络配置如下:
-nic vmnet-shared,start-address=192.168.1.1,end-address=192.168.1.254,subnet-mask=255.255.255.0,mac=52:52:52:00:00:00
不幸的是,当我尝试从 VM 联系 DHCP 服务器时,它没有任何反应:
$ sudo dhclient -v
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/enp0s1/52:52:52:00:00:00
Sending on LPF/enp0s1/52:52:52:00:00:00
Sending on Socket/fallback
DHCPREQUEST for 192.168.1.4 on enp0s1 to 255.255.255.255 port 67 (xid=0x74f39476)
DHCPREQUEST for 192.168.1.4 on enp0s1 to 255.255.255.255 port 67 (xid=0x74f39476)
似乎 DHCP 端口(67)上没有任何内容在监听 -sudo lsof -i4UDP:67
列表中什么也没有。
如果我使用内置的 Mac OS DHCP 服务器,则一切正常。虚拟机正在获取 IP 地址,并且系统显示有东西正在监听 DHCP 端口:
$ sudo lsof -i4UDP:67
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
launchd 1 root 14u IPv4 0x6ff053dbd93d2625 0t0 UDP *:bootps
launchd 1 root 22u IPv4 0x6ff053dbd93d2625 0t0 UDP *:bootps
如何使其dnsmasq
作为 DHCP 服务器工作?
答案1
我找到原因了。
dnsmasq
绑定为 DHCP 和 DNS 服务器,我没有禁用 DNS 服务器(因为我计划稍后对其进行配置)。
当我运行虚拟机时,Mac OS 会启动自己的 DNS 来为虚拟机提供服务。如果我尝试dnsmasq
在此之后启动/重新启动,它将无法绑定 DNS 端口,并且无法启动。不幸的是,我没有注意到这一点,因为homebrew
对我撒谎关于服务状态dnsmasq
,表示:
==> Successfully started `dnsmasq` (label: homebrew.mxcl.dnsmasq)
这是错误的。当我查看sudo brew services list
(注意:dnsmasq
requires sudo
) 时,我看到:
dnsmasq error 512 root /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
此外,似乎没有dnsmasq
任何地方有任何日志,所以在我尝试手动运行之前我无法看到问题所在dnsmasq
:
sudo dnsmasq --no-daemon --log-queries
只有到那时我才能真正收到一些指出问题的信息。
所以,总结一下,我之所以感到困惑,主要是因为以下两个因素:
- 误导性
homebrew
信息 - 取决于虚拟机当前是否正在运行