8. DHCP
Понятие
DHCP - Dynamic Host Configuration Protocol
Является развитием (обратно совместим) с BOOTP
BOOTP в свою очередь развился из протокола RARP
Основная задача - предоставление конечным узлам настроек, необходимых для работы сети
Может гибко управлять IP-адресами
Выдавать узлам неиспользуемые адреса в аренду на фиксированный срок и помечать адреса как неиспользуемые, если аренда не продлена
Выдавать узлам адреса по составленному списку
Не гарантирует отсутствие конфликтов, но заметно снижает вероятность их возникновения
Типы аренды адресов
Сервер выдает IP-адрес клиенту одним из следующих методов:
Динамически - адрес выбирается из пула свободных адресов и при непродлении аренды возвращается в пул
Вручную - клиенту сопоставляется постоянный адрес
Автоматически - адреса для новых клиентов выбираются из пула, а затем сопоставляются на постоянной основе
Любые адреса выдаются в аренду, независимо от механизма выбора
Аренда ограничена во времени
Аренду необходимо продлять
Клиент не знает механизм выбора адреса
T=4294967295 секунд (ок. 136 лет) - Infinity Lease
Взаимодействие узлов
DHCP использует вложение в UDP
Порт клиента - 67, порт сервера - 68
UDP вкладывается в IPv4, используемые адреса:
0.0.0.0 - для клиента, желающего получить адрес
255.255.255.255 - для шировещательной рассылки
Клиент заказывает флаг BROADCAST=0, если может сразу обработать юникаст
DHCP использует сообщения:
DHCPDISCOVER - обнаружение клиентом сервера бродкастом
DHCPOFFER - предложение сервером клиенту аренды бродкастом, чтобы другие сервера знали, что клиенту предложенный конкретный IP (если только не BROADCAST=0)
DHCPREQUEST - запрос выбранного адреса бродкастом
DHCPACK - подтверждение аренды бродкастом (если только не BROADCAST=0)
Существуют и другие сообщения
Время аренды
Любой адрес клиент трактует как временный
Срок аренды (T) задается со стороны сервера
После окончания срока аренды клиент не имеет права продолжать использовать адрес
Можно продлить аренду, пока она действительна
Первая попытка - после половины срока (T1=T/2)
Следующая попытка - после половины оставшегося срока, но не позже Т2 (обычно Т2=7/8Т)
После Т2 широковещательная попытка продления
Можно досрочно прекратить аренду
Клиент - сообщением DHCPRELEASE
Сервер - сообщениями DHCPFORCERENEW и DHCPNACK
Формат BOOTP-пакета
Поле | Описание | Длина |
op | Тип сообщения. Например, BOOTREQUEST - 1, BOOTREPLY - 2 | 1 |
htype | Тип аппаратного адреса. Например, для Ethernet это поле принимает значение 1 | 1 |
hlen | Длина аппаратного адреса в байтах. Для Ethernet - 6 | 1 |
hops | Количество агентов ретрансляции DHCP. Клиент устанавливает это поле в 0 | 1 |
xid | Идентификатор транзакции, генерируемый клиентом в начале получения адреса | 4 |
secs | Время в секундах с момента начала процесса получения адреса | 2 |
flags | Поле для флагов - специальных параметров протокола DHCP | 2 |
ciaddr | IP-адрес клиента, если клиент уже имеет собственный IP-адрес | 4 |
yiaddr | Новый IP-адрес клиента, предложенный сервером | 4 |
siaddr | IP-адрес сервера | 4 |
giaddr | IP-адрес агента ретрансляции | 4 |
chaddr | Аппаратный адрес клиента | 16 |
sname | Необязательное имя сервера в виде строки | 64 |
file | Необязательное имя файла на сервере, используемое при удаленной загрузке | 128 |
options | Поле опций, для DHCP начинается всегда с 0x63825363 (Magic Cookie) | ? |
Опции DHCP
Код | Название | Длина | Описание |
1 | Subnet Mask | 4 | |
3 | Router | x4 | Перечисление доступных маршрутизаторов |
6 | Name Server | x4 | Перечисление доступных серверов DNS |
12 | Host Name | 1+ | Строковое имя узла |
23 | Default IP TTL | 1 | |
26 | Interface MTU | 2 | |
33 | Static IP Route | x8 | Изначально - классовый, сегодня - /32 |
35 | ARP Cache Timeout | 4 | |
50 | Requested IP Address | 4 | Запрашиваемый адрес |
55 | Parameter Request List | 1+ | Список запрашиваемых опций |
61 | Client identifier | 2+ | Строка с идентификатором клиента |
66 | TFTP Server Name | 1+ | |
121 | Classless Route | 5+ | |
150 | TFTP Server IP Address | 4 | |
255 | End | 0 | Конец поля Options |
Рекомендации по времени аренды
В корпоративных сетях есть смысл выбирать большой срок аренды, чтобы компьютеры не меняли адреса после периода неактивности
Можно резервировать за узлами адреса и выдавать их автоматически
Клиенты иногда могут помнить свой адрес, но расчитывать на это не стоит
В гостевых сетях лучше устанавливать срок аренды минимальным, чтобы адреса освобождались как можно быстрее
Настройка DHCP-сервера
Для работы DHCP нужно задать пул с адресами для выдачи клиентам
Сервер включается автоматически на интерфейсах с адресами в пуле
Базовый набор опций:
Исключение адреса из пула (адрес интерфейса Cisco автоматически исключает) :
Резервирование адресов - "старый способ" - пул из одного адреса
Резервирование адресов - "новый способ" - резервирование прямо в пуле
Диагностика DHCP
DHCP Relay
Фактически посредник между клиентом и сервером
Полезен в случае большого количества широковещательных сред и желания использовать централизованный DHCP-сервер для всех них сразу
Вместо локального пула на интерфейсе задается команда ip helper-address <ip>. После ее активации пересылаются все широковещательные пакеты UDP, включая TFTP, DNS, TACACS и т. д.
Добавлять опцию 82
Доверять опции 82 (точнее, пакетам с giaddr=0)
Отказоустойчивость и безопасность
В сети может быть больше одного сервера, если они:
раздают адреса из непересекающихся диапазонов, но из одной IP сети
раздают один диапазон адресов, но синхронизируют состояние диапазона
Популярная атака - появление неавторизованного сервера в сети, выдающего неверные адреса.
Надежного механизма борьбы с ней в протоколе не предусмотрено. Опция DHCP Authentication не взлетела по очевидным причинам
Можно блокировать DHCPOFFER на неавторизованных портах доступа и заодно отслеживать все DHCP-сообщения, раз все равно приходится разбирать DHCP
DHCP Server Spoofing/Snooping
Spoofing - атака на DHCP
Атакующий находится ближе к жертве и присылает ей Offer первым
Перед атакой DHCP Spoofing может быть проведена атака на истощение пула DHCP Starvation
Snooping - определяются доверенные и недоверенные порты
Доверенные порты имеют право передавать OFFER и ACK
Недоверенные порты могут передавать только DISCOVER и REQUEST
Коммутатор "подслушивает" DHCP
Строит таблицу соответствия MAC-адресов, IP-адресов, VLAN и PortID
Блокирует коммутацию кадров, содержащих OFFER от недоверенных портов
Настройка DHCP Snooping (на коммутаторах доступа):
По умолчанию после включения DHCP Snooping все порты становятся недоверенными, доверенные необходимо назначить вручную.
Диагностика DHCP Snooping
DHCPv6
Отличия от DHCPv4:
Не используется вложение в BOOTP
Вместо широковещательной рассылки используется групповая:
FF02::1:2 - все DHCPv6 серверы и агенты
FF05::1:3 - все DHCP-серверы предприятия
Используются UDP-порты 546 (клиент) и 547 (сервер)
Stateful DHCPv6 - режим с сохранением состояния клиентов (аналогичен DHCP в IPv4)
Сервер ведет базу выдаваемых клиентов
Вместе с адресом клиент получает необходимые настройки
Сервер выбирает адрес, время аренды, и настройки для каждого клиента
Stateless DHCPv6 - режим без сохранения состояния клиентов
Клиент подключается к серверу, уже имея действительный адрес
Сервер отдает только дополнительные настройки, нужные для работы в сети
Сообщения DHCPv6:
RFC 3315 предусматривает 13 типов основных сообщений
Другие типы сообщений описаны RFC 5007 и 5460
Тип | Сообщение | Описание |
1 | SOLICIT | Обнаружение клиентом сервера |
2 | ADVERTISE | Сервер отвечает на SOLICIT |
3 | REQUEST | Запрос клиентом адреса или параметров |
4 | CONFIRM | Запрос клиентом действительной аренды |
5 | RENEW | Запрос клиентом продления аренды |
6 | REBIND | Запрос клиентом продления аренды с любого сервера |
7 | REPLY | Сервер подтверждает продление аренды или передает параметры |
8 | RELEASE | Клиент освобождает арендованный адрес |
9 | DECLINE | Клиент жалуется на занятость предложенного адреса |
10 | RECONFIGURE | Сервер оповещает клиента о необходимости нового запроса |
11 | INFORMATION-REQUEST | Запрос клиентом адреса или параметров |
12 | RELAY-FORW | Используется между агентами ретрансляции и серверами |
13 | RELAY-REPL | Используется между агентами ретрансляции и серверами |
Запрос клиентом адреса может быть:
Нормальный
Rapid Commit (используется когда один сервер в сети)
Настройка DHCPv6 Stateless
Клиентам отправляется RA с подключенными префиксами
Флаг "Other Configuration" рекомендует получить к ним опции по DHCP
Получение настроек по DHCPv6:
Адрес генерируется клиентом по SLAAC из RA
Опции получаются по DHCPv6 Stateless
Настройка DHCPv6 Stateful:
Сервер управляет адресами для каждого клиента
Отправляемый в RA флаг "Managed Address Configuration" рекомендует получить адрес и и опции по DHCP
Получение настроек по DHCPv6:
Адрес генерируется сервером
Опции получаются по DHCPv6 Stateful
Prefix Deligation
RFC 3633 описывает запрос маршрутизатором префикса
Используется новая опция DHCP Prefix
Настройка DHCPv6 Prefix Deligation:
Сервер выдает маршрутизатору блок адресов из диапазона
Маршрутизатор анонсирует полученную сеть в RA
DHCPv6 Guard
Блокирует нелегитимные сообщения Reply и Advertisement
Можно настроить гранулярные политики блокировки
Last updated