Subject: Re: A strange problem involving PF and DHCP and an ethernet ADSL
To: None <netbsd-users@netbsd.org>
From: Mark Cullen <mark.r.cullen@gmail.com>
List: netbsd-users
Date: 06/16/2006 01:16:15
Mark Cullen wrote:
> Hi all,
> 
> I have switched to NetBSD, with only one hiccup ( which was my own silly 
> mistake ;) ).
> 
> I am having a slight problem with PF and dhclient, and my ADSL modem. I 
> can't really explain it to well, so the low down is: every so often 
> (once a day?!) my connection dies. The ADSL modem sends a 'DHCPNAK' 
> (don't know why exactly yet):
> 
> ---
> Jun 16 00:27:15 bone dhclient: DHCPREQUEST on fxp1 to 192.168.0.1 port 67
> Jun 16 00:27:15 bone dhclient: DHCPACK from 192.168.0.1
> Jun 16 00:27:15 bone dhclient: bound to 88.96.18.86 -- renewal in 52 
> seconds.
> Jun 16 00:28:07 bone dhclient: DHCPREQUEST on fxp1 to 192.168.0.1 port 67
> Jun 16 00:28:07 bone dhclient: DHCPNAK from 192.168.0.1
> Jun 16 00:28:07 bone dhclient: DHCPDISCOVER on fxp1 to 255.255.255.255 
> port 67 interval 4
> ---
> 
> and then dhclient will sit forever in a loop of:
> 
> ---
> Jun 16 00:53:51 bone dhclient: DHCPDISCOVER on fxp1 to 255.255.255.255 
> port 67 interval 8
> Jun 16 00:53:59 bone dhclient: DHCPDISCOVER on fxp1 to 255.255.255.255 
> port 67 interval 3
> Jun 16 00:54:02 bone dhclient: No DHCPOFFERS received.
> Jun 16 00:54:02 bone dhclient: No working leases in persistent database 
> - sleeping.
> ---
> 
> over and over and over. It won't pick up an address again unless I do a 
> `dhclient -r` followed by a `dhclient fxp1`.
> 
> What's weird about this is that PF is logging the following at the same 
> times as DHCP stops working (192.168.0.1 is the modem's ip address):
> 
> ---
> 00:28:07.015564 rule 0/0(match): block in on fxp1: IP 192.168.0.1.67 > 
> 255.255.255.255.68: BOOTP/DHCP, Reply, length: 548
> ---
> 
> even though I have a rule in pf which should be allowing this to pass 
> through, or at least I think:
> 
> ---
> pass quick on $ext_if proto tcp from 192.168.0.1 port 67 to any port 68 
> keep state
> ---

Ok, silly me. DHCP is UDP not TCP. I have changed this rule to udp 
instead, and it is no longer being blocked in the logs and is now being 
matched by this rule. However, I am still seeing the same looping 
DHCPDISCOVER forever.

I can trigger this at will by just killing off dhclient (not `dhclient 
-r`) and trying to restart it again by running `dhclient fxp1`. I get a 
NAK from the modem and it then gets stuck:

---
Jun 16 01:07:09 bone dhclient: DHCPREQUEST on fxp1 to 255.255.255.255 
port 67
Jun 16 01:07:14 bone dhclient: DHCPREQUEST on fxp1 to 255.255.255.255 
port 67
Jun 16 01:07:14 bone dhclient: DHCPNAK from 192.168.0.1
Jun 16 01:07:14 bone dhclient: DHCPDISCOVER on fxp1 to 255.255.255.255 
port 67 interval 8
Jun 16 01:07:22 bone dhclient: DHCPDISCOVER on fxp1 to 255.255.255.255 
port 67 interval 3
Jun 16 01:07:25 bone dhclient: No DHCPOFFERS received.
Jun 16 01:07:25 bone dhclient: No working leases in persistent database 
- sleeping.
Jun 16 01:07:27 bone dhclient: DHCPDISCOVER on fxp1 to 255.255.255.255 
port 67 interval 6
Jun 16 01:07:33 bone dhclient: DHCPDISCOVER on fxp1 to 255.255.255.255 
port 67 interval 5
Jun 16 01:07:38 bone dhclient: No DHCPOFFERS received.
Jun 16 01:07:38 bone dhclient: No working leases in persistent database 
- sleeping.
---

Any thoughts / suggestions?

> 
> Is there anything wrong with this rule that I am missing? Perhaps PF 
> isn't allowing 255.255.255.255 'by default' and there is some option to 
> change the behaviour? Obviously I don't particularly want to have to 
> restart dhclient every single day when it dies, so any help would be 
> really hugely appreciated!!
> 
> Thanks in advance,
> Mark
> 
>