[Dnsmasq-discuss] using DHCP with virtual interfaces

Tom Metro tmetro+dnsmasq at gmail.com
Wed Apr 1 07:57:55 BST 2009


I'm trying to obtain an address via DHCP (from Dnsmasq 2.45-1~bpo40+1 on 
Debian) for a virtual interface on an Ubuntu server. This is failing to 
work due a bug in ifconfig (see 
https://bugs.launchpad.net/ubuntu/+source/dhcp3/+bug/351378 ) and I've 
been trying to hack around the problem using an alternate DHCP client, 
udhcpc (instead of dhcp3's dhclient). When I invoke it, I get:

# udhcpc --hostname=indianpoint --interface=eth0:0
udhcpc (v0.9.9-pre) started
SIOCSIFFLAGS: Cannot assign requested address
Sending discover...
Sending select for 192.168.0.203...
Received DHCP NAK
Received a NAK: address reserved
Sending discover...
Sending select for 192.168.0.203...
Received DHCP NAK
[...etc...]

(The SIOCSIFFLAGS is produced by udhcpc's deconfig script which tries to 
pass an address of 0.0.0.0 to ifconfig, which triggers the above 
mentioned bug, but I believe it is harmless here and can be ignored.)

In a Dnsmasq config file I have:
dhcp-host=mythtv,192.168.0.203,infinite

which works fine to obtain an address for the primary interface on the 
Ubuntu server. My expectation was that when Dnsmasq was presented with 
an alternate hostname it would not match the above rule, and instead 
issue a new IP address from the dynamic pool.

When that failed to work, I tried adding an explicit rule for the 
alternate host name:
dhcp-host=indianpoint,192.168.0.204,infinite

and got the same result. I also tried specifying a client ID instead of 
and in addition to a hostname, with the same result.

I haven't confirmed with a packet sniffer that udhcpc is actually 
sending the hostname, but I've sifted through the source, and it does 
appear to be including the hostname as an option in the DHCPDISCOVER packet.

It's then getting back a DHCPOFFER from Dnsmasq containing the IP 
address already assigned to the primary interface. udhcpc then takes the 
given address, puts it into a DHCPREQUEST, and gets back a DHCPNAK from 
Dnsmasq saying the address is reserved. And then the cycle repeats...

On the server running Dnsmasq, this is logged (slightly edited):

dnsmasq[26456]: DHCPDISCOVER(eth0) 00:04:...:d1:33
dnsmasq[26456]: DHCPOFFER(eth0) 192.168.0.203 00:04:...:d1:33
dnsmasq[26456]: DHCPREQUEST(eth0) 192.168.0.203 00:04:...:d1:33
dnsmasq[26456]: DHCPNAK(eth0) 192.168.0.203 00:04:...:d1:33 address reserved

(On a side note, it'd be great if Dnsmasq's logging could be enhanced to 
include some of the identifying information supplied by the client, an 
indication of what rule Dnsmasq used to determine the assigned IP 
address, and an indication of whether Dnsmasq is receiving or sending 
the packets. Perhaps there's a debug mode that provides this?)

So I'm wondering if having the MAC address for the client in Dnsmasq's 
cache results in a short circuit behavior, bypassing the normal rules 
for determining what IP address gets assigned.

I see there are a couple of FAQ entries that discuss how a client ID can 
be used to override the default assignment that would occur via MAC 
address, so it seems it ought to work as I was expecting.

I'm also wondering if it is correct for Dnsmasq to be handing out a 
reserved address in an offer packet. Understandable when a client 
reboots after a crash, Dnsmasq will get a DHCPDISCOVER from a machine 
with an active lease, and its desirable to hand it back the same IP 
address. But then how does it recognize that the address is still 
reserved elsewhere? Is it probing the network? Is it because he 
host/client identifier didn't match?

  -Tom

-- 
Tom Metro
Venture Logic, Newton, MA, USA
"Enterprise solutions through open source."
Professional Profile: http://tmetro.venturelogic.com/



More information about the Dnsmasq-discuss mailing list