Ticket #6495 (new defect)
VBox DHCP Server does not respect client identifier
|Reported by:||lmanman2||Owned by:|
VBox's build-in DHCP server does not respect the DHCP 'client identifier' option. Only the DHCP 'chaddr' field (typically the MAC address) is respected.
Problem is that this is a violation of the DHCP protocol. (RFC 2131). Below is an extract from the RFC where I've highlighted in bold what I think VBox does not implement:
"A DHCP server needs to use some unique identifier to associate a client with its lease. The client MAY choose to explicitly provide the identifier through the 'client identifier' option. If the client supplies a 'client identifier', the client MUST use the same 'client identifier' in all subsequent messages, and the server MUST use that identifier to identify the client. If the client does not provide a 'client identifier' option, the server MUST use the contents of the 'chaddr' field to identify the client. It is crucial for a DHCP client to use an identifier unique within the subnet to which the client is attached in the 'client identifier' option. Use of 'chaddr' as the client's unique identifier may cause unexpected results, as that identifier may be associated with a hardware interface that could be moved to a new client. Some sites may choose to use a manufacturer's serial number as the 'client identifier', to avoid unexpected changes in a clients network address due to transfer of hardware interfaces among computers. Sites may also choose to use a DNS name as the 'client identifier', causing address leases to be associated with the DNS name rather than a specific hardware box."
The current functionality of VBox's DHCP server creates problems for DHCP clients that for one reason or another sends a 'client identifier' as part of the DHCP negotiation and expects it to be respected over the 'chaddr' field.
My suspicion: VBox's DHCP server in its use of data structures seems to implement the BOOTP protocol rather than the DHCP protocol. (DHCP was invented as a successor to BOOTP in 1993).
How to implement:
Internally the DHCP Server should work with a unique lease identifier defined as follows (pseudo code):
If (! IsNull(DHCP-ClientIdentifier) ) DhcpUniqueLeaseId = DHCP-ClientIdentifier Else DhcpUniqueLeaseId = DHCP-chaddr