使用 orbi RBR20 网状路由器作为 DHCP 服务器时帮助使用 dnsmasq pxeproxy

使用 orbi RBR20 网状路由器作为 DHCP 服务器时帮助使用 dnsmasq pxeproxy

我读过一些博客,其中管理员利用 DNSProxy 通过附加选项(例如 PXE)响应 DHCP 客户端,而无需在主 DHCP 服务器上进行任何配置。

在我的家庭网络上,我真的只想保留我的 orbi 路由器上的默认 DHCP 服务,让它做正常的事情,而不必以任何方式破解或修改它。

理想情况下,我能够在网络上运行带有 DNSMasq 的 Linux 主机和 TFTP 服务器来响应 PXE 启动。我已经在 Ubuntu 和 Rocky Linux 上尝试过这个,但我似乎无法弄清楚为什么 dnsmasq 没有响应。

Orbi 路由器是 192.168.1.254,PXE/TFTP/DNSMasq 盒子是 192.168.1.17

这是我在 dnsmasq 中的配置:

$ cat /etc/dnsmasq.conf
conf-dir=/etc/dnsmasq.d
port=0
log-dhcp
log-queries
interface=enp1s0,lo

# DHCP Proxy
dhcp-range=192.168.1.0,proxy,255.255.255.0

# PXE
dhcp-boot=pxelinux,,192.168.1.17

# TFTP Options
tftp-root=/var/lib/tftpboot

无论我尝试什么,启动节点似乎都没有得到 PXE 启动/从网络启动的响应...

从日志中,我可以看到 DNSMasq 正在拦截 DHCP 请求广播数据包,因为它在发出请求时记录一条消息(最后一行):

$ sudo journalctl -efu dnsmasq
-- Logs begin at Mon 2021-07-12 22:25:44 EDT. --
Jul 12 22:48:28 localhost.localdomain systemd[1]: Started DNS caching server..
Jul 12 22:48:28 localhost.localdomain dnsmasq[5229]: started, version 2.79 DNS disabled
Jul 12 22:48:28 localhost.localdomain dnsmasq[5229]: compile time options: IPv6 GNU-getopt DBus no-i18n IDN2 DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth DNSSEC loop-detect inotify
Jul 12 22:48:28 localhost.localdomain dnsmasq-dhcp[5229]: DHCP, proxy on subnet 192.168.1.0
Jul 12 22:48:35 localhost.localdomain dnsmasq-dhcp[5229]: 3411263825 available DHCP subnet: 192.168.1.0/255.255.255.0

尝试进行一些基本的调试...我正在登录另一个 linux 盒子(192.168.1.80)以使用 nmap 来测试 dhcp,但我似乎无法从 DNSMasq 盒子中获取其他 DHCP 选项:

$ sudo nmap --script broadcast-dhcp-discover -e eth0
Starting Nmap 7.80 ( https://nmap.org ) at 2021-07-13 02:26 UTC
Pre-scan script results:
| broadcast-dhcp-discover:
|   Response 1 of 1:
|     IP Offered: 192.168.1.21
|     DHCP Message Type: DHCPOFFER
|     Server Identifier: 192.168.1.254
|     IP Address Lease Time: 1d00h00m00s
|     Subnet Mask: 255.255.255.0
|     Router: 192.168.1.254
|_    Domain Name Server: 192.168.1.254
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 1.10 seconds

当我从 DNSMasq 盒子运行 tcpdump 时,我可以看到从测试盒子广播的数据包(下面的第一个数据包)和来自路由器的响应(第二个数据包),但不是来自 DNSMasq 盒子的 IP 地址:

$ sudo tcpdump -i enp1s0 port 67 or port 68 -e -n
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes
22:26:49.849265 dc:a6:32:64:61:49 > Broadcast, ethertype IPv4 (0x0800), length 358: 192.168.1.80.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from de:ad:c0:de:ca:fe, length 316
22:26:50.138984 78:d2:94:50:e9:12 > Broadcast, ethertype IPv4 (0x0800), length 342: 192.168.1.254.bootps > 255.255.255.255.bootpc: BOOTP/DHCP, Reply, length 300

不确定我做错了什么,也许这不是做我想做的事情的正确方法。任何建议将不胜感激。

答案1

我认为你的意思是你想利用代理DHCP。您想使用pxe-serviceindnsmasq而不是 的选项dhcp-boot

dnsmasq这是基于您提供 proxyDHCP 的帖子的最小配置

log-dhcp
dhcp-range=192.168.1.0,proxy,255.255.255.0
dhcp-match=set:pxe,60,PXEClient
pxe-service=tag:pxe,X86PC,"PXE BIOS",pxelinux.0,192.168.1.17

更高级的配置可以匹配其他参数以获得更动态的响应。例如提供基于客户端架构的文件。

链接

相关内容