This is a problem, that I ran into recently on a quite heavily configured linux server. This machine runs Samba as an Active Directory Domain Controller, a mail server, a web server, two virtual machines (using KVM/QEMU, and connecting one of their virtualized ethernet interfaces to one of the real ethernet interfaces of the machine via a virtual bridge set up with brctl) and a few more services. On a private VLAN, it also operates a DHCP server. This had been working fine, but recently it started to fail to let Apple devices in. But also a simple WiFi access point (which is configured to dynamically receive its IP via DHCP) also fails to receive an IP.
The endless loop, where devices try to obtain an IP address, is as follows (captured via tcpdump -e
). There 2c:30:33:2b:68:d0
is the MAC of the remote box, and 74:d0:2b:99:52:bc
is the linux server. After each packet, I have written my interpretation of that packet:
15:48:33.350358 2c:30:33:2b:68:d0 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 345: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 2c:30:33:2b:68:d0, length 303
(DHCPDISCOVER from 2c:30:33:2b:68:d0)
15:48:34.351523 74:d0:2b:99:52:bc > 2c:30:33:2b:68:d0, ethertype IPv4 (0x0800), length 345: 172.17.9.1.67 > 172.17.9.7.68: BOOTP/DHCP, Reply, length 303
(DHCPOFFER on 172.17.9.7 to 2c:30:33:2b:68:d0 via eth0.9)
15:48:34.366366 2c:30:33:2b:68:d0 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 357: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 2c:30:33:2b:68:d0, length 315
(DHCPREQUEST for 172.17.9.7 (172.17.9.1) from 2c:30:33:2b:68:d0 via eth0.9)
15:48:34.492289 74:d0:2b:99:52:bc > 2c:30:33:2b:68:d0, ethertype IPv4 (0x0800), length 345: 172.17.9.1.67 > 172.17.9.7.68: BOOTP/DHCP, Reply, length 303
(DHCPACK on 172.17.9.7 to 2c:30:33:2b:68:d0 via eth0.9)
15:48:34.492707 2c:30:33:2b:68:d0 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 172.17.9.7 tell 172.17.9.7, length 46
(gratuitous ARP of the newly registered box)
15:48:34.492761 74:d0:2b:99:52:bc > 2c:30:33:2b:68:d0, ethertype ARP (0x0806), length 42: Reply 172.17.9.7 is-at 74:d0:2b:99:52:bc, length 28
(this is the packet, that I don't understand)
15:48:34.526375 2c:30:33:2b:68:d0 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 346: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, unknown (0x00), length 304
(DHCPDECLINE of 172.17.9.7 from 2c:30:33:2b:68:d0 via eth0.9, the box abandones the IP address 172.17.9.7, because it seems in use)
DHCP clients, that don't send the gratuitous ARP mentioned above, can register themselves fine. So I assume, that the linux server's response to that gratuitous ARP, where it answers, that the address belongs to the linux machine instead, is the problem.
I have ensured, that the IP addresses, that the DHCP server should give out, are not registered to the linux server. So I frankly don't know, why that packet is send.
All attempts to play with /proc/sys/net/ipv4/conf/eth0.9/arp_accept, /proc/sys/net/ipv4/conf/eth0.9/arp_announce and so on have failed. Even the attempt to filter out the bad ARP packets with arptables
had no success. And turning ARP off totally on the interface doesn't have the desired effect, either.
Any idea, why this weird packet is created? Where I could I look further?