Последнее изменение файла: 2018.01.05
Скопировано с www.bog.pp.ru: 2023.10.01
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 - всем в локальной сети, номера которой я не знаю) запрос
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 адрес клиента, предполагаемый самим клиентом (должен уметь отвечать на запросы ARP) или 0.0.0.0
IP адрес клиента, возвращаемый сервером (ip, fixed-address)
IP адрес следующего сервера (сюда же будет направлен TFTP запрос, sa, next-server)
IP адрес прокси (это не обязательно маршрутизатор!)
MAC адрес клиента (ha)
имя сервера (64 байта)
имя загрузочного файла (128 байт, filename)
дополнительная информация (vendor-specific или options, 64 байта для
BOOTP, переменная длина для DHCP)
Формат дополнительной информации (RFC 2132): первые 4 байта
имеют значение 99.130.83.99, что позволяет определить ее наличие
(может быть использовано другое согласованное значение, определяющее
собственный формат этого поля).
Далее расположен список элементов (имена и тексты в NVT ASCII).
Каждый элемент имеет однобайтовую
этикетку, описывающую его тип. Типы 0 и 255 состоят только из этикетки
(0 - заполнитель, 255 - конец данных). Остальные типы элементов вторым
байтом имеют длину элемента (в скобках упомянуты тэги /etc/bootptab
и /etc/dhcpd.conf):
маска подсети (sm, subnet-mask)
смещение времени относительно UTC (в секундах, time-offset)
список IP адресов маршрутизаторов (первый - предпочтительный, gw, routers)
список IP адресов серверов времени (RFC 868, не NTP!)
список IP адресов серверов имен (IEN 116, не DNS!)
список IP адресов DNS серверов (domain-name-servers)
список IP адресов серверов syslog (lg, log-servers)
список IP адресов серверов "Quote of the Day" (RFC 865)
список IP адресов серверов печати (LPR/LPD, RFC 1179)
список IP адресов серверов Imagen Impress
список IP адресов серверов поиска ресурсов (RFC 887)
доменное имя хоста клиента, возможно только локальная часть (hn, host-name)
число блоков в загрузочном файле (по 512 байт, до 64k, bs)
имя файла для coredump
имя домена клиента (domain-name)
IP адрес swap сервера
путь монтирования диска root
имя файла (берется затем клиентом с помощью TFTP) с продолжением
дополнительной информации
должен ли клиент передавать пакеты с интерфейса на интерфейс, т.е.
работать маршрутизатором (forwarding, ip-forwarding)
разрешать ли source routing IP пакетов
фильтры для source routing
максимальный размер датаграммы для сборки клиентом (не менее 576)
TTL для исходящих от клиента датаграмм
время ожидания для алгоритма автораскрытия MTU (RFC 1191)
таблица значений MTU для алгоритма автораскрытия MTU (RFC 1191)
MTU интерфейса (не менее 68)
все ли прямо подключенные подсети имеют одинаковый MTU
широковещательный IP адрес локальной подсети
использовать ли ICMP для автораскрытия маски подсети
отвечать ли на ICMP запросы автораскрытия маски подсети
использовать ли механизм поиска маршрутизаторов (RFC 1256, router-discovery)
IP адрес сервера механизма поиска маршрутизаторов
список статических маршрутов в виде списка пар: сеть (нельзя
задавать 0.0.0.0), адрес маршрутизатора (а маска?)
использовать ли "хвосты" в канальных кадрах (RFC 893)
список адресов серверов имен NetBIOS over TCP/IP (RFC 1001, RFC 1002)
список адресов серверов NBDD NetBIOS over TCP/IP (RFC 1001, RFC 1002)
тип узла NetBIOS over TCP/IP (RFC 1001, RFC 1002)
область NetBIOS over TCP/IP (RFC 1001, RFC 1002)
список IP адресов серверов шрифтов X Window System
список IP адресов менеджеров дисплея (xdm) X Window System
требуемый клиенту IP адрес (DHCPDISCOVER)
запрашиваемое (DHCPDISCOVER, DHCPREQUEST) или предоставленное
(DHCPOFFER) время аренды IP адреса (в секундах относительно момента запроса)
использовать ли поля имени сервера и имени загрузочного файла для передачи
дополнительных опций (DHCP)
тип сообщения DHCP (DHCPDISCOVER, DHCPOFFER, DHCPREQUEST, DHCPDECLINE,
DHCPACK, DHCPNAK, DHCPRELEASE, DHCPINFORM)
идентификатор сервера DHCP (IP адрес), указывается сервером в DHCPOFFER,
чтобы клиент мог различить предложения от различных серверов (возможно
также указание в DHCPACK и DHCPNAK); указывается клиентом в DHCPREQUEST,
чтобы показать, какое предложение он принял
список кодов опций, значения которых клиент хочет узнать от сервера
текст сообщения об ошибке (DHCPNAK, DHCPDECLINE)
максимальный размер сообщения DHCP, которое клиент готов принять
(DHCPDISCOVER, DHCPREQUEST)
T1 - интервал времени (в секундах), через который клиент DHCP должен
перейти в режим запроса подтверждения на право владения IP адресом
(RENEWING), по умолчанию - 0.5 от срока аренды
T2 - интервал времени (в секундах), через который клиент DHCP должен
перейти в режим получения нового IP адреса (REBINDING),
по умолчанию - 0.875 от срока аренды
используется DHCP клиентом для указания варианта конфигурации
(vendor class), сервер возвращает информацию только в формате
изготовителя оборудования
уникальный в подсети идентификатор клиента DHCP (например, MAC адрес
или полное доменное имя), в протоколе BOOTP для идентификации
клиента использовался его MAC адрес
имя домена NIS+
список IP адресов серверов NIS+
имя TFTP сервера, если поле имени сервера использовано под дополнительные
опции (DHCP)
имя загрузочного файла, если поле имени загрузочного файла использовано под
дополнительные опции (DHCP)
список IP адресов Mobile IP Home Agent
список IP адресов серверов SMTP (smtp-server)
список IP адресов серверов POP3
список IP адресов серверов NNTP
список IP адресов серверов WWW (HTTP ?)
список IP адресов серверов finger
список IP адресов серверов IRC
список IP адресов серверов StreetTalk
список IP адресов серверов StreetTalk Directory Assistance
тип пользователя (задаётся клиентом)
информация от посредника (relay) о клиенте; содержит от 1 до 255 подопций: 1 - circuit ID, 2 - Remote ID
версия универсального сетевого интерфейса PXE (UNDI)
универсальный идентификатор клиента PXE (UUID)
статические маршруты
- 254: зарезервированы для локального использования
(Tномер, option option-номер)
Средств обеспечения безопасности нет, в ответ клиент
может получить фальшивый пакет. Поэтому на периферии сети порты UDP/67
и UDP/68 должны быть заблокированы сетевым экраном,
а на сервере BOOTP должны быть проделаны дырки в
ipchains (привожу формат /etc/sysconfig/ipchains):
Аналогичные дырки надо проделать для исходящих пакетов
сервера и пакетов, пересылаемых DHCP прокси.
Если в ядре включена фильтрация поддельных IP-адресов
(martian address filtering), то ее придется отключить (по крайней мере для
адресов 0.0.0.0 и 255.255.255.255).
Экран можно усилить, заменив "универсальные"
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 (должен содержать
идентификатор сервера), либо запрос на возобновление аренды
адреса после перезагрузки клиента или истечения предыдущего интервала
аренды; клиент может выбирать из нескольких предложений 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 адрес был выделен другому);
клиент начинает всё с начала
Устанавливается и на нынешние версии 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)):
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-7.el5 (CentOS5.1)
содержит BOOTP/DHCP сервер dhcpd и прокси dhcrelay от ISC
(имеются также пакеты dhclient и dhcp-devel).
Поддерживается работа DHCP клиента, сервера и прокси.
Обеспечивается динамическое изменение DNS. Перед выдачей динамического адреса клиенту
запись об этом заносится в конец специального файла (dhcpd.leases(5),
/var/lib/dhcp/dhcpd.leases) для страховки, т.е. правильным является
последнее значение. Время от времени
создаётся новый файл и переименовывается, чтобы размер файла не вырос
до бесконечности. Файл содержит записи аренды, объявления хостов, групп и
подгрупп в формате dhcpd.conf
(объявления хостов, групп и подгрупп для объектов, динамически созданных
с помощью OMAPI, см. ниже). Каждая запись аренды содержит выделенный
IP-адрес, время начала и конца аренды в человеколюбивом формате (но в UTC),
тип оборудования и MAC адрес, идентификатор клиента, host-name, abandoned
(адрес нельзя было выдавать), текущее и следующее состояния аренды,
agent.circuit-id и agent.remote-id (см. описание опций).
В версии 3.0 убрана поддержка неизвестных серверу опций в виде "option-144",
теперь их необходимо описывать явно.
Журнал записывается на
syslog, источник - DAEMON.
Процедура запуска в файле /etc/rc.d/init.d/dhcpd
(start, stop, restart, status). Параметры командной строки хранятся в файле
/etc/sysconfig/dhcpd. Для обеспечения запуска при загрузке надо выполнить
chkconfig --level 2345 dhcpd on
После запуска номер процесса сохраняется в файле
/var/run/dhcpd.pid. После изменения конфигурационного файла /etc/dhcpd.conf
(описание - dhcpd.conf(5), dhcp-options(5), dhcp-eval(5))
необходимо перезапустить сервер.
Кроме сервера протокола BOOTP обеспечивает сервер протокола DHCP, поэтому
имеет множество параметров настройки, но для каждого клиента BOOTP
достаточно иметь секцию host в /etc/dhcpd.conf (subnet, естественно,
общий для всей подсети), например, обеспечение загрузки сетевого принтера
HP JetDirect для dhcp-2.0:
-play имя-файла (проиграть все транзакции из файла)
список интерфейсов, на которых слушать широковещательные пакеты
(по умолчанию все активные широковещательные интерфейсы)
Протокол OMAPI позволяет подсоединяться к серверу
по TCP/7911 (с аутентификацией, TSIG), чтобы проверить его состояние или
изменить конфигурацию или содержимое БД (просмотр, создание, удаление,
просмотр и изменение атрибутов для объектов типа аренда, хост, группа,
управление). Имеется командная оболочка omshell(1).
Прокси dhcrelay(8) транслирует запросы клиентов
и ответы серверов между сегментами сети (конфигурационного файла нет):
-i интерфейс (интерфейс, на котором слушать широковещательные пакеты;
можно задавать несколько раз; по умолчанию все активные
широковещательные интерфейсы)
-p UDP-порт (по умолчанию - 67, клиентский порт принимается на 1 больше)
-q (не выводить copyright при запуске)
-a (добавлять во все запросы и удалять из ответов опции прокси агента
Circuit ID (имя интерфейса, на котором получен запрос) и Agent ID
(поле giaddr) )
-c число (отбрасывать пакеты, прошедшие более указанного числа
промежуточных узлов; 10; защита от зацикливания)
-m append | replace | forward | discard (что делать с пакетами,
которые уже содержат опции прокси агента)
-D (выбрасывать все ответа серверов, не содержашие наш Agent ID)
Конфигурационный файл имеет свободный текстовый формат.
Комментарии начинаются со знака '#' и продолжаются до конца строки.
Регистр ключевых слов значения не имеет. Файл состоит из утверждений двух
типов: параметры и объявления.
Объявления описывают топологию сети и группируют параметры.
Объявления могут быть вложенными.
Параметры и простые объявления завершаются
точкой с запятой. Определяющие вложенную область действия объявления
заключают её в фигурные скобки и не имеют завершающей точки с запятой.
Параметры внутри объявления д.б. описаны до вложенных объявлений.
Для каждой подсети, к которой подключён DHCP сервер,
должно быть объявление подсети subnet (даже если он её не обслуживает).
Если подсети подключены к одному интерфейсу, то объявления этих подсетей
д.б. помещены внутрь объявления shared-network. Кстати, с помощью
bootp прокси через интерфейс могут быть видны сегменты, не подключённые
непосредственно. Если адреса клиентам внутри подсети должны выделяться
динамически, то необходимо объявить пул адресов внутри подсети
pool (все пулы на одном интерфейсе - общие, невозможно определить
к какой подсети на разделяемом интерфейсе принадлежит клиент).
Для клиентов со статическими адресами необходимо поместить
объявление host внутрь объявления подсети. Если требуется загружать
клиента в различных подсетях, то для него можно описать несколько
объявлений host (если ему необходимо назначить различные параметры в
зависимости от подсети) или несколько параметров fixed-address в одном
объявлении. Объявления различного
типа с одинаковыми параметрами можно группировать внутри объявления
group. Клиенты с динамически выделяемыми адресами могут быть
сгруппированы согласно объявлению классов class
(класс клиента определяется в момент запроса в соответствии
с передаваемыми им опциями - например, идентификатором клиента).
Имеется также грязный хак по распределению клиентов по подклассам
исключительно с целью оптимизации времени работы сервера.
Возможно объявление класса (spawning class), автоматически порождающего
подклассы в зависимости от значения получаемого от клиента параметра.
Имеются условные операторы.
Перед объявлениями самого верхнего уровня могут быть указаны
глобальные параметры. Пример смотри в предыдущем параграфе.
Поиск параметров для клиента происходит в следующей последовательности
(приоритет имеет более конкретная область действия):
объявление host (по идентификатору клиента или MAC адресу;
сначала просматриваются те, которые содержат фиксированный IP адрес,
подходящий для подсети клиента, затем не содержащие фиксированных
адресов)
объявление class
объявление pool (по IP адресу)
объявление subnet (по IP адресу)
объявление shared-network (по IP адресу)
Синтаксис:
shared-network имя {
[ параметры ]
[ объявления ]
}
subnet IP-адрес-сети netmask маска {
[ параметры ]
[ объявления ]
}
range [ dynamic-bootp ] начальный-IP-адрес [ конечный-IP-адрес ];
флаг dynamic-bootp разрешает выделение адреса из пула bootp клиентам
host имя-хоста {
[ параметры ]
[ объявления ]
}
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 адреса
как исходящие от одного клиента даже, если идентификаторы клиента
не совпадают; полезно, если на одном компьютере установлено несколько ОС;
нарушение стандарта)
allow declines; (обрабатывать ли сообщения DHCPDECLINE от клиента)
Для управления выделением адресов из пула внутри
объявления пула могут быть использованы утверждения allow и deny
со следующими параметрами (они обрабатываются до выделения адреса):
known-clients;
unknown-clients;
members of "имя-класса";
dynamic bootp clients; (выделять ли адреса из пула клиентам BOOTP)
all clients;
Параметры (там, где возможно, приведены значения по умолчанию):
always-broadcast off; (посылать ответы в широковещательном режиме даже,
если клиент этого не запрашивал)
always-reply-rfc1048 off; (всегда посылать ответы в формате rfc1048
клиентам BOOTP для задания опций)
[ not ] authoritative; (по умолчанию сервер считается неуполномоченным -
форма "защиты от дурака"; явно направленные запросы обрабатываются несмотря на "not")
boot-unknown-clients on;
default-lease-time секунд; (1 день)
dynamic-bootp-lease-cutoff W YYYY/MM/DD HH:MM:SS; (время в UTC; W - день
недели, 0 - воскресенье; вообще-то клиенты BOOTP не знают, что время
аренды адреса может закончиться, поэтому обычно адрес выдаётся им
навсегда, но иногда бывает известно, что все компьютеры выключаются на ночь
и т.п.)
dynamic-bootp-lease-length секунд; (адрес освобождается, если за указанный
период не было запросов; клиент дожен перезагружаться достаточно часто,
чтобы его адрес не оказался выделен кому-то другому)
filename "имя-загрузочного-файла"; (см. протокол BOOTP)
fixed-address IP-адрес [, IP-адрес ... ]; (используется в объявлении
host; если указано несколько адресов, то клиенту выделяется адрес,
соответствующий его подсети; если не подходит ни один, то клиент не
соответствует объявлению host)
get-lease-hostnames off; (использовать DNS для определения по IP-адресу
значения опции hostname)
hardware ethernet MAC-адрес (в формате 00:11:22:33:44:ff)
lease-file-name /var/lib/dhcp/dhcpd.leases (имя файла для хранения
информации о выделенных адресах; может указываться только в глобальной
области)
max-lease-time секунд; (клиенты BOOTP не ограничиваются)
min-lease-time секунд;
min-secs секунд; (позволяет сконфигурировать запасной сервер, который
вступает в работу, если клиент ждёт ответа более указанного количества секунд)
next-server доменное-имя-или-IP-адрес; (по умолчанию - адрес DHCP сервера)
omapi-port порт; (порт протокола OMAPI управления DHCP сервером)
one-lease-per-client off; (при получении от клиента запроса DHCPREQUEST сервер
освобождает адрес, ранее выданный этому клиенту; нельзя использовать для
клиентов, имеющих несколько интерфейсов или помнящих старые адреса
при пеермещении из одной подсети в другую)
pid-file-name /var/run/dhcpd.pid;
ping-check on; (проверять с помощью ICMP Echo динамически выделенный адрес
перед тем как сообщить его клиенту; вносит задержку на запрос DHCPDISCOVER)
ping-timeout 1; (секунд)
server-identifier идентификатор-сервера; (первый IP адрес интерфейса, по которому
пришёл запрос; то же самое можно задать опцией dhcp-server-identifier);
server-name имя-сервера; (в кавычках)
site-option-space имя; (из какого пространства опций брать локальные, т.е.
с номером более 128, опции)
stash-agent-options off; (запоминать данные о прокси, передавшем запрос
от этого клиента при начальном выборе адреса, и использовать их
при обновлении аренды; это бывает необходимо, т.к. при обновлении
используются нешироковещательные запросы, которые могут приходить
другим путём)
use-host-decl-names off; (использовать имена, указанные в объявлениях host
как значения опции host-name по умолчанию)
use-lease-addr-for-default-route off; (вместо адреса шлюза посылать
выделенный адрес; обход какой-то проблемы Win95)
vendor-option-space строка; (какое пространство опций использовать)
option имя значение; (флаг: on или off;
устаревшие опции не упоминаю;
значения опций используются как при создании ответов сервера, так и извлекаются
из запросов клиентов при вычислении выражений, условий и поиске класса;
смысл опций описан выше)
option all-subnets-local флаг; (все подсетки имеют одинаковый MTU)
option arp-cache-timeout uint32; (секунд)
option bootfile-name строка;
option boot-size uint16; (в блоках по 512 байт)
option broadcast-address ip-address;
option default-ip-ttl uint8;
option default-tcp-ttl uint8;
option dhcp-client-identifier строка; (используется в объявлении host
для выбора нужного по входящему запросу; иногда в начале строки необходимо
добавить \0)
option dhcp-lease-time uint32; (используется в запросах; значение в ответах
сервера устанавливается в соответствии с параметрами max-lease-time и
default-lease-time)
option netbios-name-servers список-IP-адресов-через-запятую; (приоритетный -
вперёд; NBNS (RFC 1001/1002) больше известен под именем WINS)
option netbios-node-type uint8; (1 - использовать только широковещательные запросы,
2 - только WINS, 4 - сначала широковещательные запросы, затем WINS, 8 - сначала WINS,
затем широковещательные запросы)
пространство опций agent (добавляется к запросам клиента прокси агентом;
draft-ietf-dhc-agent-options-11.txt)
option agent.circuit-id string; (поможет агенту определить канал для
пересылки ответа сервера)
option agent.remote-id string; (адрес клиента с точки зрения агента:
caller ID и т.п.)
пространство опций fqdn (ietf-dhc-fqdn-option-00.txt; см. ddns ниже)
пространство опций NETWARE/IP (RFC 2242)
option имя code номер = определение-структуры; (определение своих опций; можно
использовать номера, зарезервированные для локального использования;
определение структуры может быть следующим
boolean
[ unsigned | signed ] integer [ 8 | 16 | 32 ]
ip-address
text (ASCII)
string (последвательность байт в виде строки или шестнадцатеричной
последовательности вида 17:23:19:a6:42:ea)
encapsulate имя-пространства (опция кодируется как список опций)
Условие в операторе if/elsif в зависимости от значения
опций в запросе задаётся в виде булевского выражения (null в любой части выражения
приводит к результату null для всего выражения)
выражение-1 = выражение-2
булевское-выражение-1 and булевское-выражение-2
булевское-выражение-1 or булевское-выражение-2
not булевское-выражение
exists имя-опции
known (т.е. имеется объявление host для этого клиента)
static
Значение параметра может задаваться в виде выражения.
Выражения также используются для условных описаний параметров.
Имеются следующие выражения по извлечению данных:
substring (выражение, смещение, длина)
suffix (выражение, длина)
option имя-опции-в-запросе
config-option имя-опции-в-конфиге
hardware
packet (смещение, длина)
строка в кавычках
шестнадцатеричная последовательность вида 17:23:19:a6:42:ea
Сервер поддерживает протокол восстановления (failover,
draft-ietf-dhc-failover-07.txt) - два DHCP сервера разделяют общий пул
динамически распределяемых адресов и подменяют друг друга в случае
падения. Протокол не стандартизован (и недодуман) до конца - чувствуйте себя
бета-тестерами, если хотите. Описание опускаю.
Сервер поддерживает (описание опускаю) протокол
динамического обновления DNS, используя
следующие алгоритмы (задаётся параметром ddns-update-style - требуется
указать хотя бы none, иначе сервер не запустится; TSIG и DNSSEC не реализованы):
ad-hoc (экспериментальный) - нестандартный и признанный устаревшим
interim (временный) - соответствует проектам стандартов
draft-ietf-dhc-ddns-resolution-??.txt, draft-ietf-dhc-fqdn-option-??.txt
и draft-ietf-dnsext-dhcid-rr-??.txt, но не полностью
не реализованный пока алгоритм, соответствующий будущему стандарту
Возможно назначить выполнение блока операторов при
наступлении одного из типов событий: выделение адреса (commit),
освобождение (release), истечение времени аренды (expiry).
Пакет dhclient-3.0.1-30_FC3 (FC3) содержит клиент протокола
DHCP от ISC. Пытается настроить все активные широковещательные интерфейсы,
делая широковещательные запросы на них к серверам DHCP.
Конфигурационный файл - /etc/dhclient.conf (dhclient.conf(5));
список арендованных адресов - /var/lib/dhcp/dhclient.leases
(dhclient.leases(5) и описание объявления lease в dhclient.conf),
его можно подсунуть клиенту, если ожидается отсутствие
DHCP сервера. Для управления клиентом можно использовать тот же
OMAPI протокол, что и для управления сервером: приостановка работы,
возобновление работы с переконфигурацией всех интерфейсов, завершение работы.
Для обновления использует не широковещательный запрос, а непосредственный IP адрес сервера,
выдавшего IP адрес.
Параметры запуска:
-p UDP-порт (по умолчанию - 68)
-s IP-адрес-сервера (по умолчанию делается широковещательная посылка на
255.255.255.255)
[-n] -w (не завершаться, если нет широковещательных интерфейсов;
в дальнейшем можно использовать omshell, чтобы извещать
клиента о появлении или исчезновении интерфейсов)
список интерфейсов
Синтаксис файла конфигурации такой же, как и у файла
конфигурации сервера. Параметры и объявления:
права доступа и области действия:
reject IP-адрес-плохого-сервера;
interface имя-интерфейса { параметры и объявления ... } (для разных
интерфейсов могут потребоваться различные значения параметров;
не может включать объявления lease и alias)
pseudo имя-виртуального-интерфейса реальное-имя-интерфейса
{ параметры ... } (отдельные параметры и машина состояний;
необходимо обеспечить различные идентификаторы клиента для интерфейсов и
dhclient-script-ы; необходим, если у клиента несколько подсетей на
одном интерфейсе)
media "параметр" [, параметр ... ]; (для устройств, неспособных
автоматически распознать режим работы, клиент по очереди устанавливает
режим работы интерфейса (через ifconfig?) и пытается получить
ответ сервера)
rebind дата; (время перехода в режим получения новой аренды)
expire дата; (время прекращения использования арендованного адреса)
описание дополнительной подсети на том же интерфейсе, для которого
запрашивается аренда:
alias {
interface "имя-интерфейса";
fixed-address IP-адрес;
option subnet-mask маска-подсети;
}
Скрипт dhclient-script вызывается dhclient для установки
интерфейса до выдачи запроса серверу, при проверка предложенного адреса,
для полной установки интерфейса, при проверке предустановленой аренды
при отсутствии сервера и при полном отсутствии информации об адресе.
При вызове передаётся переменная окружения reason:
MEDIUM (установка типа интерфейса, передаются параметры
interface, medium)
PREINIT (первоначальная установка интерфейса перед посылкой запроса,
передаются параметры interface, medium и м.б. alias_ip_address,
который необходимо удалить с интерфейса)
BOUND (new_ip_address, interface, medium; каждая полученная опция
передаётся через переменную, имя переменной делается из имени опции
заменой "-" на "_" и добавления "new_" в начале;
запятые в списках серверов заменяются на пробелы;
alias_ip_address и alias_...)
RENEW (в дополнение к переменым new_... передаются переменные old_...)
REBIND (в дополнение к RENEW очищает таблицу ARP)
REBOOT (аналогично BOUND)
EXPIRE (удалить всё связанное со старыми параметрами как в RENEW)
FAIL (связаться с сервером не удалось, параметры из lease тоже
неверны)
TIMEOUT (связаться с сервером не удалось, однако обнаружены параметры
из объявления lease или старая аренда)
Если DHCP сервер раздаёт адреса NTP серверов,
то на сервере NTP необходимо добавить в /etc/sysconfig/network строку PEERNTP=no,
иначе dhclient будет "улучшать" /etc/ntp.conf.
Microsoft Windows 2000 Server запрашивает (идентификатор
клиента - его MAC адрес; vendor class identifier - "MSFT 5.0"):