Mac OS 上的 dnsmasq DHCP 服务器 - 无法正常工作

Mac OS 上的 dnsmasq DHCP 服务器 - 无法正常工作

我正在尝试在 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(注意:dnsmasqrequires sudo) 时,我看到:

dnsmasq           error  512 root /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

此外,似乎没有dnsmasq任何地方有任何日志,所以在我尝试手动运行之前我无法看到问题所在dnsmasq

sudo dnsmasq --no-daemon --log-queries

只有到那时我才能真正收到一些指出问题的信息。

所以,总结一下,我之所以感到困惑,主要是因为以下两个因素:

  • 误导性homebrew信息
  • 取决于虚拟机当前是否正在运行

相关内容