[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: isc-dhcp-server not receiving DHCPDISCOVER



Russell L. Carter wrote:
> I've got an internal net with several dual-homed jessie boxen.

I see that you have 10.0.10.0/24 on one and 10.0.11.0/24 on the
other.  Is that correct?  And you only want dhcpd to serve DHCP
requests on the 10.0.10.0/24 network?

> I would like to get isc-dhcp-server up so I can configure my new
> UniFi toy.  The server has two statically configured interfaces,
> eth0 and eth1.
> 
> The server's dhcpd.conf contains:
> 
> ddns-update-style none;
> log-facility local7;
> option domain-name "xx.pinyon.org";
> option domain-name-servers 10.0.10.5, 10.0.10.7;
> option routers 10.0.10.5;
> default-lease-time 600;
> max-lease-time 7200;
> authoritative;

Looks good.

> subnet 10.0.11.0 netmask 255.255.255.0 {}

Don't serve the 10.0.11.0/24 network.  Which interface is which just
for the discussion?

> subnet 10.0.10.0 netmask 255.255.255.0 {
>        pool { range 10.0.10.50 10.0.10.100; }
> }

Looks okay.

Personally I always prefer to have the routers option configured in
the subnet section.  Because different subnets will have different
routers and that makes it obvious and easy to set that way.  I realize
you only have the one and so the global definition should be fine.
This is just looking to the future.

> and I've set INTERFACES="eth0 eth1" in /etc/default/isc-dhcp-server.

If you don't want dhcp to server DHCP requests to the 10.0.11.0/24
subnet then why have the interface listed?  (Or if some other
configuration is happening please say because the only thing that I
can think of that makes sense is that you have one on one and one on
the other but have disabled one of them.

> isc-dhcp-server starts fine.

You might want to verify:

  # netstat -na | grep :67
  udp        0      0 0.0.0.0:67        0.0.0.0:*

  # netstat -a | grep :bootps
  udp        0      0 *:bootps          *:*

Somewhat of a misfeature but the isc dhcpd (along with dnsmasq too)
listens to all interfaces and simply ignores traffic not in the
provided interface list.  It would be better if it bound itself only
to the interface IP address.  Because binding to the wildcard address
makes it impossible to run multiple daemons on the same machine.
Which is often a collision when using VMs and dnsmasq for example.

> I then listen for DHCP packets on the
> 10.0.10.0 net with
> 
> $ dhcpdump -i eth0

Looks good.  I am sure you are also looking with tcpdump too?  Just in
case the packets are being seen but not as dhcp traffic for some reason?

> On the test (jessie) client I have ifdown'd eth0 and execute
> 
> $ dhclient -v eth0

I am probably confused here but I always thought that the interface
needed to be UP before you could run dhclient on it.  And I always
thought it needed root permission.  Try both.

  # ifconfig eth0 up
  # dhclient -v eth0

But I worry about where DBDIR/dhclient.leases is defined to be by
default?  I don't know if you need to set it.  This is the usual place
on Debian for it.

  # dhclient -v -lf /var/lib/dhcp/dhclient.eth0.leases eth0

Also you probably want to try the /etc/network/interfaces config and
seeing if it is happier if it uses all of the defaults.  I would start
here.  It is much easier than remembering all of the details manually.

  # ifdown eth0
  ...edit /etc/network/interfaces...set up...
  iface eth0 inet dhcp
  ...save file...
  # ifup eth0

Note that if the interface is up and you rearrange the file then
ifdown won't match the up.  They will be out of sync.  This might
leave a dhclient running in the background for example.  You may have
to clean things up.  So normally you need to bring the interface down
before making big changes to the file and then bringing it up
afterward.  But you are aware of the state such as whether dhclient is
already running or not then you can carefully do it with it up too.

> (I can bring up static eth0 on the client and ping the server fine)

Good.

> The problem is that no DHCP packet is received by the eth0 interface
> on the server.  As a first test I've ifdown'd the eth1 interface on
> the server and tried running a dhclient and I DO see the DHCPDISCOVER
> packets.

On the client listen to the interfaces with tcpdump.  Are the packets
leaving it?  Here are some possibly useful hints.

  # tcpdump -lni any
  # tcpdump -lni any not arp
  # tcpdump -lni any port bootps
  # tcpdump -lni eth0 not port ssh and not arp

> Neither the server nor the client is running a firewall.  iptables is
> not even installed.  For kicks I enabled /proc/sys/net/ipv4/ip_forward
> but this had no effect.  I've got a smart switch in the middle but I
> checked and everything looks fine.

I would install iptables so as to be able to dump the kernel netfilter
rules and double check.  Because something is blocking.

  # iptables -L

> It looks to me that the client UDP broadcast is blocked from reaching
> the server, but what could cause that?
> 
> Any ideas much appreciated.

dhcpdump is good but I would use tcpdump if just looking for the
presence of packets.  I would verify on the client that they are
leaving down the interface.  If they aren't making it to the interface
then the server won't see them.  If they are leaving the interface
then they should be arriving at the server.  If not then the switch in
the middle is suspect.  If you have auto-MDIX interfaces then you
don't need a crossover cable and can avoid the switch with a direct
connection between.  (But that would seem to be unusual to have the
switch blocking things.)

The packets are either going some place, blocked from going, or not
being generated.  I don't know of any other possibilities.  You will
have to find them.

Bob

Attachment: signature.asc
Description: Digital signature


Reply to: