[Dnsmasq-discuss] Listening on VLAN and parent interface for DHCP

Geert Stappers stappers at stappers.nl
Mon Jun 1 07:18:41 BST 2020


On Mon, Jun 01, 2020 at 12:55:23AM -0400, Matt Winter wrote:
> Hello,
> 
> I'm trying to debug some DHCP behavior on my UniFi home network.
> 
> The Unifi Security Gateway is a router responsible for handing out IPs for
> all of my VLANs. On the USG:
> - eth1 has 192.168.1.1/24
> - eth1.10 has 192.168.10.1/24
> 
> Both subnets are configured for DHCP, and it mostly works as desired...
> however:
> Sometimes, for clients connecting on VLAN 10, I'll see activity in the
> dnsmasq logs indicating that dnsmasq is acting on the DHCP traffic twice:
> once for eth1.10, and once for eth1. I'll include a dump of such activity
> at the end.
> 
> As far as I can tell, this is due to the way Linux handles 802.1Q traffic.
> A bug was addressed in the ISC DHCP server, with following note describing
> the issue:
> 
> >   /*  Use auxiliary packet data to:
> >    *
> >    *  a. Weed out extraneous VLAN-tagged packets - If the NIC driver is
> >    *  handling VLAN encapsulation (i.e. stripping/adding VLAN tags),
> >    *  then an inbound VLAN packet will be seen twice: Once by
> >    *  the parent interface (e.g. eth0) with a VLAN tag != 0; and once
> >    *  by the vlan interface (e.g. eth0.n) with a VLAN tag of 0 (i.e none).
> >    *  We want to discard the packet sent to the parent and thus respond
> >    *  only over the vlan interface.  (Drivers for Intel PRO/1000 series
> >    *  NICs perform VLAN encapsulation, while drivers for PCnet series
> >    *  do not, for example. The linux kernel makes stripped vlan info
> >    *  visible to user space via CMSG/auxdata, this appears to not be
> >    *  true for BSD OSs.).  NOTE: this is only supported on linux flavors
> >    *  which define the tpacket_auxdata.tp_vlan_tci.
> 
> -- https://github.com/isc-projects/dhcp/commit/acbecb2e
> 
> Am I on the right track? If so, would a patch that does a similar
> discarding of packets be desirable?
> 
> Here's my log showing eth1 and eth1.10 fighting over who should respond:
> 
> May 30 15:32:43 dnsmasq-dhcp[19767]: DHCPREQUEST(eth1) 192.168.1.104 a4:fc:77:xx:yy:zz
> May 30 15:32:43 dnsmasq-dhcp[19767]: DHCPACK(eth1) 192.168.1.104 a4:fc:77:xx:yy:zz DESKTOP-HOSTNAME
> May 30 15:33:29 dnsmasq-dhcp[19767]: DHCPREQUEST(eth1.10) 192.168.1.104 a4:fc:77:xx:yy:zz
> May 30 15:33:29 dnsmasq-dhcp[19767]: DHCPNAK(eth1.10) 192.168.1.104 a4:fc:77:xx:yy:zz wrong network
> May 30 15:33:29 dnsmasq-dhcp[19767]: DHCPDISCOVER(eth1.10) a4:fc:77:xx:yy:zz
> May 30 15:33:29 dnsmasq-dhcp[19767]: DHCPOFFER(eth1.10) 192.168.10.23 a4:fc:77:xx:yy:zz
> May 30 15:33:29 dnsmasq-dhcp[19767]: DHCPREQUEST(eth1.10) 192.168.10.23 a4:fc:77:xx:yy:zz
> May 30 15:33:29 dnsmasq-dhcp[19767]: DHCPACK(eth1.10) 192.168.10.23 a4:fc:77:xx:yy:zz DESKTOP-HOSTNAME
> May 30 15:33:31 dnsmasq-dhcp[19767]: DHCPREQUEST(eth1) 192.168.10.23 a4:fc:77:xx:yy:zz
> May 30 15:33:31 dnsmasq-dhcp[19767]: DHCPNAK(eth1) 192.168.10.23 a4:fc:77:xx:yy:zz wrong network
> May 30 15:33:33 dnsmasq-dhcp[19767]: DHCPREQUEST(eth1) 192.168.10.23 a4:fc:77:xx:yy:zz
> May 30 15:33:33 dnsmasq-dhcp[19767]: DHCPNAK(eth1) 192.168.10.23 a4:fc:77:xx:yy:zz wrong network
> May 30 15:33:36 dnsmasq-dhcp[19767]: DHCPDISCOVER(eth1) a4:fc:77:xx:yy:zz
> May 30 15:33:36 dnsmasq-dhcp[19767]: DHCPOFFER(eth1) 192.168.1.104 a4:fc:77:xx:yy:zz
> May 30 15:33:36 dnsmasq-dhcp[19767]: DHCPREQUEST(eth1) 192.168.1.104 a4:fc:77:xx:yy:zz
> May 30 15:33:36 dnsmasq-dhcp[19767]: DHCPACK(eth1) 192.168.1.104 a4:fc:77:xx:yy:zz DESKTOP-HOSTNAME
> May 30 16:47:56 dnsmasq-dhcp[19767]: DHCPREQUEST(eth1.10) 192.168.1.104 a4:fc:77:xx:yy:zz
> May 30 16:47:56 dnsmasq-dhcp[19767]: DHCPNAK(eth1.10) 192.168.1.104 a4:fc:77:xx:yy:zz wrong network
> May 30 16:47:56 dnsmasq-dhcp[19767]: DHCPDISCOVER(eth1.10) a4:fc:77:xx:yy:zz
> May 30 16:47:56 dnsmasq-dhcp[19767]: DHCPOFFER(eth1.10) 192.168.10.23 a4:fc:77:xx:yy:zz
> May 30 16:47:56 dnsmasq-dhcp[19767]: DHCPREQUEST(eth1.10) 192.168.10.23 a4:fc:77:xx:yy:zz
> May 30 16:47:56 dnsmasq-dhcp[19767]: DHCPACK(eth1.10) 192.168.10.23 a4:fc:77:xx:yy:zz DESKTOP-HOSTNAME



More information about the Dnsmasq-discuss mailing list