dnsmasq 不响应不遵循 DHCP 发现的 DHCP 请求

dnsmasq 不响应不遵循 DHCP 发现的 DHCP 请求

我有一个dnsmasq在网络命名空间 X 上运行的实例,并且我从网络命名空间 Y 中运行dhclient(或任何其他 dhcp 客户端)以获取给定接口上的 IP 地址。这两个网络命名空间位于同一个openvswitch网桥上,它们通过该网桥进行通信。

我发现dnsmasq回复需要很长时间,大约需要 10 到 30 秒,即使tcpdump显示所有 DHCP 数据包都被及时传送到目标命名空间。

为什么要花这么长时间?有没有办法减少这种延迟?

以下是 /var/log/syslog 中的一个示例,其中 11 秒后分配了 IP 地址:

Apr  4 14:31:27 localhost dhclient: Listening on LPF/_0.ping/ae:ca:22:bc:3c:7b
Apr  4 14:31:27 localhost dhclient: Sending on   LPF/_0.ping/ae:ca:22:bc:3c:7b
Apr  4 14:31:27 localhost dhclient: Sending on   Socket/fallback
Apr  4 14:31:27 localhost dhclient: DHCPREQUEST on _0.ping to 255.255.255.255 port 67
Apr  4 14:31:33 localhost dhclient: DHCPREQUEST on _0.ping to 255.255.255.255 port 67
Apr  4 14:31:48 localhost dhclient: DHCPDISCOVER on _0.ping to 255.255.255.255 port 67 interval 3
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: DHCPDISCOVER(_0.dhcp) 192.168.31.110 ae:ca:22:bc:3c:7b 
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: DHCPOFFER(_0.dhcp) 192.168.31.110 ae:ca:22:bc:3c:7b 
Apr  4 14:31:48 localhost dhclient: DHCPREQUEST on _0.ping to 255.255.255.255 port 67
Apr  4 14:31:48 localhost dhclient: DHCPOFFER from 192.168.31.1
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: DHCPREQUEST(_0.dhcp) 192.168.31.110 ae:ca:22:bc:3c:7b 
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: DHCPACK(_0.dhcp) 192.168.31.110 ae:ca:22:bc:3c:7b mymachine
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: not giving name mymachine to the DHCP lease of 192.168.31.110 because the name exists in /etc/hosts with address 127.0.0.1
Apr  4 14:31:48 localhost dhclient: DHCPACK from 192.168.31.1
Apr  4 14:31:48 localhost dhclient: ntp-servers: expecting at least 4 bytes; got 0
Apr  4 14:31:48 localhost dhclient: bound to 192.168.31.110 -- renewal in 33935 seconds.

dnsmasq使用以下命令启动实例:

dnsmasq --dhcp-range=set:tag0,192.168.31.100,192.168.31.150,24h -l /tmp/dnsmasq-leasefile.dhcp.dhcp --dhcp-option=tag:tag0,option:router,192.168.31.2 --dhcp-option=tag:tag0,option:dns-server,9.9.9.9 --dhcp-option=tag:tag0,42

编辑 好的,我又运行了几次,我觉得我发现了其中的规律。DHCP 客户端首先发送两个 DHCP 请求,但都没有得到答复。一旦发送 DHCP 发现,dnsmasq就会回复。首先尝试 DHCP 请求的原因dhclient是它看到了同一接口的先前租约,并尝试请求出现在那里的 IP 地址。一旦我删除此类文件,就会立即生成/var/lib/dhcp/dhclient.leases响应。我看到两个选项:dnsmasq

  • 我告诉dhclient不要使用它的租赁文件(不确定如何使用),但这并不是很理想......
  • 我指示dnsmasq响应未遵循发现消息的请求。我该怎么做?

答案1

答案是使用--dhcp-authoritativednsmasq 中的选项。问题是我每次都要重新启动 dnsmasq 服务器,因此它没有租约文件,但 dhclient 有自己的租约文件。由于无法在其自己的租约文件中验证请求的 IP 地址,dnsmasq 会等待,直到发出 dhcp discover 消息。

相关内容