On 29/11/2023 23:09, Chris Friesen via Dnsmasq-discuss wrote:
Hi,

I was just wondering whether the --interface and --except-interface options to dnsmasq would also apply to messages like DHCPDISCOVER and DHCPREQUEST which are broadcast to 255.255.255.255.

In my particular case I have an existing dnsmasq instance that is running, and I want to add a second dnsmasq instance to handle DHCP requests coming from a specific subset of interfaces.   I don't want the primary dnsmasq instance to see the requests coming in on those interfaces, and I don't want the second dnsmasq instance to see requests coming in on the other interfaces.

As a concrete example, suppose I have network interfaces eth0/eth1/eth2 and I have instance A of dnsmasq which is run as "dnsmasq --except-interface eth2", and instance B of dnsmasq which is run as "dnsmasq --interface eth2 --except-interface lo".

If a broadcast DHCPDISCOVER or DHCPREQUEST comes in on eth0/eth1 which dnsmasq instance(s) will see it?

If a broadcast DHCPDISCOVER or DHCPREQUEST comes in on eth2 which dnsmasq instance(s) will see it?

If a broadcast DHCPDISCOVER or DHCPREQUEST is emitted by an entity on the local host which dnsmasq instance(s) will see it?

Thanks,

Chris Friesen


As you've surmised, making more than one dnsmasq/DHCP instance on a server work is tricky.

It can be done, but only in a very specific way.

Each dnsmasq instance must be configured to serve exactly one interface, using the --interface config option.

Under these circumstances, dnsmasq will log

DHCP, sockets bound exclusively to interface <interface>

at startup.

Your example will not work, because your instance A is binding to more than one interface. To fix this you need to start separate dnsmasq instances for eth0 and eth1, or you need to bridge eth0 and eth1 to single bridge interface and configure dnsmasq to listen on that.


The reason behind this is that the dnsmasq DHCP subsystem uses one socket, which listens on the wildcard address (so that broadcasts to 255.255.255.255 arrive, amongst other reasons.) In the "exactly one interface" state, dnsmasq can also bind that socket to a physical interface, using the SO_BINDTODEVICE socket option, which allows the multiple-server setup to work. SO_BINDTODEVICE only allows one device, hence the one interface limitation.


Cheers,

Simon.

_______________________________________________
Dnsmasq-discuss mailing list
Dnsmasq-discuss@lists.thekelleys.org.uk
https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss

Reply via email to