The DHCP server embedded in IOS is good, because it exists. Unfortunately, it has certain limitations, of which one of the more irritating is the possibility to manually bind a host to a specific IP address based on the MAC address (hardware-identifier) or the identifier (client-identifier) it sends – but not both simultaneously.
The problem is that in the case of a Windows system you should bind a host to an address with client-identifier, while in case of e.g. Linux – with hardware-address. Why? Windows utilizes DHCP option 61, which is client-identifier, by inserting the MAC address into it, but preceded by a byte describing layer 2 technology type (most often it’s Ethernet, so byte 01). Meanwhile, Linux doesn’t use this option by default.
Everything is fine unless we have a machine with both systems installed and we want that machine to always have the same IP address. The only sane solution is to modify the Linux DHCP client’s behavior. For example, if the MAC address of the Linux box is 00:01:02:03:04:05, we can insert the following into
send dhcp-client-identifier 01:00:01:02:03:04:05;
and in the router configuration:
ip dhcp pool dual-boot-host host 192.168.1.123 255.255.255.0 client-identifier 0100.0102.0304.05
This way the machine will send a DHCP request with the client-identifier field from both systems and we will achieve some unification. On the other hand, the problem doesn’t seem to be hard to solve from the DHCP server’s perspective – looks like someone at Cisco has cut some corners.
Update: the configuration file modification only applies to
dhclient from the ISC DHCP package. For example, Gentoo’s default
dhcpcd uses client-identifier out-of-the-box. Don’t know about other distros, but the idea remains the same.