• Martin Wetterwald's avatar
    net: ipconfig: Allow DNS to be overwritten by DHCPACK · 81ac2722
    Martin Wetterwald authored
    Some DHCP server implementations only send the important requested DHCP
    options in the final BOOTP reply (DHCPACK).
    One example is systemd-networkd.
    However, RFC2131, in section 4.3.1 states:
    
    > The server MUST return to the client:
    > [...]
    > o Parameters requested by the client, according to the following
    >   rules:
    >
    >      -- IF the server has been explicitly configured with a default
    >         value for the parameter, the server MUST include that value
    >         in an appropriate option in the 'option' field, ELSE
    
    I've reported the issue here:
    https://github.com/systemd/systemd/issues/27471
    
    
    
    Linux PNP DHCP client implementation only takes into account the DNS
    servers received in the first BOOTP reply (DHCPOFFER).
    This usually isn't an issue as servers are required to put the same
    values in the DHCPOFFER and DHCPACK.
    However, RFC2131, in section 4.3.2 states:
    
    > Any configuration parameters in the DHCPACK message SHOULD NOT
    > conflict with those in the earlier DHCPOFFER message to which the
    > client is responding.  The client SHOULD use the parameters in the
    > DHCPACK message for configuration.
    
    When making Linux PNP DHCP client (cmdline ip=dhcp) interact with
    systemd-networkd DHCP server, an interesting "protocol misunderstanding"
    happens:
    Because DNS servers were only specified in the DHCPACK and not in the
    DHCPOFFER, Linux will not catch the correct DNS servers: in the first
    BOOTP reply (DHCPOFFER), it sees that there is no DNS, and sets as
    fallback the IP of the DHCP server itself. When the second BOOTP reply
    comes (DHCPACK), it's already too late: the kernel will not overwrite
    the fallback setting it has set previously.
    
    This patch makes the kernel overwrite its DNS fallback by DNS servers
    specified in the DHCPACK if any.
    Signed-off-by: default avatarMartin Wetterwald <martin@wetterwald.eu>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    81ac2722
ipconfig.c 43.3 KB