ISC DHCP Server Operating System Dependencies
Because the ISC DHCP server runs on such a wide variety of operating systems, quite
a few system dependencies are specific to these operating systems, as discussed in the
following sections.
Problems with the 255.255.255.255 Broadcast Address
On almost every operating system in which the ISC DHCP distribution uses the BSD
socket API to send and receive packets on the network, a bug exists in the API that
prevents it from correctly sending packets to the 255.255.255.255 broadcast address.
Instead, the kernel uses the local subnet broadcast address. For example, on a subnet
with a subnet mask of 255.255.255.0 and a network number of 10.100.17.0, the
kernel substitutes the address 10.100.17.255 if the DHCP server specifies an IP desti-
nation address of 255.255.255.255.
This substitution of a different broadcast address is a problem because DHCP speci-
fies that when the DHCP server broadcasts a response to the DHCP client, it must
broadcast the response to the 255.255.255.255 broadcast address. Because the client
doesn’t know what network it is on, it has no way of knowing whether
10.100.17.255 is a host IP address or the broadcast address for the subnet. Many
DHCP clients ignore this, but unfortunately the Microsoft DHCP client does not. As
a result, the server receives
DHCPDISCOVER messages from the Microsoft client and
broadcasts responses, but the Microsoft client never hears the responses. The
Microsoft client continues broadcasting
DHCPDISCOVER messages until it gives up, and
as a result the client can’t use the network.
Fortunately, on most such operating systems, you can get around this problem by
installing a host route to the 255.255.255.255 address. You can also avoid this
problem in other ways, as described in the following sections, under the operating
systems on which the solutions were tried. However, if one solution does not work,
you might want to try the suggested solution for another operating system instead.
Linux Difficulties
To use the ISC DHCP distribution on Linux, you must use version 3.0 or later. In
addition, you must configure raw packet and Linux packet filter support into your
Linux kernel. If you do not, you get one of a variety of errors when you first start the
DHCP server, indicating that it can’t create a socket or bind to it. The error message
indicates that you must set
CONFIG_FILTER=y and CONFIG_PACKET=y in your Linux
kernel configuration file and rebuild the kernel.
In current versions of the kernel, you must link these capabilities into the kernel; if
you configure them as loadable modules, they are not loaded automatically. You can
force the modules to load on system startup, but it’s more reliable to just link them
into the kernel that you start up.
APPENDIX F DHCP Server and Operating System Versions528
036 3273 App F 10/3/02 5:03 PM Page 528