Ниже приведен пример вывода этой команды:
$ sudo dhclient -v
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/eth0/00:15:5d:5a:e4:c5
Sending on LPF/eth0/00:15:5d:5a:e4:c5
Listening on LPF/dummy0/6e:0b:72:f9:83:f0
Sending on LPF/dummy0/6e:0b:72:f9:83:f0
Listening on LPF/bond0/82:a2:7e:03:69:19
Sending on LPF/bond0/82:a2:7e:03:69:19
Sending on Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0x3115634c)
DHCPDISCOVER on dummy0 to 255.255.255.255 port 67 interval 3 (xid=0x1ab3dc37)
DHCPDISCOVER on bond0 to 255.255.255.255 port 67 interval 3 (xid=0xcea7a32d)
Я не смог найти никакой документации о том, что такое "LPF" или "Socket/fallback".
Не могли бы вы дать какое-нибудь объяснение и где можно узнать об этом больше?
Связьhttps://www.isc.org/software/dhcp/не помогло.
решение1
По-видимому, LPF относится к Linux Packet Filter:https://gitlab.isc.org/isc-projects/dhcp/-/blob/master/common/lpf.c
В других контекстах его также называютФильтрация сокетов Linux или фильтр пакетов Berkeley.
Клиент DHCP должен иметь возможность отправлять и получать широковещательные пакеты UDP, в то время как сетевой интерфейс не обязательно должен иметь настроенный IP-адрес. Он также должен заботиться о том, через какой интерфейс будут проходить пакеты, чтобы назначить конфигурацию сети конкретному сетевому интерфейсу, на котором они были получены, а не просто любому интерфейсу в системе, где их больше одного.
API-интерфейс фильтрации пакетов, такой как LPF в Linux, является наиболее гибким и эффективным способом для программного обеспечения DHCP сообщить сетевому стеку ОС: «Я собираюсь использовать сокет для необработанных пакетов, поскольку мои потребности в сетевом трафике немного необычны, но я по-прежнему не хочу получать копиюкаждый отдельный пакеткоторый поступает через сетевой интерфейс - просто пакеты UDP на этих конкретных номерах портов».
Если LPF или аналогичный API-фильтр пакетов недоступен, то программное обеспечение DHCP должно будет полагаться на стандартный API сетевых сокетов и его различные расширения - в частности, опции сокетов. Но они не поддерживаются единообразно во всех операционных системах, поддерживаемых пакетом ISC DHCP, и поэтомукод сокетов ISC DHCP довольно сложени полный #ifdef
s.
Если API-интерфейс фильтрации пакетов и определенные параметры сокетов недоступны, набор DHCP может работать правильно только в том случае, если у хоста есть только один сетевой интерфейс:
#if !defined(SO_BINDTODEVICE) && !defined(USE_FALLBACK)
/* Make sure only one interface is registered. */
if (once) {
log_fatal ("The standard socket API can only support %s",
"hosts with a single network interface.");
}
once = 1;
#endif
При использовании API-интерфейса пакетного фильтра пакет ISC DHCP также устанавливаетрезервный сокетс использованием стандартного API сетевых сокетов. На стороне приема резервный сокет просто отбрасывает любой входящий трафик: возможно, какой-то API пакетного фильтра выдасткопиявходящего трафика, и обычный сокет должен присутствовать, чтобы гарантировать, что ОС не посчитает, что порт UDP, используемый для DHCP, закрыт, и не вызовет отправку сообщений об ошибках ICMP для любых полученных одноадресных пакетов DHCP (т. е. обновлений существующей активной аренды).
На стороне отправки использование резервного сокета менее очевидно. Если кто-то знает больше, не стесняйтесь редактировать этот ответ или добавлять свой собственный.