Lately (since Ubuntu 9.x) I’ve had issues with DHCP on my network, not really understanding why my DHCP client never assigned my standard gateway that I’ve configured my router to give out. Since I’ve just upgraded my system to Ubuntu 9.10 and problems were still there, I couldn’t continue to ignore this annoying problem. I tried to fire up Google and other search engines to see if I were able to find a solution to the problem, but I couldn’t find any solution to it, without setting a static network configuration which is NOT a solution. I had to get my hands dirty, and I fired up Wireshark and started digging..
EDIT: This problem is now solved!
After analyzing the DHCP Offer packet, I notice it hands out a “Classless Static Route (Microsoft)” (249) which is not defined in the bootp dhcp parameters[1], could this be the cause?

CSR 249
I quickly fired up telnet and reconfigured my DHCP pool and flushed all leases on my SpeedTouch 516[2] series modem/router.
Ready for a new Wireshark capture:

CSR 121
Finally it seems to send the correct DHCP parameters [1], with “Classless Static Route” (121) so my dhclient picks up the standard gateway. I tested renewing my lease a few times together with flushing the dhcp pool table, and it was working like a charm!
Why would my SpeedTouch modem/router give out some kind of Microsoft propiertary[3] routing configuration, and how did this happen in the first time? Anyway, I did a quick reboot to Windows 7 to make sure it was still working just fine there, and back to Ubuntu. Guess what? I’m back to the non-working dhclient not picking up the gateway information for my network. Wireshark tells me that it started serving out CSR (249) again.
Conclution:
SpeedTouch 516 modem/router seems to have some annoying feature of figuring out which hosts are running Microsoft’s operating system (assuming Vista and 7, since this never was a problem in XP), and then suddenly switches on how it gives out the “Classless Static Route” information. Now why would the router change on using CSR 121 and CSR 249 is out of my league, wireshark shows the same data is sent anyway so I don’t really get why it switches to a proprietary CSR before it requires some functionality from it. Wouldn’t it be better that the client requested it in the DHCP Discover/Request?
Questions, What to do?:
Complain to ISP and be allowed to firmware upgrade my modem/router and hope it works?
If Microsoft proprietary CSR (249) [3] is used, as far as I understand it shouldn’t serve CSR 121 information if it is duplicated information, so should dhclient add support for reading “normal” CSR (249)’s from Microsoft? If not, more and more Linux users will fall in the same pitfall that I am now…
Configure a low lease time, which will generate a lot of broadcast packages on my network for a dirty solution?
I can’t be the only one which is having this problem, since most Norwegian ISP’s hands out these types of modem/routers.
Any input anyone?!
Update – 11 November 2009 – I got it working!
After some more digging, I figured out that editing dhclient.conf in /etc/dhcp3 (Ubuntu 9.10) and removing “rfc3442-classless-static-routes” from the request line, it works as it should and the router uses the default route option in the protocol (option 3). So my request line is now:
request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, netbios-name-servers, netbios-scope, interface-mtu, ntp-servers;
If you still have any issues, don’t hesitate with leaving a comment!
[1] http://www.iana.org/assignments/bootp-dhcp-parameters/
[2] SpeedTouch 516, Flash image : 5.3.1.5.0, Build name : ZZTVAU5.315
[3] http://social.technet.microsoft.com/Forums/en-US/itprovistanetworking/thread/bfe43ccb-ec6e-4540-ab17-f76b20b715b8/
Hi,
I have a speedtouch router and was having the same problem. Changed the dhclient conf line and have rebooted, and network is working first time.
Nice to know that my debugging/solution helped you out