|
Bog BOS: Протокол BOOTP/DHCP
|
Последнее изменение файла: 2024.11.18
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: Протокол BOOTP/DHCP
BOOTP (Bootstrap Protocol) как и RARP
обеспечивает с помощью специального сервера выделение
IP адреса клиенту по его
MAC адресу
(например, при загрузке устройства, не имеющего возможности хранить свой
собственный IP адрес), а также позволяет клиентам узнавать другие
параметры загрузки (например, имя программы, загружаемой затем с помощью
TFTP) и использует UDP в качестве протокола канального
уровня. Это позволяет использовать маршрутизаторы (bootp relay) для
передачи запросов и ответов из одного сегмента локальной сети в другой.
Протокол DHCP (Dynamic Host Configuration Protocol) является надстройкой
над BOOTP (для совместимости с bootp relay) и позволяет серверу выделять IP
адреса клиентам динамически на ограниченный срок.
Порт сервера - UDP/67 (BOOTPS), клиента - UDP/68 (BOOTPC).
Клиент делает широковещательный
(255.255.255.255 - всем в локальной сети, номера которой я не знаю - и ff:ff:ff:ff:ff:ff) запрос
bootrequest (один нефрагментированный пакет): обязательно содержит аппаратный
MAC адрес клиента и может содержать преполагаемый IP-адрес клиента, имя сервера
и обобщенное имя файла для загрузки. Сервер отвечает пакетом bootreply
(обычно unicast, т.к. MAC и IP адреса клиента ему известны):
IP-адрес клиента, обобщенное имя файла замещается на полное имя
файла исходя из конфигурации сервера, типа и адреса клиента и др.
Собственно загрузка файла осуществляется клиентом с помощью протокола
TFTP. Клиент должен быть в
состоянии ответить на ARP запросы,
чтобы мог работать TFTP-сервер.
Формат пакетов (в скобках упомянуты тэги /etc/bootptab и /etc/dhcpd.conf):
- тип пакета: bootrequest или bootreply
- тип оборудования (ethernet 10 Mbit = 1, ht, hardware ethernet)
- длина MAC адреса (6)
- число пройденных посредников, каждый посредник добавляет 1 (не более 16)
- номер транзакции (0 или случайное число, позволяет клиенту
отличить ответ на свой запрос от чужого)
- число секунд после первого bootrequest (позволяет запасному
BOOTP серверу заметить неработоспособность основного)
- требование к серверу отвечать широковещательным пакетом
- IP адрес клиента, предполагаемый самим клиентом ciaddr (должен уметь отвечать на запросы ARP) или 0.0.0.0
- IP адрес клиента, возвращаемый сервером yiaddr (ip, fixed-address)
- IP адрес следующего сервера (сервера файла конфигурации) siaddr (сюда же будет направлен TFTP запрос, sa, next-server)
- IP адрес первого посредника giaddr (это не обязательно маршрутизатор!), сервер определяет по giaddr сетевой сегмент, к которому подключён клиент;
сервер посылает ответ по этому адресу
- MAC адрес клиента (ha), зарезервировано 16 байт
- имя сервера файла конфигурации (64 байта, sname), заполняется сервером
- имя загрузочного файла (128 байт, filename), заполняется сервером
- дополнительная информация (vendor-specific или options, 64 байта для
BOOTP, переменная длина для DHCP (до 312 байт?))
Формат дополнительной информации (RFC 2132, опции): первые 4 байта
имеют значение 99.130.83.99, что позволяет определить ее наличие
(может быть использовано другое согласованное значение, определяющее собственный формат этого поля).
Далее расположен список элементов (имена и тексты в NVT ASCII).
Каждый элемент имеет однобайтовую этикетку, описывающую его тип.
Типы 0 и 255 состоят только из этикетки (0 - заполнитель, 255 - конец данных).
Остальные типы элементов вторым байтом имеют длину элемента.
Если для опции требуется более 255 байт, то можно использовать несколько раз - порядок конкатенации определяется RFC-3396.
Стандартизованные типы (в скобках упомянуты тэги /etc/bootptab и опции /etc/dhcpd.conf):
- маска подсети (sm, subnet-mask)
- смещение времени относительно UTC (в секундах, time-offset; предпочтительно указание часового пояса TZ - опции 100 и 101)
- список IP адресов маршрутизаторов (первый - предпочтительный, gw, routers)
- список IP адресов серверов времени (RFC 868, не NTP!; time-servers)
- список IP адресов серверов имен (IEN 116, не DNS!) (ien116-name-servers)
- список IP адресов DNS серверов (domain-name-servers)
- список IP адресов серверов syslog (lg, log-servers)
- список IP адресов серверов "Quote of the Day" (RFC 865)
- список IP адресов серверов печати (LPR/LPD, RFC 1179, lpr-servers)
- список IP адресов серверов Imagen Impress (impress-servers)
- список IP адресов серверов поиска ресурсов (RLP, RFC 887)
- доменное имя хоста клиента, возможно (обязательно?) только локальная часть (hn, host-name)
- число блоков в загрузочном файле (по 512 байт, до 64k, bs, boot-size)
- имя сервера и имя файла для coredump (Merit)
- имя домена клиента (domain-name)
- IP адрес swap сервера (swap-server)
- путь монтирования диска root
- имя файла (берется затем клиентом с помощью TFTP) с продолжением дополнительной информации (extensions-path)
- должен ли клиент передавать пакеты с интерфейса на интерфейс, т.е. работать маршрутизатором (forwarding, ip-forwarding)
- разрешать ли source routing чужих IP пакетов (non-local-source-routing)
- фильтры для source routing (policy-filter)
- максимальный размер датаграммы для сборки клиентом (не менее 576) (max-dgram-reassembly)
- TTL для исходящих от клиента датаграмм (default-ip-ttl)
- время ожидания для алгоритма автораскрытия MTU (RFC 1191, path-mtu-aging-timeout)
- таблица значений MTU для алгоритма автораскрытия MTU (RFC 1191)
- MTU интерфейса (не менее 68, interface-mtu)
- все ли локально подключенные подсети имеют одинаковый MTU (all-subnets-local)
- широковещательный IP адрес локальной подсети (broadcast-address)
- использовать ли ICMP для автораскрытия маски подсети (perform-mask-discovery)
- отвечать ли на ICMP запросы автораскрытия маски подсети (mask-supplier)
- использовать ли механизм поиска маршрутизаторов (RFC 1256, router-discovery)
- IP адрес сервера механизма поиска маршрутизаторов (RFC 1256, router-solicitation-address)
- список статических маршрутов в виде списка пар: сеть (нельзя задавать 0.0.0.0), адрес маршрутизатора
(без маски, т.к. это классовая маршрутизация, для нормальной смотри опцию 121; static-routes)
- согласовать ли использование "хвостов" в канальных кадрах (RFC 893, trailer-encapsulation)
- время жизни элементов ARP кеша (секунд, arp-cache-timeout)
- версия Ethernet: version 2 (RFC 894) или IEEE 802.3 (RFC 1042) (ieee802-3-encapsulation)
- TTL для исходящих от клиента TCP пакетов (default-tcp-ttl)
- интервал посылки сообщений TCP keepalive (tcp-keepalive-interval)
- посылать ли TCP keepalive c мусором для совместимости со старыми реализациями (tcp-keepalive-garbage)
- имя домена NIS (nis-domain)
- список IP адресов серверов NIS (nis-servers)
- список IP адресов серверов NTP (ntp-servers)
- информация в формате изготовителя оборудования (например, PXE), формат определяется опцией 60 (vendor class)
- список адресов серверов имен NetBIOS over TCP/IP (RFC 1001, RFC 1002, netbios-name-servers)
- список адресов серверов NBDD NetBIOS over TCP/IP (RFC 1001, RFC 1002, netbios-dd-server)
- тип узла NetBIOS over TCP/IP (RFC 1001, RFC 1002, netbios-node-type)
- область NetBIOS over TCP/IP (RFC 1001, RFC 1002, netbios-scope)
- список IP адресов серверов шрифтов X Window System (font-servers)
- список IP адресов менеджеров дисплея (xdm) X Window System (x-display-manager)
- требуемый клиенту IP адрес (DHCPDISCOVER) (dhcp-requested-address )
- запрашиваемое (DHCPDISCOVER, DHCPREQUEST) или предоставленное
(DHCPOFFER) время аренды IP адреса в секундах относительно момента запроса (dhcp-lease-time)
- использовать ли поля имени сервера и имени загрузочного файла для передачи
дополнительных опций (DHCP, dhcp-option-overload)
- тип сообщения DHCP (см. описание протокола; dhcp-message-type)
- DHCPDISCOVER
- DHCPOFFER
- DHCPREQUEST
- DHCPDECLINE
- DHCPACK
- DHCPNAK
- DHCPRELEASE
- DHCPINFORM
- DHCPFORCERENEW - сервер переводит клиента в состояние RENEW (RFC-3203, RFC-6704)
- DHCPLEASEQUERY - запрос информации от сервера (RFC-4388)
- DHCPLEASEUNASSIGNED - запрос информации от сервера (RFC-4388)
- DHCPLEASEUNKNOWN - запрос информации от сервера (RFC-4388)
- DHCPLEASEACTIVE - запрос информации от сервера (RFC-4388)
- DHCPBULKLEASEQUERY - запрос информации от сервера (RFC-6926)
- DHCPLEASEQUERYDONE - запрос информации от сервера (RFC-6926)
- DHCPACTIVELEASEQUERY - запрос информации от сервера (RFC-7724)
- DHCPLEASEQUERYSTATUS - запрос информации от сервера (RFC-7724)
- DHCPTLS - запрос информации от сервера (RFC-7724)
- идентификатор сервера DHCP (IP адрес), указывается сервером в DHCPOFFER,
чтобы клиент мог различить предложения от различных серверов (возможно
также указание в DHCPACK и DHCPNAK); указывается клиентом в DHCPREQUEST,
чтобы показать, какое предложение он принял (dhcp-server-identifier)
- список кодов опций, значения которых клиент хочет узнать от сервера (dhcp-parameter-request-list)
- текст сообщения об ошибке (DHCPNAK, DHCPDECLINE) (dhcp-message)
- максимальный размер сообщения DHCP, которое клиент готов принять (DHCPDISCOVER, DHCPREQUEST) (dhcp-max-message-size)
- T1 - интервал времени (в секундах), через который клиент DHCP должен
перейти в режим запроса подтверждения на право владения IP адресом
(RENEWING), по умолчанию - 0.5 от срока аренды (dhcp-renewal-time)
- T2 - интервал времени (в секундах), через который клиент DHCP должен
перейти в режим получения нового IP адреса (REBINDING),
по умолчанию - 0.875 от срока аренды (dhcp-rebinding-time)
- используется DHCP клиентом для указания варианта конфигурации
(vendor class), сервер возвращает информацию только в формате
изготовителя оборудования (например, PXEClient в PXE) опция 43
- уникальный в подсети идентификатор клиента DHCP (например, MAC адрес
или полное доменное имя), в протоколе BOOTP для идентификации
клиента использовался его MAC адрес, UUID в PXE; dhcp-client-identifier)
- имя домена NIS+ (nisplus-domain)
- список IP адресов серверов NIS+ (nisplus-servers)
- имя TFTP сервера, если поле имени сервера использовано под дополнительные опции (DHCP)
- имя загрузочного файла, если поле имени загрузочного файла использовано под дополнительные опции (DHCP; bootfile-name)
- список IP адресов Mobile IP Home Agent
- список IP адресов серверов SMTP (smtp-server)
- список IP адресов серверов POP3 (pop-server)
- список IP адресов серверов NNTP (nntp-server)
- список IP адресов серверов WWW (www-server)
- список IP адресов серверов finger (finger-server)
- список IP адресов серверов IRC (irc-server)
- список IP адресов серверов StreetTalk
- список IP адресов серверов StreetTalk Directory Assistance
- cписок типов пользователя (user class, задаётся клиентом для выбора сервером одной из конфигураций параметров) - RFC-3004
- FQDN имя сообщаемое клиентом и кто отвечает за обновление DNS записей A и PTR, сервер отвечает флагами (DDNS, RFC-4702 - PTR всегда обновляется сервером)
- Option 82: информация о клиенте вставляетсся посредником (relay agent) при перехвате широковещательных запросов, если giaddr равен 0 - RFC-3046
(основная причина - мы не доверяем клиенту, а нижнему посреднику? а если при вставке будет превышен MTU? IPSEC?),
сервер в ответе посреднику возвращает её,
посредник вырезает её перед пересылкой ответа клиенту; содержит от 1 до 255 подопций:
- Circuit ID - интерфейс, порт или канал, к которому подключён клиент (agent.circuit-id)
- Remote ID - уникальный идентификатор клиента (agent.remote-id)
- Link Selection (RFC-3527) - IP адрес подсети клиента,
позволяет разделить giaddr на адрес обращения к посреднику и адрес сети клиента (для случая без посредника см. опция 118) (agent.link-selection)
- Subscriber-ID (RFC-3993) - идентифицирует подписчика (в чём отличие от клиента?) независимо от физического подключения
- RADIUS (RFC-4014) - позволяет передать аттрибуты, полученные посредником от RADIUS сервера -
User-Name, Service-Type, Vendor-Specific, Session-Timeout, Framed-Pool, Framed-IPv6-Pool
- аутентификация информации посредника (RFC-4030) - дополнение к средствам аутентификации клиента (RFC-3118)
- информация изготовителя (RFC-4243) - централизованные IANA идентификаторы предприятия и привязанные к ним значения
- флаги посредника (RFC-5010) - позволяет посреднику сообщить серверу был ли запрос от клиента широковещательным
- переопределение идентификатора сервера (RFC-5107) - позволяет посреднику сообщить серверу значение поля опции 54 (Server Identifier) для вставки в его ответ,
чтобы клиент посылал последующие нешироковещательные сообщения также через посредника
- идентификатор агента (RFC-6925) - позволяет посреднику указать свой уникальный для административного домена идентификатор (Relay-ID)
- исходящий порт посредника (RFC-8357) - позволяет указать следующему в цепочке, что ответ надо посылать на используемый в пакете порт
- DHCPv4/DHCPv6 Virtual Subnet Selection (VPN) (RFC-3046 и RFC-6607)
- VSS Control (RFC-3046 и RFC-6607)
- список IP адресов серверов iSNS (Internet Storage Name Service) - iSCSI и iFCP - RFC-4174
- аутентификация (общий секрет, HMAC-MD5, RFC-3118)
- системная архитектура клиента PXE (RFC-4578, pxe-system-type)
- версия универсального сетевого интерфейса PXE (UNDI) (RFC-4578, pxe-interface-id?)
- LDAP (резервирован в RFC-3679, но не описан)
- универсальный идентификатор клиента PXE (UUID) (RFC-4578, pxe-client-id)
- PCode (описание часового пояса по IEEE 1003.1, например "EST5EDT4,M3.2.0/02:00,M11.1.0/02:00", RFC-4833, pcode)
- TCode (описание часового пояса по базе TZ, например, "Europe/Moscow", RFC-4833, tcode)
- запрет автоконфигурации клиента (RFC-2563)
- приоритет типов сервисов имён (DNS, NIS, NetBIOS, NIS+, локальный /etc/hosts) - RFC-2937
- выбор клиентом (вероятно посредником, требуется giaddr) желаемой подсети указанием IP адреса подсети - RFC-3011 (subnet-selection)
- список поиска доменов DNS (search в /etc/resolv.conf) - RFC-3397 (domain-search)
- статические маршруты (в отличие от опции 33 для бесклассовой маршрутизации) в виде пар цель
(адрес подсети и ширина маски), IP адрес маршрутизатора (0.0.0.0 для сети на том же линке) - RFC-3442
- Vendor Class в формате, позволяющем несколько независимых поставщиков, что не позволяет опция 43 и 60 - RFC-3925
- информация в формате поставщика в формате, позволяющем несколько независимых поставщиков, что не позволяет опция 43 и 61 - RFC-3925
- PXE в формате поставщика, формат и содержание определяется используемым NBP (RFC-4578),
пересекается с Etherboot signature, сервером авторизации DOCSIS и TFTP сервер для IP Phone
- PXE в формате поставщика, формат и содержание определяется используемым NBP (RFC-4578),
пересекается, формат и содержание определяется используемым NBP с опции ядра, IP адрес сервера звонков
- PXE в формате поставщика, формат и содержание определяется используемым NBP (RFC-4578),
пересекается с ?
- PXE в формате поставщика, формат и содержание определяется используемым NBP (RFC-4578),
пересекается с удалённый сервер статистики
- PXE в формате поставщика, формат и содержание определяется используемым NBP (RFC-4578),
пересекается, формат и содержание определяется используемым NBP с IEEE 802.1Q VLAN ID
- PXE в формате поставщика (RFC-4578),
пересекается, формат и содержание определяется используемым NBP с IEEE 802.1D/p Layer 2 Priority
- PXE в формате поставщика (RFC-4578),
пересекается, формат и содержание определяется используемым NBP с Diffserv Code Point (DSCP)
- PXE в формате поставщика, формат и содержание определяется используемым NBP (RFC-4578),
пересекается с HTTP прокси для телефонии
- настройки агента Session Initiation Protocol (SIP) - RFC-6011
- настройки SZTP (Secure Zero Touch Provisioning (SZTP) - настройка пришедшего с фабрики сетевого устройства - RFC-8572
- инициализация аутентификации для последуюещего FORCERENEW
- выбор сервера DNS для узлов с несколькими интерфейсами (RDNSS Selection),
позволяет задать приоритет, уровень доверия и обслуживаемые домены и сети для первичного и запасного сервера DNS - RFC-6731;
каждый интерфейс получает свой набор от своего DHCP сервера
- аналог опции 66 но без использования DNS и sname но позволяет несколько IP - адрес сервера TFTP - RFC-5859 (tftp-server-address);
пересекается с Etherboot и имя файла с настройками GRUB; ранее назывался VoIP Configuration Server Address
- -157 массовый запрос информации о лизинге (RFC-6926)
- IP адреса серверов Port Control Protocol (PCP) (RFC-7291)
- выделение клиентам разделяемых IP адресов - 1 адрес на всех, каждый клиент обслуживает свой набор портов(RFC-7618)
- Manufacturer Usage Description (MUD) позволяет клиену сообщить о типе доступа и требуемой сетевой функциональности - настройка прав доступа,
опции DHCP позволяют передавать URL (HTTP/HTTPS), по URL находится описание в формате модулей YANG (JSON),
дополнительно описывается LLDP и расширение сертификата X.509 (RFC-8520, IoT)
- Etherboot - не оформлено
- IP телефония - не оформлено
- Etherboot, пересекается с PacketCable и CableHome - не оформлено
- RFC 5071 - PXE - pxelinux.magic (F1:00:74:7E) (RFC-4578)
- RFC 5071 - PXE - имя файла конфигурации pxelinux.configfile (RFC-4578) (loader-configfile)
- RFC 5071 - PXE - префикс файла pxelinux.pathprefix (RFC-4578) (loader-pathprefix)
- RFC 5071 - PXE - время перезагрузки в секундах pxelinux.reboottime (RFC-4578) (loader-reboottime)
- IPv6 Rapid Deployment on IPv4 Infrastructures (RFC-5969)
- метод поиска Local Location Information Server (LIS), выдаётся доменное имя, из которого формируется URI (NAPTR, U-NAPTR, HELD) (RFC-5986)
- позволяет клиенту динамически запросить подсеть, также позволяет организовать иерархию серверов DHCP (RFC-6656)
- информация вставляется посредником (relay) о клиенте; DHCPv4/DHCPv6 Virtual Subnet Selection (VPN) (RFC-6607)
- -254 (ранее с 128 - было много пересечений, потом с 192) - 254: зарезервированы для локального использования (RFC-3942)
(Tномер, option option-номер)
Средств обеспечения безопасности нет, в ответ клиент
может получить фальшивый пакет, а сервер DDoS на исчерпание пространства IP адресов.
Поэтому на периферии сети порты UDP/67 и UDP/68 (а лучше все ненужные пакеты)
должны быть заблокированы сетевым экраном,
а на сервере BOOTP должны быть проделаны дырки для входящих пакетов в
ipchains или iptables (привожу формат /etc/sysconfig/{ipchains,iptables}):
-A input -s 0.0.0.0/0.0.0.0 68:68 -d 0.0.0.0/0.0.0.0 67:67 -p udp -j ACCEPT
-A INPUT -i имя-интерфейса -m state --state NEW -p udp --sport 68 --dport 67 -j ACCEPT
Аналогичные дырки надо проделать для исходящих пакетов
сервера и пакетов, пересылаемых DHCP посредником.
Если в ядре включена фильтрация поддельных IP-адресов (martian address filtering),
то на DHCP сервере её придется отключить (по крайней мере для адресов 0.0.0.0 и 255.255.255.255),
а также, возможно, отключить запись в журнал (0 в /proc/sys/net/ipv4/conf/*/log_martians).
Экран можно усилить, заменив "универсальные"
0.0.0.0/0.0.0.0 на адреса ваших клиентов/сервера, но учитывайте, что
исходящими IP адресами клиентов могут быть также 0.0.0.0,
а входным - 255.255.255.255.
Протокол DHCP использует тот же самый формат пакетов и те же
UDP порты для обмена сообщениями между серверами и клиентами. Это позволяет
DHCP серверу обслуживать BOOTP клиентов и использовать исторически
сложившуюся инфраструктуру BOOTP посредников. DHCP не определяет политику
назначения IP адресов и прочих параметров, а лишь обеспечивает механизм
её реализации. Адрес может выделяться на ограниченный срок (выражается
в секундах относительно момента запроса) или навсегда.
DHCP позволяет свести настройку сетевых параметров клиентов
к минимуму. В сети может быть установлено несколько серверов. Сервер
должен хранить выделенные параметры при перезагрузках клиентов и сервера,
чтобы по возможности выделять один и тот же адрес. При запросах клиент
может идентифицироваться не только своим MAC адресом, но и специальной
опцией "уникальный идентификатор клиента" (UUID или GUID). Аналогично сервер указывает
свой IP адрес в опции "идентификатор сервера". Пакеты от клиента DHCP
(тип bootrequest) могут быть следующих видов (задаётся опцией
"тип сообщения DHCP"):
- DHCPDISCOVER (1) - широковещательный запрос клиента при первоначальном
поиске сервера, может содержать желаемый для получения IP адрес
и время аренды
- DHCPREQUEST (3) - широковещательный (т.к. серверов м.б. много) ответ на DHCPOFFER (должен содержать
идентификатор сервера, чтобы остальные сервера знали), либо запрос на возобновление аренды
адреса после перезагрузки клиента или истечения предыдущего интервала
аренды (тоже широковещательный, кроме случая возобновления аренды до истечения T1);
клиент может выбирать из нескольких предложений DHCPOFFER;
может включать список требуемых параметров
- DHCPDECLINE (4) - ответ на DHCPOFFER с отказом принять адрес (например,
клиент выяснил с помощью ARP или ICMP, что адрес занят);
клиент начинает всё с начала
- DHCPRELEASE (7) - освобождение адреса
- DHCPINFORM (8) - клиент получил адрес с помощью другого механизма
и нуждается только в прочих параметрах
Ответные пакеты от сервера DHCP
(тип bootreply) могут быть следующих видов (задаётся опцией
"тип сообщения DHCP"):
- DHCPOFFER (2) - ответ на DHCPDISCOVER, поле yiaddr содержит
предлагаемый адрес (он пока не зарезервирован!)
- DHCPACK (5) - согласие на выделение адреса по DHCPREQUEST или DHCPINFORM
(в этом случае сервер не проверяет допустимость адреса);
клиент может пользоваться им оговоренное время
- DHCPNAK (6) - отказ на выделение адреса по DHCPREQUEST (например,
в промежутке между DHCPOFFER и DHCPREQUEST адрес был выделен другому);
клиент начинает всё с начала
В протоколе предусмотрена возможность перевода клиента в
режим обновления IP адреса (DHCPFORCERENEW) и опроса БД сервера DHCP о выданных адресах (DHCPLEASE*, DHCPBULKLEASEQUERY,
DHCPLEASEQUERYDONE, DHCPACTIVELEASEQUERY, DHCPLEASEQUERYSTATUS, DHCPTLS).
Посредник (dhcp relay) получив широковещательный запрос DHCPDISCOVER передаёт его серверу
(или следующему посреднику в цепочке) не меняя, кроме заполнения поля giaddr (только первый в цепочке) и вставки опции 82.
В giaddr вставляется адрес интерфейса, получившего запрос от клиента. В TTL записывается 255 (?).
Агент проверяет лимит шагов (hop) и увеличивает счётчик шагов на 1.
При общении с сервером агент не использует широковещательную передачу.
Ответ сервера передаётся клиенту.
Агент использует giaddr для выбора интерфейса при пересылке ответа сервера клиенту.
Широковещательность ответа определяется флагом в сообщении.
dhcping - средство тестирования сервера DHCP (рекомендуется осторожность!).
dhtest - эмулятор множества клиентов для тестирования DHCP сервера.
Пакет bootp-2.4.3-7.i386.rpm (Red Hat Linux 5.2).
Содержит программы bootpd и bootptest. Конфигурационный файл - /etc/bootptab
(см. bootptab(8)):
printer0:\
:ht=ether:ha=ethernet-адрес:\
:hn:vm=rfc1048:sm=маска-сети:ip=адрес-принтера:\
:lg=адрес-syslog-сервера:\
:sa=адрес-TFTP-сервера:\
:T144="имя-TFTP-файла-с-параметрами-принтера":
Устанавливался и на более поздние версии Red Hat Linux, только надо
создать файл /etc/xinetd.d (не забыть презапустить xinetd: "/etc/rc.d/init.d/xinetd reload")
service bootps
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/bootpd
server_args = -i -d4 -t 1 /etc/bootptab
disable = no
}
Сервер bootpd от HP в комплекте программ для JetDirect.
Тестовая программа bootpquery делает запрос и выводит ответ BOOTP сервера.
В качестве параметров можно указать MAC адрес клиента (если не совпадает
с настоящим, то сервер д.б. возвращать широковещательный ответ) и имя
сервера (ключ -s).
Конфигурационный файл - /etc/bootptab
(см. bootptab(8)):
printer0:\
:ht=ether:ha=ethernet-адрес:\
:hn:vm=rfc1048:sm=маска-сети:ip=адрес-принтера:\
:lg=адрес-syslog-сервера:\
:sa=адрес-TFTP-сервера:\
:T144="имя-TFTP-файла-с-параметров-принтера":
rpc.bootparamd в Solaris
использует данные из /etc/bootparams, реализует специфическую для Sun
RPC версию сервера, обеспечивающего дополнительные параметры для загрузки.
Скрипт /etc/init.d/nfs.server (AKA /etc/rc3.d/S15nfs.server) запускает
"/usr/sbin/rpc.bootparamd", если существует директория /tftproot.
Если у вас нет бездисковых станций Sun, то он вам не нужен.
Сервер bootparamd в Red Hat Linux
поставляется в виде пакета bootparamd-0.17-7 (RH 7.2) и реализует
ту же самую специфическую для Sun
RPC версию сервера, обеспечивающего дополнительные параметры для загрузки.
Столкнулся с забавной "плюшкой" firmware JetDirect:
все IP-адреса в списке дополнительных элементов должны быть выровнены
на границу слова, поэтому строки переменной длины (имена хостов и файлов)
должны быть в конце списка, либо иметь четную длину. bootpd из
поставки JetDirect знает об этом, а для dhcpd и стандартного bootpd
пришлось менять имена хостов.
Пакет dhcp-2.0pl5-8 (RH 7.2) или dhcp-3.0pl1-15 (RH 8.0)
или dhcp-3.0.1-11 (FC3) или dhcp-3.0.5-33.el5_9 (CentOS5.11) или dhcp-4.1.1-63.P1.el6.centos (CentOS 6.10)
или dhcp-4.2.5-83 (CentOS 7.9) или dhcp-server-4.3.6-49.el8 (RockyLinux 8.8) или dhcp-server-4.4.2-18.b1.el9 (RockyLinux 9.2)
содержит BOOTP/DHCP сервер dhcpd и посредник dhcrelay от ISC
(имеются также пакеты dhclient и dhcp-devel - dhcp-common, dhcp-libs, dhcpd-pools).
Поддерживается работа DHCP клиента, сервера и посредника.
Обеспечивается динамическое изменение DNS.
Перед выдачей динамического адреса клиенту
запись об этом заносится в конец специального файла (dhcpd.leases(5),
/var/lib/dhcp/dhcpd.leases) для страховки, т.е. правильным является последнее значение.
Чтобы размер файла не вырос до бесконечности время от времени создаётся новый файл, старый переименовывается в dhcpd.leases~.
Файл содержит записи аренды, объявления хостов, групп и
подгрупп в формате dhcpd.conf
(объявления хостов, групп и подгрупп для объектов, динамически созданных
с помощью OMAPI, см. ниже). Каждая запись аренды содержит выделенный
IP-адрес, время начала и конца аренды в человеколюбивом формате (но в UTC),
тип оборудования и MAC адрес, идентификатор клиента, host-name, abandoned
(адрес нельзя было выдавать), текущее и следующее состояния аренды,
agent.circuit-id и agent.remote-id (см. описание опций).
В версии 3.0 убрана поддержка неизвестных серверу опций в виде "option-144",
теперь их необходимо описывать явно.
Журнал записывается на syslog, источник - DAEMON.
Процедура запуска для init.d в файле /etc/rc.d/init.d/dhcpd
(start, stop, restart, status). Параметры командной строки хранятся в файле
/etc/sysconfig/dhcpd. Для обеспечения запуска при загрузке надо выполнить
chkconfig --level 2345 dhcpd on
Процедура запуска для systemctl описывается сервисами dhcpd, dhcpd6 и dhcrelay (выключены по умолчанию).
Добавляются группа и пользователь dhcpd (/, /sbin/nologin), запуск производится от имени пользователя dhcpd.
Файл /etc/sysconfig/dhcpd содержит инструкцию как поменять ключи запуска ("-f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid").
Скрипт /etc/NetworkManager/dispatcher.d/12-dhcpd обеспечивает перезапуск сервиса при включении интерфейса.
dhcpd требует сети и синхронизации времени (фальшивый сервис /usr/lib/systemd/system/time-sync.target - см. systemd.special(7)).
После запуска номер процесса сохраняется в файле/var/run/dhcpd.pid (--no-pid?).
После изменения конфигурационного файла /etc/dhcpd.conf (/etc/dhcp/dhcpd.conf или /etc/dhcp/dhcpd6.conf)
(описание - dhcpd.conf(5), dhcp-options(5), dhcp-eval(5) удалён) необходимо перезапустить сервер.
Каталог /etc/dhcp/scripts содержит скрипты, которые запускаются от имени dhcpd
(/etc/dhcp/scripts/README.scripts содержит инструкцию по настройке прав доступа).
Файл /etc/openldap/schema/dhcp.schema содержит схему LDAP (?).
Параметры запуска /usr/sbin/dhcpd (DHCPv4 и DHCPv6 взаимоисключающие):
- -4 (по умолчанию, запустить сервер DHCPv4)
- -6 (запустить сервер DHCPv6)
- −4o6 UDP-порт (DHCPv4 поверх DHCPv6, RFC-7341, для обмена между серверами используется ::1)
- -p UDP-порт (по умолчанию - 67, клиентский порт принимается на 1 больше)
- -s IPv4-адрес (посылать туда ответы вместо 255.255.255.255)
- -f (не уходить в фоновый режим)
- -d (посылать сообщения на stderr вместо syslog
- -q (не выводить copyright при запуске)
- -t (только проверка синтаксиса конфигурационного файла)
- -T (только проверка синтаксиса хранилища выданных адресов)
- -user имя-пользователя (после инициализации и привилегированных операций поменять пользователя,
права доступа к файлу выданных адресов должны быть для этого пользователя)
- -group имя-группы (после инициализации и привилегированных операций поменять группу,
права доступа к файлу выданных адресов должны быть для этой группы)
- -chroot каталог (если собран с ключом --enable-early-chroot, то chroot до чтения файла конфигурации)
- -tf имя-файла (записывать все транзакции в файл)
- -play имя-файла (проиграть все транзакции из файла, не забудьте поменять файл арендованных адресов)
- -cf имя-конфигурационного-файла (/etc/dhcpd.conf или /etc/dhcp/dhcpd.conf или /etc/dhcp/dhcpd6.conf)
- -lf имя-хранилища-выданных-адресов (/var/lib/dhcp/dhcpd.leases)
- --version
- -pf имя-файла (файл с номером процесса)
- --no-pid (при этом не проверяется наличие уже запущенного сервера)
- список обслуживаемых интерфейсов
(по умолчанию все активные широковещательные интерфейсы; всегда слушает все интерфейсы)
Протокол OMAPI позволяет подсоединяться к серверу
по TCP/7911 (с аутентификацией, TSIG, криптографическая подпись с использованием разделяемого секрета),
чтобы проверить его состояние или изменить конфигурацию или содержимое БД (просмотр, создание, удаление,
просмотр и изменение атрибутов для объектов типа аренда, хост, группа,
управление). Имеется командная оболочка omshell(1).
Пример генерации ключа: "dnssec-keygen -a HMAC-SHA256 -T KEY -b 256 -n HOST omapi_key" ("dnssec-keygen -a HMAC-MD5 -b 512 -n HOST omapi")
(выводит префикс имён файлов приватного - имя.private - и публичного - имя.key - ключей?).
Вставить его в dhcpd.conf (ограничить права доступа!):
omapi-port 7911;
key omapi {
# algorithm HMAC-SHA256; не заработал
algorithm HMAC-MD5;
secret "содержимое приватного ключа";
};
omapi-key omapi;
Для использования OMAPI необходимо создать локальный объект нужного типа,
заполнить некоторые поля и совместить локальный объект с удалённым.
Для объекта аренды ищет только по IP адресу и только из пула.
Например, чтение состояния аренды:
omshell
# server localhost
# port 7911
# key-algorithm { HMAC-MD5 | HMAC-SHA1 | HMAC-SHA224 | HMAC-SHA256 | HMAC-SHA384 | HMAC-SHA512 }
key omapi "содержимое-приватного-ключа"
connect
new lease # создать локальный объект
set ip-address = адрес # частично заполнить
open # совместить с удалённым
refresh
close # нет в документации
Типы объектов:
- аренда (lease)
- состояние (state):
- 1 = free
- 2 = active
- 3 = expired
- 4 = released
- 5 = abandoned
- 6 = reset
- 7 = backup
- 8 = reserved
- 9 = bootp
- IP адрес (ip-adress)
- идентификатор клиента (dhcp-client-identifier)
- посланное клиентом имя хоста (client-hostname)
- ссылка на описание хоста в конфигурации (host)
- ссылка на описание подсети (subnet), не реализовано
- ссылка на описание пула (pool), не реализовано
- ссылка на описание класса (billing-class), не реализовано
- MAC адрес клиента chaddr (hardware-address)
- тип оборудования клиента (hardware-type)
- время перехода клиента из текущего состояния с точки зрения клиента (ends)
- время перехода клиента из текущего состояния с точки зрения сервера (tstp)
- время перехода клиента из текущего состояния с точки зрения резервного сервера (tsfp)
- время перехода клиента из текущего состояния с точки зрения резервного сервера настоящее (atsfp)
- время последнего общения с клиентом (cltt)
- хост (host)
- имя описания (name)
- ссылка на описание группы (group)
- MAC адрес для опознания клиента (hardware-address)
- тип оборудования для опознания клиента (hardware-type)
- идентификатор клиента для сличения (dhcp-client-identifier)
- фиксированный IP адрес для выдачи клиенту (ip-address), а если в конфигурации их определено несколько?
- операции, выполняемые при получении сообщения от клиента (statements)
- считать ли клиента известным при опознании (known)
- группа (group)
- имя описания (name)
- операции, выполняемые при получении сообщения от клиента (statements)
- управляющий объект
- состояние резервирования
Развитие и поддержка сервера ISC DHCP прекращены в 2022 году на версии 4.4.3 в пользу их нового сервера Kea.
При этом в RHEL8 остаётся ISC DHCP версии 4.3.6, а в RHEL9 - версии 4.4.2, а Kea отсутствует.
dhcpd-pools - анализ использования пулов адресов от ISC.
dhcpcd - минимальный сервер DHCP и rdisc.
Отличия версий
- от 3.0.5 (CentOS 5) до 4.1.1 (CentOS 6)
- поддержка лизинга типа reserved
- site-local начинается с 224 вместо 128 (RFC3942), проблемы со старыми конфигурациями
- выражения lcase() и ucase()
- reject воспринимает интервалы адресов в формате CIDR
- db-time-format local; (локальное время вместо UTC)
- ребалансировка пулов адресов, min-balance и max-balance
- RFC3527 - DHCP Relay Agent Information Option / Link Selection
- update-conflict-detection для DDNS
- IP TTL увеличен с 16 до 128
- опция domain search (119)
- RFC4388 - протокол LEASEQUERY позволяет извлечь из сервера информацию о лизинге клиента
- выражение execute() позволяет вызвать внешнюю программу с параметрами
- опция adaptive-lease-time-threshold (в процентах)
- пространство внутри пространства
- fqdn-reply on
- do-reverse-updates on (DDNS)
- DHCPv6 по умолчанию, ключи -4 и -6 (не одновременно), включая DDNS (AAAA, PTR); range6;
--disable-dhcpv6; отдельные файлы для PID и лизинга; dhcrelay6 и dhcrelay -6; subnet6 {}; fixed-address6; ERO (RFC 4994)
- операторы ~= и ~~
- dhclient -x (выйти без освобождения)
- все программы делают "cd /" перед демонизацией
- по умолчанию "ddns-update-style none"
- allow|deny after time
- "limit-addrs-per-ia 1" - ограничение на количество назначаемых IP адресов для клиента
- delayed-ack 28 (максимум событий между синхронизацией БД лизинга); max-ack-delay 0.25
- dhclient anycast MAC
- dhclient -D тип-DUID
- dhclient может устанавливать MTU и метрику
- auto-partner-down off
- выражение gethostname()
- опции dhcp-renewal-time и dhcp-rebinding-time
- от 4.1.1 (CentOS 6) до 4.2.5 (CentOS 7)
- везде --no-pid
- dhclient: initial-delay 0
- dhclient передаёт скрипту полученные от сервера значения в переменных окружения requested_<option_name>=1
- ignore-client-uid
- опции ddns-local-address4 и ddns-local-address6
- возможность не выдавать fsync() при записи в журнал
- от 4.2.5 (CentOS 7) до 4.3.6 (Rocky Linux 8)
- dhclient -df (дополнительная база лизинга)
- опции log-threshold-low и log-threshold-high
- настройки конфигурации: echo-client-id (возвращать идентификатор клиента),
use-host-decl-names (bootp), server-id-check (резервного сервера)
- глобальная опция prefix-length-mode (DHCPv6): ignore, prefer, exact, minimum и maximum
- выражение parse_vendor_options (из vendor-encapsualted-option используя описание vendor-option-space)
- dhcrelay -U интерфейс
- опция dhcpv6-set-tee-times
- ключ сборки --enable-dhcpv4o6; ключ запуска "-4o6 порт"
- опция lease-id-format: octal, hex
- abandon-lease-time 84600 (адрес считается брошенным, проверяется ping-ом, если разрешено)
- dhcrelay -iu интерфейс-верхнего -id интерфейс-нижнего
- ключ сборки --with-srv-conf-file
- dhclient --dad-wait-time секунд (время ожидания проверки дубля адреса)
- ключи сборки --enable-bind-install, --with-bind-extra-config, --enable-libtool
- "load balance max secs 0" - оба сервера будут отвечать на запросы
- dhclient --prefix-len-hint длина
- dhclient --decline-wait-time секунд (длительность паузы после отрицательного ответа от сервера)
- опция "check-secs-byte-order off" - сервер проверяет порядок байт в слове по полю времени и преобразует
значения соответственно
- опция prefix-length-mode поменяла умолчание с exact на prefer
- опции DDNS: ddns-dual-stack-mixed-mode, ddns-guard-id-must-match, ddns-other-guard-is-dynamic
- omshell: key-algorithm {hmac-md5 | hmac-sha1 | hmac-sha224 | hmac-sha256 | hmac-sha384 | hmac-sha512}
- опция "persist-eui-64-leases true" (записывать лизинг EUI-64 в файл)
- dhclient --address-prefix-len длина (передаётся в скрипт)
- от 4.3.6 (Rocky Linux 8) до 4.4.2 (Rocky Linux 9)
- переменные окружения PATH_DHCPD_D и PATH_DHCPD_PID
- ключ сборки --enable-relay-port и ключ запуска "--rp исходящий-порт"
- ключ dhcpd --release-on-roam (переезд клиента DHCPv6 (IAID+DUID) в другую сеть с сохранением адреса)
- dhcpd -6: update-static-leases off
- dhcpd -6: "local-address6 адрес" и "bind-local-address6 off" (исходящий адрес)
- детектор дублирования адреса для DHCPv6
- обработка кодов 93, 94 и 97 (RFC 4578 - PXE - архитектура клиента, Network Device Interface кдиента, UUID клиента);
кода 150 (RFC 5859 - аналог кода 66 от Cisco - имя файла TFTP или имя файла с конфигурацией GRUB);
кодов 209, 210 и 211 (RFC 5071 - PXE - имя файла конфигурации, префикс файла, время перезагрузки);
заменяет самодельную
- опция "ping-cltt-secs 60"
- опция "ping-timeout-ms 0" определяет ожидание в милисекундах вместо ping-timeout
- из OMAPI удалён MD5
- "dhcrelay -g адрес" позволяет подменить giaddr
- опция v6-only-preferred
- от 4.4.2 (Rocky Linux 9) до 4.4.3
Конфигурационный файл имеет свободный текстовый формат.
Комментарии начинаются со знака '#' и продолжаются до конца строки, но не внутри кавычек.
Регистр ключевых слов значения не имеет. Файл состоит из утверждений двух
типов: параметры и объявления.
Объявления описывают топологию сети и группируют параметры.
Объявления могут быть вложенными.
Параметры и простые объявления завершаются
точкой с запятой. Определяющие вложенную область действия объявления
заключают её в фигурные скобки и не имеют завершающей точки с запятой.
Параметры внутри объявления д.б. описаны до вложенных объявлений.
Для каждой подсети, к которой подключён DHCP сервер,
должно быть объявление подсети subnet (даже если он её не обслуживает).
Если подсети подключены к одному интерфейсу, то объявления этих подсетей
д.б. помещены внутрь объявления shared-network. Кстати, с помощью
посредника (bootp relay) через интерфейс могут быть видны сегменты, не подключённые
непосредственно.
Если адреса клиентам внутри подсети должны выделяться
динамически, то необходимо объявить пул адресов внутри подсети
pool (все пулы на одном интерфейсе - общие, невозможно определить
к какой подсети на разделяемом интерфейсе принадлежит клиент).
При описании интервала адресов (range) вне пула создаётся виртуальный объемлющий пул без параметров.
Для клиентов со статическими адресами необходимо поместить
объявление host внутрь объявления подсети. Если требуется загружать
клиента в различных подсетях, то для него можно описать несколько
объявлений host (если ему необходимо назначить различные параметры в
зависимости от подсети) или несколько параметров fixed-address в одном
объявлении.
Объявления различного типа с одинаковыми параметрами можно группировать внутри объявления group.
Клиенты с динамически выделяемыми адресами могут быть
сгруппированы согласно объявлению классов class
(класс клиента определяется в момент запроса в соответствии
с передаваемыми им опциями - например, идентификатором клиента).
Имеется также грязный хак по распределению клиентов по подклассам
исключительно с целью оптимизации времени работы сервера.
Возможно объявление класса (spawning class), автоматически порождающего
подклассы в зависимости от значения получаемого от клиента параметра.
Имеются условные операторы.
Перед объявлениями самого верхнего уровня могут быть указаны глобальные параметры.
Поиск параметров для клиента происходит в следующей последовательности
(приоритет имеет более конкретная область действия):
- объявление host (по идентификатору клиента или MAC адресу;
сначала просматриваются те, которые содержат фиксированный IP адрес,
подходящий для подсети клиента, затем не содержащие фиксированных
адресов; объявление host глобально даже внутри subnet и shared-network)
- объявление class
- объявление pool (по IP адресу)
- объявление subnet (по IP адресу)
- объявление shared-network (по IP адресу)
Синтаксис:
shared-network "имя" {
[ параметры ]
[ объявления ]
}
subnet IP-адрес-сети netmask маска {
[ параметры ]
[ объявления ]
}
pool {
range [ dynamic-bootp ] начальный-IP-адрес [ конечный-IP-адрес ];
# флаг dynamic-bootp разрешает выделение адреса из пула bootp клиентам
}
host имя-хоста { # имя используется при идентификации клиента, если он посылает dhcp-client-identifier
[ hardware адрес] # используется при идентификации клиента
[ параметры ]
[ объявления ]
}
group {
[ параметры ]
[ объявления ]
}
class "имя-класса" {
[ match ... ]
[ spawn with option имя-опции ]
[ lease limit максимальное-число-клиентов-в-классе ]
[ параметры ]
}
subclass "имя-класса" константа;
subclass "имя-класса" константа {
[ параметры ]
}
if условие {
[ параметры ]
} [ elsif условие {
[ параметры ]
} ]
...
[ else {
[ параметры ]
} ]
log (приоритет, выражение)
Для управления доступом в любой области объявления
могут быть использованы утверждения allow, deny или ignore (аналогично
deny, но без записи сообщения в журнал), указаны значения по умолчанию:
- allow unknown-clients; (выделять ли адреса не упомянутым в объявлениях host клиентам)
- allow bootp; (обслуживать ли запросы BOOTP)
- allow booting; (обслуживать ли запросы клиента; имеет смысл использовать только в host)
- allow duplicates; (рассматривать все запросы с одного MAC адреса
как исходящие от одного клиента даже (выдавать тот же IP), если идентификаторы клиента
не совпадают; полезно, если на одном компьютере установлено несколько ОС;
нарушение стандарта)
- allow declines; (обрабатывать ли сообщения DHCPDECLINE от клиента)
- allow client-updates; (уважать желание клиента самостоятельно менять A запись в DNS)
- deny leasequery; (отвечать на запросы DHCPLEASEQUERY о состоянии аренды)
Для управления выделением адресов из пула внутри
объявления пула могут быть использованы утверждения allow и deny
со следующими параметрами (они обрабатываются до выделения адреса):
- known-clients; (host в любом месте)
- unknown-clients;
- members of "имя-класса";
- dynamic bootp clients; (выделять ли адреса из пула клиентам BOOTP)
- authenticated clients; (не реализовано)
- unauthenticated clients; (не реализовано)
- all clients;
- after время; (время в формате "2007/08/24 11:14:32 -7200")
Параметры (там, где возможно, приведены значения по умолчанию):
- abandon-lease-time 86400; (в секундах; время резервирования конфликтных адресов)
- adaptive-lease-time-threshold процентов; (при заполнении пула выше указанного устанавливать время аренды в min-lease-time)
- always-broadcast off; (посылать ответы в широковещательном режиме даже, если клиент этого не запрашивал)
- always-reply-rfc1048 off; (всегда посылать ответы в формате rfc1048 клиентам BOOTP для задания опций)
- [ not ] authoritative; (по умолчанию сервер считается неуполномоченным - форма "защиты от дурака";
прямые (не широковещательные) запросы обрабатываются несмотря на "not";
если адрес для клиента найден, адрес клиенту разрешён и подходит для подсети подключения клиента, то посылается подтверждение (ACK);
если адрес запрещён или недопустим в этой подсети, то сервер посылает клиенту отказ (NAK),
если адрес не найден, то авторитетный для подсети сервер посылает клиенту отказ (NAK),
неавторитетный для подсети сервер молчит в этом случае (в реальности, текст документации мутен - если адрес не найден, то как удалось определить подсеть?);
сервер не отвечает на DHCPINFORM для сети, в которой он не авторитет
- boot-unknown-clients on; (дополнительно проверяются allow/deny)
- check-secs-byte-order off; (неестественный интеллект может проверить и исправить порядок байт в полях времени)
- db-time-format default; (или local; формат записи времени в файле аренды)
- ddns-update-style none; (как обрабатывать динамическое изменение имён DNS при аренде; none - никак, standard, interim)
- ddns-hostname, ddns-domainname, ddns-dual-stack-mixed-mode, ddns-guard-id-must-match,
ddns-local-address4, ddns-local-address6, ddns-other-guard-is-dynamic, ddns-rev-domainname, ddns-updates - прочие параметры
динамического изменения имён DNS)
- default-lease-time 43200; (время аренды в секундах, если клиент не запросил явно)
- delayed-ack 0; (пакетировать подтверждения и записи в базу аренды)
- dhcp-cache-threshold 25; (уменьшение записи в файл при запросе клиента на обновление в пределах от указанного процента времени аренды)
- do-forward-updates on; (посылать извещение DNS серверу, если включён DDNS)
- dont-use-fsync false; (не делать fsync() при записи в базу аренды; не распознаётся в CentOS7)
- dynamic-bootp-lease-cutoff W YYYY/MM/DD HH:MM:SS; (время в UTC; W - день
недели, 0 - воскресенье; вообще-то клиенты BOOTP не знают, что время
аренды адреса может закончиться, поэтому обычно адрес выдаётся им
навсегда, но иногда бывает известно, что все компьютеры выключаются на ночь
и т.п.)
- dynamic-bootp-lease-length секунд; (адрес клиента BOOTP освобождается, если за указанный
период не было запросов; клиент дожен перезагружаться достаточно часто,
чтобы его адрес не оказался выделен кому-то другому)
- echo-client-id off; (возвращать ли идентификатор клиента (опция 61) в соответствии с RFC-6842)
- filename "имя-загрузочного-файла"; (см. протокол BOOTP)
- fixed-address IP-адрес-или-DNS-имя [, IP-адрес-или-DNS-имя ... ];
(используется в объявлении host; если указано несколько адресов, то клиенту выделяется адрес,
соответствующий его подсети; если не подходит ни один, то клиент не
соответствует объявлению host)
- fixed-address6, fixed-prefix6 ...
- get-lease-hostnames off; (использовать DNS для определения по IP-адресу значения опции hostname)
- hardware ethernet MAC-адрес (в декларации host; в формате 00:11:22:33:44:ff;
адрес нельзя указывать дважды - используйте несколько IP адресов в fixed-address)
- host-identifier option имя-опции значение; (DHCPv6)
- hostname имя-хоста; (если не указано, то берётся из объявления; удалено?)
- include "имя-файла" (содержимое файла считывается как часть конфигурации)
- ignore-client-uids off; (не записывать UUID клиента)
- infinite-is-reserved off; (резервировать адреса с бесконечным временем аренды)
- lease-file-name /var/lib/dhcp/dhcpd.leases; (абсолютное имя файла для хранения
информации о выделенных адресах; может указываться только в глобальной области)
- dhcpv6-lease-file-name "абсолютное имя файла";
- lease-id-format octal; (hex; формат для непечатных символов в файле аренды; сервер читает в любом формате)
- limit-addrs-per-ia число; (DHCPv6)
- local-address IP-адрес; (слушать только этот адрес; а как же 255.255.255.255?)
- local-address6, bind-local-address6 (DHCPv6)
- local-port 67; (UDP порт)
- log-facility daemon; (источник-сообщения-syslog)
- log-threshold-high 0; (в процентах; выводить сообщение о загрузке пула при превышении)
- log-threshold-low 0; (в процентах; прекратить выводить сообщение о загрузке пула)
- max-ack-delay микросекунд; (максимальная задержка при пакетировании ответов)
- max-lease-time 86400; (в секундах; максимальная длительность аренды в запросах клиентов; клиенты BOOTP не ограничиваются)
- min-lease-time секунд 300; (в секундах; минимальная длительность аренды в запросах клиентов)
- min-secs секунд; (позволяет сконфигурировать запасной сервер, который
вступает в работу, если клиент ждёт ответа более указанного количества секунд;
установка 1 приводит к тому, что сервер отвечает на второй запрос; только для DHCPDISCOVER?)
- next-server доменное-имя-или-IP-адрес; (адрес сервера для загрузки файла; по умолчанию - адрес DHCP сервера)
- omapi-key имя-ключа;
- omapi-port порт; (указание порта включает работу OMAPI для управления DHCP сервером; 9711)
- on { commit | release | expiry } набор-утверждений-в-фигурных-скобках (утверждения выполняются только при указанном событии)
- one-lease-per-client off; (при получении от клиента запроса DHCPREQUEST сервер
освобождает адрес, ранее выданный этому клиенту; нельзя использовать для
клиентов, имеющих несколько интерфейсов или помнящих старые адреса
при пеермещении из одной подсети в другую)
- option имя значение; (опции протокола DHCP)
- persist-eui-64-leases on; (DHCPv6; см. use-eui-64)
- pid-file-name /var/run/dhcpd.pid; (имя файла, в который записывается номер процесса)
- dhcpv6-pid-file-name имя-файла (в режиме DHCPv6)
- ping-check on; (проверять с помощью ICMP Echo динамически выделенный адрес
перед тем как сообщить его клиенту; вносит задержку на запрос DHCPDISCOVER;
конфликтные адреса резервируются на время, клиент не получает ответа (пусть приходит ещё!)
- ping-cltt-secs 60; (в секундах; время резервирования конфликтного адреса, если нет совсем свободных)
- ping-timeout 1; (секунд)
- ping-timeout-ms 0; (милисекунд)
- preferred-lifetime, prefix-length-mode, release-on-roam (DHCPv6)
- remote-port 68; (отвечать на указанный UDP порт)
- server-identifier идентификатор-сервера; (IP адрес или доменное имя сервера;
должен быть доступен всем клиентам;
по умолчанию - первый IP адрес интерфейса, по которому пришёл запрос;
то же самое можно задать опцией dhcp-server-identifier)
- server-id-check off; (проверять идентификатор сервера в запросах клиента DHCP REQUEST;
т.е. не встревать в переговоры клиента с другими серверами)
- server-duid LLT [значение]; (LLT, EN или LL; задать UID сервера; по умолчанию - LLT (ethernet, MAC, время))
- server-name "имя-сервера"; (передаётся клиенту как имя загрузочного сервера)
- site-option-space имя; (из какого пространства опций брать локальные опции, т.е. с номером более 224 (ранее 128);
можно задать разные для разных клиентов с помощью условных выражений)
- stash-agent-options off; (запоминать данные от посредника (опция 82), передавшем запрос
от этого клиента при начальном выборе адреса, и использовать их
при обновлении аренды; это бывает необходимо, т.к. при обновлении
используются нешироковещательные запросы, которые могут приходить
другим путём)
- update-conflict-detection true; (проверять наличие конфликта; DDNS?)
- update-optimization true; (оптимизация DDNS)
- update-static-leases off; (DDNS для статических адресов)
- use-eui-64 (DHCPv6)
- use-host-decl-names off; (использовать имена, указанные в объявлениях host
как значения опции host-name по умолчанию)
- use-lease-addr-for-default-route off; (вместо адреса шлюза посылать
выделенный клиенту адрес; обход какой-то проблемы Win95)
- vendor-option-space строка; (какое пространство опций использовать для опций с номером более 224 (ранее 128);
можно задать разные для разных клиентов с помощью условных выражений)
Опции протокола DHCP: option имя значение;
(флаг: on/off или true/false;
устаревшие опции и всякие странные сервисы не упоминаю; DHCPv6 не описываю;
значения опций используются как при создании ответов сервера, так и извлекаются
из запросов клиентов при вычислении выражений, условий и поиске класса;
смысл опций описан выше;
вместо IP адреса можно указать DNS имя, разрешаемое в 1 IP адрес при первом запросе после старта dhcpd;
текст в NVT ASCII необходимо заключать в кавычки;
строку октетов (байт) в NVT ASCII необходимо заключать в кавычки или представлять как разделяемые двоеточием октеты в виде 2 шестнадцатеричных цифр;
доменное имя не должно заключаться в кавычки;
имена доменов в списке доменов заключаются в кавычки и разделяются запятыи)
- option all-subnets-local флаг; (все подсетки имеют одинаковый MTU; опция 27)
- option arp-cache-timeout uint32; (секунд; опция 35)
- option associated-ip IP-адрес, ...; (только чтение при опросе БД аренды)
- option bcms-controller-address IP-адрес, ...; (адреса серверов управления широковещательной и групповой рассылкой)
- option bcms-controller-names доменное имя, ...; (имена серверов управления широковещательной и групповой рассылкой)
- option bootfile-name "имя-загрузочного-файла"; (аналогично filename "имя-загрузочного-файла", но через механизм опций;
клиенты BOOTP не поддерживают механизм опций, клиенты DHCP могут требовать - PXE обходится без него; опция 67?)
- option boot-size uint16; (размер загрузочного файла в блоках по 512 байт; вычисляется самостоятельно? опция 13)
- option broadcast-address ip-address; (широковещательный IP адрес в сети; вычисляется самостоятельно? опция 28)
- option client-last-transaction-time uint32; (только чтение при опросе БД аренды)
- option default-ip-ttl uint8; (TTL по умолчанию для IP, опция 23)
- option default-tcp-ttl uint8; (TTL по умолчанию для TCP, опция 37)
- option dhcp-client-identifier строка; (используется в объявлении host
для выбора нужного по входящему запросу; иногда в начале строки необходимо
добавить \0; только чтение? опция 61?)
- option dhcp-lease-time секунд; (используется в запросах; значение в ответах
сервера устанавливается в соответствии с параметрами max-lease-time и
default-lease-time; опция 51)
- option dhcp-max-message-size uint16; (может посылаться клиентом, максимальный ожидаемый размер IP пакета; опция 57)
- option dhcp-message text; (для сообщений сервера о причине DHCPNAK и клиента о причине DHCPDECLINE; установить нельзя; опция 56)
- option dhcp-message-type uint8; (тип пакета DHCP; установить нельзя; опция 53)
- option dhcp-option-overload uint8; (поля имени сервера и загрузочного файла
использованы для передачи дополнительных параметров; установить нельзя - сервер решает самостоятельно; опция 52)
- option dhcp-parameter-request-list uint8, ...; (посылается клиентом или конфигурируется на сервере, опция 55)
- option dhcp-rebinding-time uint32; (T2, опция 59)
- option dhcp-renewal-time uint32; (T1, опция 58)
- option dhcp-requested-address ip-address; (посылается клиентом; установить нельзя; опция 50)
- option dhcp-server-identifier ip-address; (сервер берёт значение из параметра server-identifier; опция 54)
- option domain-name text; (имя домена DNS; опция 15)
- option domain-name-servers список-IP-адресов-через-запятую; (приоритетный - вперёд; опция 6)
- option domain-search список-доменов (простое доменное имя ищется клиентом по очереди в этих доменах - search в /etc/resolv.conf; опция 119)
- option extensions-path text; (имя файла с дополнительной информацией, TFTP; опция 18)
- option finger-server список-IP-адресов-через-запятую; (приоритетный - вперёд; опция 73)
- option font-servers список-IP-адресов-через-запятую; (приоритетный - вперёд; опция 48)
- option host-name text; (назначаемое клиенту имя, может быть полным (рекомендуется использовать domain-name) или неполным;
по умолчанию, берётся из декларации host; опция 12)
- option ieee802-3-encapsulation flag; (какой тип Ethernet использовать клиенту: false - Ethernet Version 2 (RFC 894), true - IEEE 802.3 (RFC 1042);
опция 36)
- option interface-mtu uint16; (задать размер MTU интерфейсу клиента; опция 26)
- option ip-forwarding flag; (должен ли клиент передавать пакеты с интерфейса на интерфейс, т.е. работать маршрутизатором; опция 19)
- option irc-server список-IP-адресов-через-запятую; (приоритетный - вперёд; опция 74)
- option loader-configfile имя-файла (в версии 4.3; имя файла с конфигурацией PXE; опция 209 по RFC 5071)
- option loader-pathprefix имя-каталога (в версии 4.3; имя каталога с файлом конфигурации PXE; опция 210 по RFC 5071)
- option loader-reboottime секунд (в версии 4.3; сколько времени клиент PXE должен пытаться перезагрузиться; опция 211 по RFC 5071)
- option log-servers список-IP-адресов-через-запятую; (приоритетный - вперёд; опция 7)
- option lpr-servers список-IP-адресов-через-запятую; (приоритетный - вперёд; опция 9)
- option mask-supplier flag; (отвечать ли на ICMP запросы автораскрытия маски подсети; опция 30)
- option max-dgram-reassembly uint16; (максимальный размер датаграммы, которую клиент должен быть готов принять, не менее 576; опция 22)
- option netbios-dd-server список-IP-адресов-через-запятую; (приоритетный - вперёд; NBDD; опция 45)
- option netbios-name-servers список-IP-адресов-через-запятую; (приоритетный -
вперёд; NBNS (RFC 1001/1002) больше известен под именем WINS; опция 44)
- option netbios-node-type uint8; (1 - использовать только широковещательные запросы,
2 - только WINS, 4 - сначала широковещательные запросы, затем WINS, 8 - сначала WINS,
затем широковещательные запросы; опция 46)
- option netbios-scope string; (опция 47)
- option nis-domain имя-домена-NIS; (опция 40)
- option nis-servers список-IP-адресов-серверов-NIS-через-запятую; (приоритетный - вперёд; опция 41)
- option nisplus-domain имя-домена-NIS+ ; (опция 64)
- option nisplus-servers список-IP-адресов-серверов-NIS+-через-запятую; (приоритетный - вперёд; опция 65)
- option nntp-server список-IP-адресов-через-запятую; (приоритетный - вперёд; опция 71)
- option non-local-source-routing flag; (разрешать ли source routing IP пакетов; опция 20)
- option ntp-servers список-IP-адресов-через-запятую; (приоритетный - вперёд; опция 42)
- option pxe-system-type список-архитектур (в версии 4.3; посылается клиентом; системная архитектура клиента PXE (RFC-4578);
00:07 - UEFI; опция 93)
- option pxe-interface-id uint uint8 uint8 (в версии 4.3; посылается клиентом; тип сетевого интерфейса PXE (RFC-4578); опция 94?)
- option pxe-client-id тип строка (в версии 4.3; посылается клиентом; тип и уникальный идентификатор клиента PXE (RFC-4578); опция 97)
- option path-mtu-aging-timeout секунд; (время ожидания для алгоритма автораскрытия MTU (RFC 1191); опция 24)
- option path-mtu-plateau-table uint16 [, uint16... ]; (таблица значений MTU для алгоритма автораскрытия MTU (RFC 1191); от меньшего к большему; опция 25)
- option pcode текст-описания-TZ; (описание часового пояса по IEEE 1003.1, например "EST5EDT4,M3.2.0/02:00,M11.1.0/02:00", RFC-4833, опция 100)
- option perform-mask-discovery flag; (использовать ли ICMP для автораскрытия маски подсети; опция 29)
- option policy-filter IP-адрес, маска [, ...]; (фильтр механизма неместной маршрутизации от источника - non-local-source-routing; опция 21)
- option pop-server список-IP-адресов-POP3-через-запятую; (приоритетный - вперёд; опция 70)
- option root-path путь-к-корневому-диску; (формат пути как NFS? опция 17)
- option router-discovery flag; (использовать ли механизм поиска маршрутизаторов RFC 1256, опция 31)
- option router-solicitation-address IP-адрес; (IP адрес сервера механизма поиска маршрутизаторов, опция 32)
- option routers список-IP-адресов-через-запятую; (приоритетный - вперёд; опция 3)
- option smtp-server список-IP-адресов-через-запятую; (приоритетный - вперёд; опция 69)
- option static-routes адрес-подсети-назначения адрес-шлюза [, ...];
(нельзя задать маску подсети, только классовая маршрутизация, для нормальной есть опция 121 (не реализовано?); DHCP клиент Microsoft не использует; опция 33)
- option subnet-mask IP-адрес; (берётся из объявления сети; опция 1)
- option subnet-selection IP-адрес; (посылается клиентом, может использоваться в выражениях; RFC 3011; опция 118)
- option swap-server IP-адрес; (опция 16)
- option tftp-server-address IP-адрес [, ...]; (сервер TFTP - RFC-5859; пересекается с Etherboot и имя файла с настройками GRUB; опция 150)
- option tcp-keepalive-garbage флаг; (посылать ли TCP keepalive c мусором для совместимости со старыми реализациями; опция 39)
- option tcp-keepalive-interval секунд; (интервал посылки сообщений TCP keepalive; 0 - исходить из настройки приложений; опция 38)
- option tcode имя-часового-пояса; (версия 4.3; описание часового пояса по базе TZ, например, "Europe/Zurich", RFC-4833; опция 101)
- option tftp-server-name text; (имя TFTP сервера для загрузки следующего файла; то же самое, что параметр server-name)
- option time-offset секунд; (смещение от UTC; опция 2)
- option time-servers список-IP-адресов-через-запятую; (приоритетный - вперёд; RFC 868, а не NTP; опция 4)
- option trailer-encapsulation флаг; (согласовывать ли использование "хвостов" в канальных кадрах (RFC 893), опция 34)
- option user-class строка; (посылается клиентом, может использоваться в выражениях, RFC-3004, опция 77)
- option vendor-class-identifier строка; (посылается клиентом, может использоваться в выражениях, формат не определён стандартом;
может уточняться сервером в ответе; опция 60, а 124?)
- option vendor-encapsulated-options строка; (посылается клиентом, может использоваться в выражениях, формат не определён стандартом;
может посылаться сервером; формат задаётся параметром vendor-option-space на основе описаний в "option space"
опция 43)
- option vivso строка (Vendor Identified Vendor Sub Options, RFC-3925, опция 125)
- option www-server список-IP-адресов-через-запятую; (приоритетный - вперёд; опция 72)
- option x-display-manager список-IP-адресов-через-запятую; (список IP адресов менеджеров дисплея (xdm) X Window System, приоритетный - вперёд; опция 49)
- пространство опций agent (опции 82 добавляются к запросам клиента посредником, RFC 3046,
можно использовать в выражениях, нет смысла определять на сервере)
- option agent.circuit-id string; (поможет агенту определить канал для пересылки ответа сервера)
- option agent.remote-id string; (адрес клиента с точки зрения агента: caller ID и т.п.)
- option agent.link-selection
- пространство опций fqdn (DDNS, ietf-dhc-fqdn-option-00.txt)
- пространство опций nwip (NETWARE/IP, RFC 2242)
- пространство опций dhcp6
Можно самостоятельно описывать опции, не реализованные сервером dhcpd
(допускается использовать номера, зарезервированные для локального использования -
границы интервала номеров опций для локального использования сдвигались дважды: от 128 к 192 к 224)
в виде: option имя code номер = определение-структуры.
Определение структуры может быть следующим (нельзя описать последовательность структур):
- boolean # on/true или off/false
- [ unsigned | signed ] integer [ 8 | 16 | 32 ]
- ip-address # можно использовать DNS имя, разрешаемое в 1 IP адрес при первом запросе после старта dhcpd)
- text # NVT ASCII в кавычках
- string # последовательность байт в виде строки или шестнадцатеричной последовательности вида 17:23:19:a6:42:ea)
- domain-list [compressed] # декомпрессия производится в любом случае
- encapsulate имя-пространства # ссылка на описание пространства
- { простой-тип-данных [, ... ] } # последовательность полей, при использовании фигурные скобки не нужны (и запятые тоже)
- array of тип-данных-фиксированной-длины # перечисляются через запятую
Описанную опцию можно использовать по имени, например:
# описание опции
option jetdirect144 code 144 = text;
# использование
option jetdirect144 "имя-TFTP-файла-с-параметрами-принтера";
Описание и использование своего пространство опций для vendor-encapsulated-options
делается в следующей последовательности:
- определение пространства (количество байт на код опции для DHCPv4 - 1, количество байт на длину строки для DHCPv4 обычно 1, длина 0 - ?):
option space имя-пространства-опций [ [ code width число ] [ length width число ] [ hash size число ] ];
- описание подопции: option имя-пространства-опций.имя-опции code номер = определение-структуры;
- указание на использование пространства для vendor-encapsulated-options: vendor-option-space имя-пространства;
- задание значения: option имя-пространства-опций.имя-опции значение;
Например:
option space PXE;
option PXE.prompt code 10 = {unsigned integer 8, text};
...
shared-network "имя" {
if substring (option vendor-class-identifier, 0, 9) = "PXEClient" {
vendor-option-space PXE;
option PXE.prompt 10 "Select Boot Server (F8)";
...
}
}
Условие в операторе if/elsif в зависимости от значения
опций в запросе задаётся в виде булевского выражения (null в любой части выражения
приводит к результату null для всего выражения, что имеет значение false)
- выражение-1 = выражение-2 # сравнение
- выражение ~= регулярное-выражение # сравнение
- выражение ~~ регулярное-выражение # независимо от регистра букв
- булевское-выражение-1 and булевское-выражение-2
- булевское-выражение-1 or булевское-выражение-2
- not булевское-выражение
- exists имя-опции # опция имеется в пакете от клиента
- known # т.е. имеется объявление host для этого клиента
- static # статический адрес
Значение параметра может задаваться в виде выражения (записывается как "имя-параметра = выражение").
Выражения также используются для условных описаний параметров.
Реализованы следующие типы выражений:
- substring (выражение, смещение, длина)
- suffix (выражение, длина)
- lcase (выражение) # конвертация в строчные буквы
- ucase (выражение) # конвертация в прописные буквы
- option имя-опции # содержимое опции из запроса клиента
- config-option имя-опции # содержимое опции из запроса настроек сервера
- gethostname() # возвращает значение gethostname() на локальном хосте
- hardware # возвращает строку, первый байт которой - 01 (ethernet), далее 6 октетов MAC адреса клиента
- packet (смещение, длина) # содержимое полученного пакета DHCP
- "строка в кавычках" # экранированные символы "\t" "\r", "\n", "\b", "\OOO", "\xHH"
- шестнадцатеричная последовательность вида 17:23:19:a6:42:ea
- concat (выражение, ... выражение) # слияние строк
- reverse (размер-блока, выражение) # поблочное ревертирование
- leased-address # выдаваемый клиннту IP адрес
- binary-to-ascii (система-счисления, число-бит-в-числе, разделитель, выражение)
- encode-int (число, число-бит) # число в строку октетов
- pick-first-value (выражение-1, ... ) # первое ненулевое выражение
- host-decl-name # имя подходящей под требования клиента декларации хоста
- число
- математические функции: +, -, /, *, % (по модулю), & (побитное и), | (побитное или), ^ (побитное XOR)
- extract-int (выражение, число-бит) # из строки октетов в число
- lease-time # секунд до истечения аренды
- client-state # только для конфигурации клиента, состояние клиента
- Booting (INIT, перед широковещательным DHCPDISCOVER, IP адреса нет)
- Reboot (INIT-REBOOT, перед широковещательным DHCPREQUEST, IP адрес есть, но не используется)
- Select (SELECTING, получен DHCPOFFER, ждём ещё)
- Request (REQUESTING, перед широковещательным DHCPREQUEST)
- Bound (BOUND, IP адрес есть и используется)
- Renew (RENEWING, перед направленным DHCPREQUEST, IP адрес есть и используется)
- Rebind (REBINDING, перед широковещательным DHCPREQUEST, IP адрес есть и используется)
log (приоритет, выражение) вызывает выдачу на syslog.
execute (программа [, параметр, ... ]);
вызывает синхронное выполнение внешней программы с позиционными параметрами.
Неперчатные символы преобразуются в "\nnn".
Сервер поддерживает протокол восстановления (failover,
draft-ietf-dhc-failover-07.txt) - два DHCP сервера разделяют общий пул
динамически распределяемых адресов и подменяют друг друга в случае
падения. Протокол не стандартизован (и недодуман) до конца - чувствуйте себя
бета-тестерами, если хотите. Описание опускаю.
Сервер поддерживает (описание опускаю) протокол
динамического обновления DNS, используя
следующие алгоритмы (задаётся параметром ddns-update-style - требуется
указать хотя бы none, иначе сервер не запустится; TSIG и DNSSEC не реализованы):
- none
- ad-hoc (экспериментальный) - нестандартный и признанный устаревшим
- interim (временный) - соответствует проектам стандартов
draft-ietf-dhc-ddns-resolution-??.txt, draft-ietf-dhc-fqdn-option-??.txt
и draft-ietf-dnsext-dhcid-rr-??.txt, но не полностью
- не реализованный пока алгоритм, соответствующий будущему стандарту
Возможно назначить выполнение блока операторов при
наступлении одного из типов событий: выделение адреса (commit),
освобождение (release), истечение времени аренды (expiry).
Настройка ISC DHCP сервера для обслуживания PXE клиентов.
Конфигурация может быть запрошена из LDAP в соответствиис draft-ietf-dhc-ldap-schema-01.txt.
Параметры настройки: ldap-server, ldap-port, ldap-username, ldap-password, ldap-base-dn, ldap-method, ldap-debug-file, ldap-ssl,
ldap-tls-reqcert, ldap-tls-ca-file, ldap-tls-ca-dir, ldap-tls-cert, ldap-tls-key, ldap-tls-crlcheck, ldap-tls-ciphers, ldap-tls-randfile.
Не пробовал.
Кроме сервера протокола DHCP обеспечивает сервер протокола BOOTP, поэтому
имеет множество параметров настройки, но для каждого клиента BOOTP
достаточно иметь секцию host в /etc/dhcp/dhcpd.conf (subnet, естественно,
общий для всей подсети), например, обеспечение загрузки сетевого принтера
HP JetDirect для dhcp-2.0:
subnet ip-адрес-подсети netmask маска-подсети {
host имя-принтера {
hardware ethernet MAC-адрес;
fixed-address IP-адрес;
always-reply-rfc1048 on;
next-server TFTP-сервер;
option subnet-mask маска-подсети;
option host-name "имя-принтера";
option log-servers имя-сервера-syslog;
option option-144 "имя-TFTP-файла-с-параметрами-принтера";
}
}
DHCP сервер коммутатора Huawei Cloud Engine.
Посредник dhcrelay(8) из комплекта ISC DHCP транслирует запросы клиентов
и ответы серверов между сегментами сети (конфигурационного файла нет), не использовал:
- -4 (по умолчанию)
- -6 (DHCPv6)
- -c число (отбрасывать пакеты, прошедшие более указанного числа
промежуточных узлов; 10; защита от зацикливания)
- -d (не уходить в фоновый режим)
- -p UDP-порт (по умолчанию - 67, клиентский порт принимается на 1 больше)
- -q (не выводить copyright при запуске)
- -pf имя-файла-PID
- --no-pid (не писать номер процесса в файл)
- -a (добавлять во все запросы и удалять из ответов опции посредника
Circuit ID (имя интерфейса, на котором получен запрос) и Agent ID
(поле giaddr) )
- -A максимальный-размер-пакета
- -D (выбрасывать все ответы серверов, не содержашие наш Agent ID)
- -i интерфейс (интерфейс, на котором слушать широковещательные пакеты;
можно задавать несколько раз; по умолчанию все активные
широковещательные интерфейсы)
- -iu интерфейс (интерфейс для общения с вышестоящими;
можно задавать несколько раз)
- -id интерфейс (интерфейс для общения с нижестоящими;
можно задавать несколько раз)
- -m append | replace | forward | discard (что делать с пакетами,
которые уже содержат опции посредника, но не содержат giaddr)
- -U интерфейс (устанавливать подопцию выбора соединения - RFC-3527)
- --version
- адреса или имена серверов
DHCP relay коммутатора Huawei Cloud Engine.
Пакет dhclient-3.0.5-33.el5_9 (RHEL5) содержит клиент протокола DHCP от ISC.
Конфигурационный файл - /etc/dhclient.conf (dhclient.conf(5).
При обновлении (REBIND, RENEW) использует не широковещательный запрос, а непосредственный IP адрес сервера, выдавшего IP адрес.
При описании интерфейса с BOOTPROTO=dhcp скрипт /etc/sysconfig/network-scripts/ifup-eth
вызывает клиента dhclient для обслуживаемого интерфейса ("[-1] -q -cf /etc/dhclient-${DEVICE}.conf -lf /var/lib/dhclient/dhclient-${DEVICE}.leases -pf /var/run/dhclient-${DEVICE}.pid").
При этом создаются дополнения к настройке клиента /etc/dhclient-ИмяИнтерфейса.conf вида "send host-name "имя хоста"").
Журнал работы выводится на syslog (local7).
Список арендованных адресов дописывается в конец файла аренды - /var/lib/dhcp/dhclient.leases (dhclient.leases(5)),
файл читается при запуске клиента (используется если сервер DHCP недоступен при загрузке или его нет), временами обрезается.
Также описание аренды берётся из директивы lease в dhclient.conf.
Ключи запуска dhclient:
- -4 (по умолчанию, DHCPv4)
- -6 (DHCPv6)
- -4o6 порт (DHCPv4 поверх DHCPv6)
- -1 (только получение адреса, без обновлений и прочего)
- -d (не уходить в фоновый режим после получения адреса, необходимо для initd)
- -nw (сразу уходить в фоновый режим)
- -q (по умолчанию, только сообщать об ошибках)
- -v (болтливость)
- [-n] -w (не завершаться, если нет широковещательных интерфейсов;
"-n" ничего не конфигурировать даже если таковые обнаружены;
в дальнейшем можно использовать omshell, чтобы извещать
клиента о появлении или исчезновении интерфейсов)
- -e имя-переменной-окружения=значение (передача переменных для dhclient-script)
- -r (отдать арендованный адрес, вызвать dhclient-script и завершить процесс из /var/run/dhclient.pid)
- -x (вызвать dhclient-script и завершить процесс из /var/run/dhclient.pid; ранее вызывал расширение для RedHat)
- -p UDP-порт (по умолчанию - 68; номер клиентского порта, номер порта сервера на 1 меньше)
- -s IP-адрес-сервера (по умолчанию делается широковещательная посылка на 255.255.255.255)
- -g IP-адрес (установить giaddr)
- -i (посылать UID клиента, RFC-4361; ранее был ключ "-I идентификатор": send dhcp-client-identifier "";)
- -I (запускать DDNS, RFC-4701, RFC-4702)
- --decline-wait-time секунд (10; интервал между отверганием полученного IP-адреса и новым запросом)
- --version
- -lf имя-хранилища-выданных-адресов (/var/lib/dhcp/dhcpd.leases)
- -pf /var/run/dhclient.pid
- --no-pid
- -cf имя-конфигурационного-файла (/etc/dhclient.conf)
- -sf имя-скрипта (/sbin/dhclient-script)
- -B (эквивалент "bootp-broadcast-always")
- -H имя-хоста (эквивалент "send host-name "имя-хоста";")
- -F полное-доменное-имя (эквивалент "send fqdn.fqdn "полное-доменное-имя";")
- {-timeout | -T} секунд (сколько времени ждать ответа сервера)
- -V класс-поставщика (эквивалент "send vendor-class-identifier "класс-поставщика";")
- -R список-требуемых-от-сервера-опций (subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, host-name, nis-domain, nis-servers, ntp-servers, interface-mtu)
- список интерфейсов (по умолчанию - все широковещательные интерфейсы)
Переменные окружения (перебиваются ключами):
PATH_DHCLIENT_CONF, PATH_DHCLIENT_DB (аренда), PATH_DHCLIENT_PID, PATH_DHCLIENT_SCRIPT.
Конфигурационный файл - /etc/dhclient.conf (dhclient.conf(5).
Синтаксис файла конфигурации такой же, как и у файла конфигурации сервера.
В RHEL/CentOS/... не используется, т.к. для управления интерфейсами используются внешние средства (/etc/sysconfig, NetworkManager)
и /etc/sysconfig/network-scripts/ifup-eth запускает dhclient с использованием свежесозданного /etc/dhclient-${DEVICE}.conf
(достаточно удалить DHCP_HOSTNAME?).
Параметры и объявления:
Скрипт dhclient-script вызывается dhclient для установки
интерфейса до выдачи запроса серверу, при проверке предложенного адреса,
для полной установки интерфейса, при проверке предустановленой аренды
при отсутствии сервера и при полном отсутствии информации об адресе.
Скрипт для RHEL6/CentOS/... правит /etc/resolv.conf (/etc/resolv.conf.predhclient),
/etc/localtime (/etc/localtime.predhclient, DHCP_TIME_OFFSET_SETS_TIMEZONE),
/etc/ntp.conf (/etc/ntp.conf.predhclient),
определяет маршруты (ip route), адреса (ip addr),
настраивает интерфейсы (ifconfig - адрес, маска, широковещательный адрес, MTU),
устанавливает hostname, domainname (NIS, /etc/yp.conf и /etc/yp.conf.predhclient).
Скрипт проверяет наличие пользовательских расширений
/etc/dhclient-enter-hooks (определяет функцию make_resolv_conf), /etc/dhclient-${interface}-down-hooks, /etc/dhclient-down-hooks,
и /etc/dhclient-exit-hooks (модифицирует код возврата).
При вызове передаётся переменная окружения reason, определяющая состояние процесса:
- MEDIUM (установка типа интерфейса, пока ничего никуда не посылаем; передаются переменные окружения
interface, medium)
- PREINIT (первоначальная установка интерфейса перед посылкой запроса серверу DHCP,
передаются переменные окружения interface, medium и м.б. alias_ip_address,
который необходимо удалить с интерфейса; DHCLIENT_DELAY)
- BOUND (получили адрес и опции от сервера DHCP; new_ip_address, interface, medium; каждая полученная опция
передаётся через переменную, имя переменной делается из имени опции
заменой "-" на "_" и добавления "new_" в начале;
запятые в списках серверов заменяются на пробелы;
запрашиваемые опции передаются как переменные requested_преобразованное-имя-опции со значением 1;
alias_ip_address и alias_...)
- RENEW (что-то поменялось; в дополнение к переменым new_... передаются переменные old_...)
- REBIND (у нас новый DHCP сервер - в дополнение к RENEW очищает таблицу ARP)
- REBOOT (получили адрес из базы аренды или от сервера; аналогично BOUND)
- EXPIRE (получить аренду не удалось; удалить всё связанное со старыми параметрами как в RENEW)
- FAIL (связаться с сервером не удалось, параметры из lease тоже неверны)
- STOP (остановка интерфейса)
- RELEASE (освобождение аренды - "-r")
- NBI (интерфейс не широковещательный)
- TIMEOUT (связаться с сервером не удалось, однако обнаружены параметры
из объявления lease или старая аренда; аналогично BOUND)
- ARPCHECK | ARPSEND (делается arping на новый адрес)
Если DHCP сервер раздаёт адреса NTP серверов,
то на сервере NTP необходимо добавить в /etc/sysconfig/network строку PEERNTP=no,
иначе dhclient будет "улучшать" /etc/ntp.conf.
Для управления клиентом можно использовать тот же
OMAPI протокол, что и для управления сервером: приостановка работы,
возобновление работы с переконфигурацией всех интерфейсов, завершение работы.
RHEL6/CentOS6 добавляет
- обработку гибернации и просыпания
/usr/lib64/pm-utils/sleep.d/56dhclient (создаёт временный файл со списком интерфейсов, которые остановили при гибернации)
- каталог /etc/dhcp/dhclient.d/ для добавления скриптов работы с DHCP клиентом для различных служб
(/etc/dhcp/dhclient.d/ntp.sh - сюда вынесены функции обработки /etc/ntp.conf)
- начальную адаптацию под NetworkManager (/etc/NetworkManager/dispatcher.d/10-dhclient)
RHEL7/CentOS7 добавляет
- обработку гибернации и просыпания
/usr/lib64/pm-utils/sleep.d/56dhclient (создаёт временный файл со списком интерфейсов, которые остановили при гибернации)
- каталог /etc/dhcp/dhclient.d/ для добавления скриптов работы с DHCP клиентом для различных служб
(/etc/dhcp/dhclient.d/chrony.sh - сюда вынесены функции обработки /etc/chrony.conf, изменения в /var/lib/dhclient/chrony.servers.имя_интерфейса)
адаптацию под NetworkManager (/etc/NetworkManager/dispatcher.d/11-dhclient (вызов скриптов из /etc/dhcp/dhclient.d/),
/var/lib/NetworkManager/dhclient-уид-имя_интерфейса.lease (база полученных аренд),
/var/lib/NetworkManager/dhclient-имя_интерфейса.conf ("send host-name "полное-имя-хоста";
also request rfc3442-classless-static-routes, ms-classless-static-routes, static-routes, wpad, ntp-servers, root-path")),
- использование клиента в initrd (/usr/lib/dracut/modules.d/40network/dhclient.conf -
"request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, root-path,
interface-mtu, classless-static-routes;",
/usr/lib/dracut/modules.d/40network/dhclient-script.sh (сильно упрощённый вариант /sbin/dhclient-script, все файлы в /tmp),
/usr/lib/dracut/modules.d/40network/kill-dhclient.sh (по всем /tmp/dhclient.*.pid сначала rill, потом "kill -9"))
NetworkManager запускает для обслуживаемого интерфейса
(/usr/libexec/nm-dhcp-helper - это не скрипт, а исполняемый файл без описания):
/sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-bond0.pid
-lf /var/lib/NetworkManager/dhclient-УИД-интерфейс.lease
-cf /var/lib/NetworkManager/dhclient-интерфейс.conf интерфейс
Необходимо учесть, что клиент DHCP должен обрабатывать пакеты, когда сеть ещё не сконфигурирована!
Нет IP адреса, пакеты проходят мимо фильтров и т.д. - подробности.
Microsoft Windows 2000 Server запрашивает (идентификатор
клиента - его MAC адрес; vendor class identifier - "MSFT 5.0"):
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Domain Name (15)
- Perform Router Discovery
- Static Route
- Vendor Specific
- NetBIOS over TCP/IP Name Server (44)
- NetBIOS over TCP/IP Node Type (46)
- NetBIOS over TCP/IP Scope (47)
Microsoft Windows XP не требует широковещательного ответа (не уверен до конца, т.к. у меня проходит через посредника),
имеет случайный номер транзакции, Vendor Class (опция 60) - "MSFT 5.0",
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
имя хоста (не имеет отношения к DNS, простое имя, заданное при установке, опция 12),
FQDN имя сообщаемое клиентом и кто отвечает за обновление DNS записей A и PTR (простое имя, заданное при установке, опция 81),
информация в формате изготовителя (43),
разрешение автоматической конфигурации (116),
запрашивает:
- Subnet Mask (1)
- Domain Name (15; Host Name не запрашивается, т.е. здесь должно быть полное имя хоста?)
- Router (3)
- Domain Name Server (6)
- NetBIOS over TCP/IP Name Server (44)
- NetBIOS over TCP/IP Node Type (46)
- NetBIOS over TCP/IP Scope (47)
- Perform Router Discovery
- Static Route (33!)
- Private/Classless Static Route Microsoft (249)
- Vendor Specific Information (43)
Microsoft Windows 7 Pro не требует широковещательного ответа (не уверен до конца, т.к. у меня проходит через посредника),
имеет случайный номер транзакции, Vendor Class (опция 60) - "MSFT 5.0",
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
имя хоста (не имеет отношения к DNS, простое имя, заданное при установке, опция 12),
идентификатор DHCP сервера при наличии (54),
FQDN имя сообщаемое клиентом и кто отвечает за обновление DNS записей A и PTR (простое имя, заданное при установке,
опция 81, только REQUEST?),
запрашивает:
- Subnet Mask (1)
- Domain Name (15; Host Name не запрашивается, т.е. здесь должно быть полное имя хоста?)
- Router (3)
- Domain Name Server (6)
- NetBIOS over TCP/IP Name Server (44)
- NetBIOS over TCP/IP Node Type (46)
- NetBIOS over TCP/IP Scope (47)
- Perform Router Discovery
- Static Route (33!)
- Classless Static Route (121)
- Private/Classless Static Route Microsoft (249)
- Vendor Specific Information (43)
- Private/Proxy autodiscovery (252, нет в REQUEST и DISCOVERY?)
Microsoft Windows 10 и 11 не требует широковещательного ответа (не уверен до конца, т.к. у меня проходит через посредника),
имеет случайный номер транзакции, Vendor Class (опция 60) - "MSFT 5.0",
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
имя хоста (не имеет отношения к DNS, простое имя, заданное при установке, опция 12),
идентификатор DHCP сервера при наличии (54),
FQDN имя сообщаемое клиентом и кто отвечает за обновление DNS записей A и PTR (простое имя, заданное при установке,
опция 81, только REQUEST?),
запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Domain Name (15; Host Name не запрашивается, т.е. здесь должно быть полное имя хоста?)
- Perform Router Discovery
- Static Route (33!)
- Vendor Specific Information (43)
- NetBIOS over TCP/IP Name Server (44)
- NetBIOS over TCP/IP Node Type (46)
- NetBIOS over TCP/IP Scope (47)
- Domain Search (119)
- Classless Static Route (121)
- Private/Classless Static Route Microsoft (249)
- Private/Proxy autodiscovery (252, нет в REQUEST?)
Клиент Megarac Aviator
фирмы American Megatrends (платформа Intel SR1680MVR и H2000JF - Pilot ServerEngines LLC Pilot III) не требует широковещательного ответа,
повторный запрос идёт широковещательно,
имеет случайный номер транзакции, Vendor Class (опция 60) - "udhcp 0.9.9-pre7" и запрашивает
(применяет только первый раз после включения питания):
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
- Network Information Service Domain (40)
- Network Information Service Servers (41)
- Network Time Protocol Servers (42)
Клиент ServerEngines LLC Pilot II
(платформа Intel SR1600UR и SR2600UR) не требует широковещательного ответа,
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
имеет случайный номер транзакции, Vendor Class (опция 60) - "udhcp 0.9.9-pre" и запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
- Network Information Service Domain (40)
- Network Information Service Servers (41)
- Network Time Protocol Servers (42)
Клиент ServerEngines LLC Pilot III
(платформа Intel H2000JF и R2208GZ4GC) не требует широковещательного ответа,
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
имя хоста (не всегда, не DNS, "DCMIмакадрес", 12),
имеет случайный номер транзакции, Vendor Class (опция 60) - "udhcp 0.9.9-pre" (иногда "DCMIмакадрес", а иногда "-D") и запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
- Network Information Service Domain (40)
- Network Information Service Servers (41)
- Network Time Protocol Servers (42)
Клиент Nuvoton BMC (системная плата Supermicro X9DRD)
не требует широковещательного ответа,
имеет случайный номер транзакции, Vendor Class (опция 60) - "udhcp 1.12.0",
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61)
и запрашивает :
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
- Network Time Protocol Servers (42)
Клиент Emulex Pilot III (Integrated BMC, iBMC)
(платформа Intel H2000G) не требует широковещательного ответа,
имеет случайный номер транзакции, Vendor Class (опция 60) - "udhcp 1.20.2",
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61), максимальный размер сообщения - 576 (57),
имя хоста (не имя DNS, а строку "DCMI" и MAC адрес первого интерфейса системной платы),
и запрашивает :
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
- Network Time Protocol Servers (42)
Клиент ASPEED AST2400 BMC (системная плата Supermicro X10DRD)
не требует широковещательного ответа,
имеет случайный номер транзакции, Vendor Class (опция 60) - "udhcp 1.23.1",
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61), максимальный размер сообщения - 576 (57)
и запрашивает :
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
- Network Time Protocol Servers (42)
Клиент Aspeed AST2500
(платформы Intel H2000P и R2000WF) не требует широковещательного ответа,
имеет случайный номер транзакции, Vendor Class (опция 60) - "udhcp 1.33.1",
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61), максимальный размер сообщения - 576 (57),
имя хоста (краткое),
и запрашивает :
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
- Network Time Protocol Servers (42)
Клиент AST2600 BMC (платформа Supermicro 640P-E1CR36L) не требует широковещательного ответа,
имеет случайный номер транзакции, Vendor Class (опция 60) - "udhcp 1.32.1",
в DISCOVER? передаёт максимальный размер сообщения 1260 (576? опция 57) ,
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61)
и запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
- Network Time Protocol Servers (42)
Клиент iLO2 не требует широковещательного ответа,
имеет случайный номер транзакции, Vendor Class (60) - "CPQRIB3" (Compaq вечно живой!),
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61), максимальный размер сообщения - 576 (57),
имя хоста ("ILOсерийный"), максимальный размер сообщения 576 (опция 57),
требуемое время аренды 1 день (51)
и запрашивает :
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Domain Name (15)
- Broadcast Address (28)
- Static Route (33!)
- Vendor Specific Information (43)
- NetBIOS over TCP/IP Name Server (44)
- T1 - интервал времени (58)
- T2 - интервал времени (59)
Protium RPP не требует широковещательного ответа,
имеет случайный номер транзакции, передаёт Host Name (не DNS, серийный номер?),
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
Vendor Class - "udhcp 1.7.0", запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
- Network Time Protocol Servers (42)
- Network Information Service Domain (40)
- Network Information Service Servers (41)
- Domain Search (119)
Принтер Kyocera TASKalfa 1801 не требует широковещательного ответа,
имеет случайный номер транзакции, передаёт Host Name (не DNS, серийный номер?),
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
FQDN имя сообщаемое клиентом и кто отвечает за обновление DNS записей A и PTR (простое имя, заданное при установке, опция 81),
Vendor Class отсутствует, запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name (15)
- Domain Name Server (6)
- NetBIOS over TCP/IP Name Server (44)
Принтер Epson GT-S55 не требует широковещательного ответа,
имеет случайный номер транзакции, передаёт Host Name (не DNS),
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
Vendor Class - "udhcp 0.9.8", запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
Принтер Canon imageRUNNER2202n (imageRUNNER2204n) не требует широковещательного ответа,
имеет случайный номер транзакции (imageRUNNER2204n - последовательный), передаёт максимальный размер сообщения - 1430 (57),
желаемое время аренды - 8 часов (51),
Vendor Class отсутствует, запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Domain Name (15)
- Host Name (12)
Принтер Canon imageRUNNER2520 не требует широковещательного ответа,
обновления аренды не умеет - каждый цикл запросов начинает с DISCOVERY,
имеет последовательный номер транзакции (0x00000002),
передаёт имя хоста (полное доменное имя), желаемый IP адрес (50),
уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
идентификатор сервера (54),
Vendor Class отсутствует, запрашивает:
- Subnet Mask (1, только при REQUEST)
- Router (3, только при REQUEST)
- Domain Name Server (6, только при REQUEST)
- Host Name (12, только при DISCOVERY)
- Domain Name (15)
- NetBIOS over TCP/IP Name Server (44, только при REQUEST)
- NetBIOS over TCP/IP Name Scope (47, только при REQUEST)
Принтер Canon imageRUNNER2630 хочет широковещательного ответа,
обновления аренды не умеет - каждый цикл запросов начинает с DISCOVERY,
имеет случайный номер транзакции, передаёт максимальный размер сообщения - 1500 (57),
имя хоста (полное доменное имя), желаемый IP адрес (50),
уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
идентификатор сервера (54),
Vendor Class - "Canon iR2630", запрашивает:
- Subnet Mask (1, только при REQUEST)
- Router (3, только при REQUEST)
- Domain Name Server (6, только при REQUEST)
- Host Name (12, только при DISCOVERY)
- Domain Name (15)
- NetBIOS over TCP/IP Name Server (44, только при REQUEST)
Принтер HP LaserJet 5200dtn (Q7543A, JetDirect J7934G)
не требует широковещательного ответа,
имеет случайный номер транзакции, передаёт Host Name (не DNS, "NPIмакадрес"),
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
FQDN имя сообщаемое клиентом и кто отвечает за обновление DNS записей A и PTR (простое имя, заданное при установке, опция 81),
максимальный размер сообщения DHCP - 576 (57),
желаемое время аренды 1 день (51),
Vendor Class - "Hewlett-Packard JetDirect",запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- сервер syslog (7)
- Host Name (12)
- Domain Name (15)
- максимальный размер датаграммы (22)
- идентификатор сервера DHCP (54)
- T1 - интервал времени (58)
- T2 - интервал времени (59)
- сервер SMTP (69)
- где взять дополнительную конфигурацию (18)
- имя TFTP файла с параметрами принтера (144) - не вписался в изменение стандарта
Принтер HP Color LasetJet MFP 179fnw не требует широковещательного ответа,
имеет случайный номер транзакции, передаёт Host Name (не DNS, "HPмакадрес"),
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
Vendor Class - "HP Network Printer",запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- сервер syslog (7)
- Host Name (12)
- Domain Name (15)
- TTL для исходящих от клиента датаграмм (23)
- Interface MTU (26)
- NetBIOS over TCP/IP Name Server (44)
- NetBIOS over TCP/IP Node Type (46)
- предоставленное (DHCPOFFER) время аренды IP адреса (51)
- идентификатор сервера DHCP (54)
- T1 - интервал времени (58)
- T2 - интервал времени (59)
- Directory Agent Information (78)
- Service Location Agent Scope (79)
Принтер HP Color LaserJet Pro MFP M281fdw (M283fdw, M402dn)
не требует широковещательного ответа, имеет постоянный (0x201e0000? 0x4b520000? 0xbefa0000?) номер транзакции, передаёт Host Name (простое имя),
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
FQDN имя сообщаемое клиентом и кто отвечает за обновление DNS записей A и PTR (простое имя, заданное при установке, опция 81),
максимальный размер датаграммы - 65535 (22), максимальный размер сообщения DHCP - 4096 (57),
Vendor Class - "HP LaserJet" ("HP LaserJet", "Hewlett-Packard LaserJet"),
User Class (77) содержит "DMfg=HP;Typ=Printer;Mod=HP Color LaserJet MFP M281fdw;Ser=серийный-номер" (неправильнофоормленный в случае M402dn),
запрашивает:
- Domain Name Server (6)
- Router (3)
- Subnet Mask (1)
- Domain Name (15)
- Host Name (12)
- NetBIOS over TCP/IP Name Server (44)
- FQDN имя сообщаемое клиентом и кто отвечает за обновление DNS записей A и PTR, сервер отвечает флагами (DDNS, 81)
- сервер SMTP (69)
- Network Time Protocol Servers (42)
- информация в формате изготовителя оборудования, формат определяется опцией 60 (vendor class) (43)
- где взять дополнительную конфигурацию (18)
- имя TFTP сервера (66)
- имя загрузочного файла (67)
- адрес сервера TFTP (150)
- сервер syslog (7)
Принтер HP LaserJet Pro 400 MFP M425dn (CF288A) (HP LaserJet Pro 400 MFP M425dw (CF288A))
не требует широковещательного ответа, имеет постоянный (0x50da0000? 0x25ba0000?) номер транзакции, передаёт Host Name (простое имя),
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
FQDN имя сообщаемое клиентом и кто отвечает за обновление DNS записей A и PTR (простое имя, заданное при установке, опция 81),
максимальный размер датаграммы - 65535 (22), максимальный размер сообщения DHCP - 4096 (57),
Vendor Class - "Mfg=Hewlett Packard;Typ=Printer;Mod=;Ser=...;" ("Mfg=Hewlett Packard;Typ=Printer;Mod=HP LaserJet 400 MFP M425dw;Ser=...;") ;
запрашивает:
- Domain Name Server (6)
- Router (3)
- Subnet Mask (1)
- Domain Name (15)
- Host Name (12)
- NetBIOS over TCP/IP Name Server (44)
- FQDN имя сообщаемое клиентом и кто отвечает за обновление DNS записей A и PTR, сервер отвечает флагами (DDNS, 81)
- сервер SMTP (69)
- информация в формате изготовителя оборудования, формат определяется опцией 60 (vendor class) (43)
- где взять дополнительную конфигурацию (18)
- имя TFTP сервера (66)
- имя загрузочного файла (67)
- адрес сервера TFTP (150)
- сервер syslog (7)
ИБП со встроенным сетевым управлением APC Back-UPS HS 500
не требует широковещательного ответа, имеет постоянный номер транзакции (0x12233456),
Vendor Class отсутствует, не может забыть старый DHCP сервер запрашивает:
- Subnet Mask (1)
- Router (3)
Сетевая карта управления ИБП AP9617 A10/AP9619 (NMC ex, поколение 1)
(а также АВР APC AP7724/AP7721)
передаёт неправильно сформатированный с точки зрения wireshark пакет (User Class - "SUMX..." или "ATS...", 77),
не требует широковещательного ответа, имеет последовательный номер транзакции,
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
Vendor Class - APC, запрашивает:
- Domain Name Server (6)
- Router (3)
- Subnet Mask (1)
- Domain Name (15)
- имя TFTP сервера (66)
- имя загрузочного файла (67)
- Boot File Size (13)
- NetBIOS over TCP/IP Name Server (44)
- информация в формате изготовителя оборудования, формат определяется опцией 60 (vendor class) (43)
- T1 - интервал времени (58)
- T2 - интервал времени (59)
- Network Time Protocol Servers (42)
- Time Offset (2)
- Host Name (12)
Сетевая карта управления ИБП AP9630/AP9631 (NMC поколение 2)
передаёт неправильно сформатированный с точки зрения wireshark пакет (User Class - "SUMX...", 77, поправлено?),
не требует широковещательного ответа, имеет последовательный номер транзакции,
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61), имя хоста (не DNS - "apc" и 6 последних цифр MAC адреса; можно поменять; 12);
FQDN имя сообщаемое клиентом и кто отвечает за обновление DNS записей A и PTR (простое имя, заданное при установке, опция 81),
Vendor Class - APC, запрашивает:
- Domain Name Server (6)
- Router (3)
- Subnet Mask (1)
- Domain Name (15)
- имя TFTP сервера (66)
- имя загрузочного файла (67)
- Boot File Size (13)
- NetBIOS over TCP/IP Name Server (44)
- Host Name (12)
- информация в формате изготовителя оборудования, формат определяется опцией 60 (vendor class) (43)
- T1 - интервал времени (58)
- T2 - интервал времени (59)
- Network Time Protocol Servers (42)
- Time Offset (2)
Сетевая карта управления ИБП NetMan 204
не требует широковещательного ответа, имеет случайный номер транзакции,
передаёт имя хоста (не DNS - "netman" и 8 последних цифр MAC адреса или назначенное администратором; 12),
запрашивает:
- Subnet Mask (1)
- Broadcast Address (28)
- Time Offset (2)
- Router (3)
- Domain Name (15)
- Domain Name Server (6)
- Domain Search (119)
- Host Name (12)
- NetBIOS over TCP/IP Name Server (44)
- NetBIOS over TCP/IP Scope (47)
- Interface MTU (26)
- Classless Static Route (121)
- Network Time Protocol Servers (42)
Сетевая карта управления Stulz C7000IOC
не требует широковещательного ответа, имеет постоянный номер транзакции, ничего о себе не передаёт,
запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
- Network Time Protocol Servers (42)
- Network Information Service Domain (40)
- интервал посылки сообщений TCP keepalive (38)
- TTL для исходящих от клиента датаграмм (23)
- TTL для исходящих от клиента TCP пакетов (37)
- посылать ли TCP keepalive c мусором для совместимости со старыми реализациями (39)
- должен ли клиент передавать пакеты с интерфейса на интерфейс (19)
- Interface MTU (26)
Коммутатор KVM Aten CN8000
не требует широковещательного ответа, имеет случайный номер транзакции,
при DISCOVERY и первом REQUEST просит бесконечную аренду, маску, шлюз и серверы DNS;
при последующих DHCPREQUEST ничего не посылает кроме старого адреса и ничего не просит.
Коммутатор HP V1910G (в девичестве 3COM Baseline Switch 2900)
не требует широковещательного ответа, имеет случайный номер транзакции,
имя хоста (простое имя DNS, 12),
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
максимальный размер сообщения - 1152 (57),
Vendor Class - "HPE. HPE 1910-24-PoE+ (190W) Switch",
запрашивает:
- Subnet Mask (1)
- Classless Static Route (121)
- Router (3)
- Domain Name Server (6)
- Domain Name (15)
- Static Route (33!)
- информация в формате изготовителя оборудования, формат определяется опцией 60 (vendor class) (43)
Коммутатор D-Link DGS-1510-52X
не требует широковещательного ответа, имеет постоянный номер транзакции (0xc904c904),
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
Vendor Class - "D-Link CorporationDGS-1510-52X",
запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- имя TFTP сервера (66)
- имя загрузочного файла (67)
- адрес сервера TFTP (150)
SAN HP MSA P2000 G3
не требует широковещательного ответа, имеет случайный номер транзакции,
имя хоста (не DNS - "HP-StorageWorks-MSA-Storage-...", 12),
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
Vendor Class - "udhcp 1.13.3",
запрашивает:
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
- Network Time Protocol Servers (42)
Клиент RHEL/CentOS 5 не требует широковещательного ответа,
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
передаёт Host Name (это не DNS),
имеет случайный номер транзакции, Vendor Class отсутствует, запрашивает:
- Subnet Mask (1)
- Broadcast Address (28)
- Time Offset (2)
- Router (3)
- Domain Name (15)
- Domain Name Server (6)
- Host Name (12)
- Network Information Service Domain (40)
- Network Information Service Servers (41)
- Network Time Protocol Servers (42)
- Interface MTU (26)
Клиент RHEL/CentOS 6 не требует широковещательного ответа,
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
имеет случайный номер транзакции, передаёт Host Name (краткий, или нет?),
Vendor Class отсутствует (или такой - "anaconda-Linux 2.6.32-220.el6.x86_64 x86_64" или "anaconda-Linux 2.6.32-358.el6.x86_64 x86_64"), запрашивает:
- Subnet Mask (1)
- Broadcast Address (28)
- Time Offset (2)
- Classless Static Route (121)
- Domain Name (15)
- Domain Name Server (6)
- Host Name (12)
- Network Information Service Domain (40)
- Network Information Service Servers (41)
- Network Time Protocol Servers (42)
- Interface MTU (26)
- Domain Search (119)
- Router (3)
Клиент RHEL/CentOS 7 не требует широковещательного ответа,
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61; иногда неизвестный тип DUID - 4),
имеет случайный номер транзакции, Vendor Class отсутствует, запрашивает:
- Subnet Mask (1)
- Broadcast Address (28)
- Time Offset (2)
- Classless Static Route (121)
- Domain Name (15)
- Domain Name Server (6)
- Host Name (12)
- Network Information Service Domain (40)
- Network Information Service Servers (41)
- Network Time Protocol Servers (42)
- Interface MTU (26)
- Domain Search (119)
- Router (3)
- Classless Static Route (121) - ещё раз, чтобы точно услышали (добавляется NetworkManager после обновления между 7.3 и 7.5)
- Private/Classless Static Route Microsoft (249) (пдобавляется NetworkManager осле обновления между 7.3 и 7.5)
- Static Route (33!)(добавляется NetworkManager после обновления между 7.3 и 7.5)
- Private/Proxy autodiscovery (252)(добавляется NetworkManager после обновлени между 7.3 и 7.5)
- Network Time Protocol Servers (42) - ещё раз, чтобы точно услышали (добавляется NetworkManager после обновления между 7.3 и 7.5)
- Root Path (17)(добавляется NetworkManager после обновления между 7.3 и 7.5)
Клиент Fedora 21 (?) не требует широковещательного ответа,
передаёт уникальный в подсети идентификатор клиента DHCP (MAC адрес и время, 61),
имеет случайный номер транзакции, передаёт Host Name (не DNS, 12),
максимальный размер сообщения - 1500 (57),
Vendor Class - "dhcpcd-6.0.5:Linux-5.0.21:x86_64:GenuineIntel"), запрашивает:
- Subnet Mask (1)
- Classless Static Route (121)
- Static Route (33!)
- Router (3)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Broadcast Address (28)
- Network Time Protocol Servers (42)
- предоставленное (DHCPOFFER) время аренды IP адреса (51)
- идентификатор сервера DHCP (54)
- T1 - интервал времени (58)
- T2 - интервал времени (59)
- Domain Search (119)
Клиент Debian не требует широковещательного ответа,
имеет случайный номер транзакции, передаёт Host Name (не имеет отношения к DNS),
уникальный в подсети идентификатор клиента DHCP (MAC адрес или MAC адрес и время 61),
Vendor Class отсутствует, запрашивает:
- Subnet Mask (1)
- Broadcast Address (28)
- Time Offset (2)
- Router (3)
- Domain Name (15)
- Domain Name Server (6)
- Domain Search (119)
- Host Name (12)
- NetBIOS over TCP/IP Name Server (44)
- NetBIOS over TCP/IP Scope (47)
- Interface MTU (26)
- Classless Static Route (121)
- Network Time Protocol Servers (42)
- Private/Classless Static Route Microsoft (в новых? 249)
- Static Route (в новых? 33!)
- Private/Proxy autodiscovery (в новых? 252)
Клиент Ubunta 20.04 (и прочие ?) не требует широковещательного ответа,
имеет случайный номер транзакции, передаёт Host Name (не всегда, не имеет отношения к DNS),
уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
максимальный размер сообщения - 65535 (57, не во всех версиях Ubunta?),
Vendor Class отсутствует, запрашивает:
- Subnet Mask (1)
- Time Offset (2)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Interface MTU (26)
- Broadcast Address (28)
- Classless Static Route (121)
- Router (3)
- Static Route (33!)
- Network Information Service Domain (40)
- Network Information Service Servers (41)
- Network Time Protocol Servers (42)
- Domain Search (119)
- Private/Classless Static Route Microsoft (249)
- Private/Proxy autodiscovery (252)
- Root Path (17)
Клиент Linux Mint (?) не требует широковещательного ответа,
имеет случайный номер транзакции, передаёт Host Name (не имеет отношения к DNS),
уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
максимальный размер сообщения - 65535 (57),
Vendor Class отсутствует, запрашивает:
- Subnet Mask (1)
- Time Offset (2)
- Domain Name Server (6)
- Host Name (12)
- Domain Name (15)
- Interface MTU (26)
- Broadcast Address (28)
- Classless Static Route (121)
- Router (3)
- Static Route (33!)
- Network Information Service Domain (40)
- Network Information Service Servers (41)
- Network Time Protocol Servers (42)
- Domain Search (119)
- Private/Classless Static Route Microsoft (249)
- Private/Proxy autodiscovery (252)
- Root Path (17)
Клиент PXE BIOS платформы Intel R2000GZ и
платформы SuperMicro X9DRi-F и
платформы Intel SR2625URLX
(встроен в сетевую карту Intel?)
в DISCOVER передаёт максимальный размер сообщения 1260 (опция 57), UUID клиента PXE (опция 97, RFC-4578),
системная архитектура клиента 0 (IA x86 PC) (опция 93, RFC-4578),
UNDI (Network Device Interface) клиента PXE версии 2.1 (опция 94, RFC-4578),
идентификатор класса поставщика (Vendor class identifier, опция 60): "PXEClient:Arch:00000:UNDI:002001",
номер транзакции - последние 4 байта MAC адреса клиента,
запрашивает очень много (DHCPOFFER и DHCPACK посылается сервером трижды):
- Subnet Mask (1)
- Time Offset (2)
- Router (3)
- Time Server (4!)
- Name Server (5!)
- Domain Name Server (6)
- Resource Location Server (11!)
- Host Name (12)
- Boot File Size (13)
- Domain Name (15)
- Swap Server (16!)
- Root Path (17!)
- Extensions Path (18!)
- максимальный размер датаграммы для сборки клиентом (не менее 576) (22)
- TTL для исходящих от клиента датаграмм (23)
- Broadcast Address (28)
- Network Information Service Domain (40)
- Network Information Service Servers (41)
- Network Time Protocol Servers (42)
- информация в формате изготовителя оборудования (например, PXE), формат определяется опцией 60 (vendor class) (43)
- требуемый клиенту IP адрес (DHCPDISCOVER) (50!)
- предоставленное (DHCPOFFER) время аренды IP адреса (51)
- идентификатор сервера DHCP (54)
- T1 - интервал времени (58)
- T2 - интервал времени (59)
- Vendor Class (60)
- имя TFTP сервера (66)
- имя загрузочного файла (67)
- PXE в формате поставщика (RFC-4578) (128-135)
Клиент PXE UEFI сетевой карты LR-Link PCIe x8 40G LREC9902BF-2QSFP+ (Intel XL710-Q2)
в DISCOVER передаёт максимальный размер сообщения 1472 для DISCOVERY и 65280 для REQUEST(опция 57),
UUID клиента PXE (опция 97, RFC-4578),
UNDI (Network Device Interface) клиента PXE версии 3.16 (опция 94, RFC-4578),
системная архитектура клиента 7 (EFI BC) (опция 93, RFC-4578),
идентификатор класса поставщика (Vendor class identifier, опция 60): "PXEClient:Arch:00007:UNDI:003016",
случайный номер транзакции,
запрашивает очень много):
- Subnet Mask (1)
- Time Offset (2)
- Router (3)
- Time Server (4!)
- Name Server (5!)
- Domain Name Server (6)
- Host Name (12)
- Boot File Size (13)
- Domain Name (15)
- Root Path (17!)
- Extensions Path (18!)
- максимальный размер датаграммы для сборки клиентом (не менее 576) (22)
- TTL для исходящих от клиента датаграмм (23)
- Broadcast Address (28)
- Network Information Service Domain (40)
- Network Information Service Servers (41)
- Network Time Protocol Servers (42)
- информация в формате изготовителя оборудования (например, PXE), формат определяется опцией 60 (vendor class) (43)
- требуемый клиенту IP адрес (DHCPDISCOVER) (50!)
- предоставленное (DHCPOFFER) время аренды IP адреса (51)
- идентификатор сервера DHCP (54)
- T1 - интервал времени (58)
- T2 - интервал времени (59)
- Vendor Class (60)
- имя TFTP сервера (66)
- имя загрузочного файла (67)
- UUID клиента PXE (опция 97!, RFC-4578)
- PXE в формате поставщика (RFC-4578) (128-135)
Клиент PXE Virtual Box передаёт максимальный размер сообщения 1472 (опция 57),
UUID клиента PXE (опция 97, RFC-4578),
системная архитектура клиента 0 (IA x86 PC) (опция 93, RFC-4578),
UNDI (Network Device Interface) клиента PXE версии 2.1 (опция 94, RFC-4578),
идентификатор класса поставщика (Vendor class identifier, опция 60): "PXEClient:Arch:00000:UNDI:002001",
случайный номер транзакции, информация о классе пользователя (опция 77): "iPXE7..." (wireshark считает неправильно оформленным),
уникальный в подсети идентификатор клиента DHCP (MAC адрес, 61),
Etherboot (опция 175) - что это?,
запрашивает
- Subnet Mask (1)
- Router (3)
- Domain Name Server (6)
- сервер syslog (7)
- Host Name (12)
- Domain Name (15)
- Root Path (17!)
- Interface MTU (26)
- информация в формате изготовителя оборудования (например, PXE), формат определяется опцией 60 (vendor class) (43)
- Vendor Class (60)
- имя TFTP сервера (66)
- имя загрузочного файла (67)
- список поиска доменов DNS (search в /etc/resolv.conf) - RFC-3397 (domain-search)
- PXE в формате поставщика (RFC-4578) (128-135)
- Etherboot (175)
- RFC 8572 Secure Zero Touch Provisioning (SZTP). K. Watsen. I. Farrer. M. Abrahamsson. April 2019
- RFC 8520 Manufacturer Usage Description Specification. E. Lear. R. Droms. D. Romascanu. March 2019
- RFC 8357 Generalized UDP Source Port for DHCP Relay. N. Shen. E. Chen. March 2018
- RFC 7724 Active DHCPv4 Lease Query. K. Kinnear. M. Stapp. B. Volz. N. Russell. December 2015
- RFC 7618 Dynamic Allocation of Shared IPv4 Addresses. Y. Cui. Q. Sun. I. Farrer. Y. Lee. Q. Sun. M. Boucadair. August 2015
- RFC 7291 DHCP Options for the Port Control Protocol (PCP). M. Boucadair. R. Penno. D. Wing. July 2014
- RFC 6926 DHCPv4 Bulk Leasequery. K. Kinnear. M. Stapp. R. Desetti. B. Joshi. N. Russell. P. Kurapati. B. Volz. April 2013
- RFC 6925 The DHCPv4 Relay Agent Identifier Sub-Option
- RFC 6842 Client Identifier Option in DHCP Server Replies. N. Swamy. G. Halwasia. P. Jhingran. January 2013
- RFC 6731 Improved Recursive DNS Server Selection for Multi-Interfaced Nodes. T. Savolaine. J. Kato. T. Lemon. December 2012
- RFC 6704 Forcerenew Nonce Authentication. D. Miles. W. Dec. J. Bristow. R. Maglione. August 2012
- RFC 6656 Description of Cisco Systems' Subnet Allocation Option for DHCPv4. R. Johnson. K. Kinnear. M. Stapp. July 2012
- RFC 6607 Virtual Subnet Selection Options for DHCPv4 and DHCPv6. K. Kinnear. R. Johnson. M. Stapp. April 2012
- RFC 5986 Discovering the Local Location Information Server (LIS). M. Thomson. J. Winterbottom. September 20102
- RFC 5859 TFTP Server Address Option for DHCPv4. R. Johnson. June 2010
- RFC 5107 DHCP Server Identifier Override Suboption. R. Johnson. J. Jumarasamy. K. Kinnear. M. Stapp. February 2008
- RFC 5071 Dynamic Host Configuration Protocol Options Used by PXELINUX. D. Hankins. December 2007
- RFC 5010 The Dynamic Host Configuration Protocol Version 4 (DHCPv4) Relay Agent Flags Suboption. K. Kinnear. M. Normoyle. M. Stapp. September 2007
- RFC 4702 The Dynamic Host Configuration Protocol (DHCP) Client Fully Qualified Domain Name (FQDN) Option. M. Stapp. B. Volz. Y. Rekhter. October 2006
- RFC 4578 Dynamic Host Configuration Protocol (DHCP) Options for the Intel Preboot eXecution Environment (PXE). M. Johnston. S. Venaas. November 2006
- RFC 4388 Dynamic Host Configuration Protocol (DHCP) Leasequery. R. Woundy. K. Kinnear. February 2006
- RFC 4243 Vendor-Specific Information Suboption for the DHCP Relay Agent Option. M. Stapp. R. Johnson. T. Palaniappan. December 2005
- RFC 4174 The IPv4 Dynamic Host Configuration Protocol (DHCP) Option for the Internet Storage Name Service. C. Monia. J. Tseng. K. Gibbons. September 2005
- RFC 4030 The Authentication Suboption for the DHCP. M. Stap. T. Lemon. March 20056
- RFC 4014 Remote Authentication Dial-In User Service (RADIUS) Attributes Suboption for the DHCP. R. Drom. J. Schnizlein. February 2005
- RFC 3993 Subscriber-ID Suboption for the Dynamic Host Configuration Protocol (DHCP) Relay Agent Option. R. Johnson. T. Palaniappan. M. Stapp. March 2005
- RFC 3942 Reclassifying Dynamic Host Configuration Protocol version 4 (DHCPv4) Options. B. Volz. November 2004
- RFC 3527 Link Selection sub-option for the Relay Agent Information Option for DHCPv4. K. Kinnear. M. Stapp. R. Johnson. J. Kumarasamy. April 2003
- RFC 3442 The Classless Static Route Option for Dynamic Host Configuration Protocol (DHCP) version 4. T. Lemon. S. Cheshire. B. Volz. December 2002
- RFC 3397 Dynamic Host Configuration Protocol (DHCP) Domain Search Option. B. Aboba. S. Cheshire. November 2002
- RFC 3396 Encoding Long Options in the Dynamic Host Configuration Protocol (DHCPv4). T. Lemon. S. Cheshire. November 2002
RFC 3315 Dynamic Host Configuration Protocol for IPv6 (DHCPv6). Droms, R., Bound, J., Volz, B., Lemon, T., Perkins, C., and M. Carney.July 2003
- RFC 3203 DHCP reconfigure extension. Y. T'Joens. C. Hublet. P. De Schrijver. December 2001
- RFC 3118 Authentication for DHCP Messages. R. Droms. W. Arbaugh. June 2001
- RFC 3046 DHCP Relay Agent Information Option. M. Patrick. January 2001
- RFC 3004 The User Class Option for DHCP. G. Stump. R. Droms. Y. Gu. R. Vyaghrapuri. A. Demirtjis. B. Beser. J. Privat. November 2000
- RFC 2937 The Name Service Search Option for DHCP. C. Smith. September 2000
- RFC 2563 DHCP Option to Disable Stateless Auto-Configuration in IPv4 Clients. R. Troll. May 1999
- RFC 2132 DHCP Options and BOOTP Vendor Extensions. S. Alexander, R. Droms. March 1997
- RFC 2131 Dynamic Host Configuration Protocol. R. Drom. March 1997
- RFC 1542 Clarifications and Extensions for the Bootstrap Protocol. W. Wimer. October 1993
- RFC 1533 DHCP Options and BOOTP Vendor Extensions. S. Alexander and R. Droms. October 1993
- RFC 1497 BOOTP Vendor Information Extensions. J. Reynolds. August 1993
- RFC 951 Bootstrap Protocol. W.J. Croft, J. Gilmore. Sep-01-1985
- RFC 906 Bootstrap loading using TFTP. R. Finlayson. Jun-01-1984
- официальный список типов элементов дополнительной информации
- BOOTP/DHCP сервер от ISC (поддержка закончена в 2022 году)
- документация ISC DHCP
- Подавление DHCP серверов с помощью dhcpdrop
- Передача статических маршрутов в DHCP
|
Bog BOS: Протокол BOOTP/DHCP
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru