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 нужно задать пул с адресами для выдачи клиентам
Сервер включается автоматически на интерфейсах с адресами в пуле
Switch(config-if)#ip address 10.0.0.1 255.255.255.0
Switch(config)#ip dhcp pool POOL_NAME
Switch(dhcp-config)#network 10.0.0.0 /24
Базовый набор опций:
Switch(dhcp-config)#default-router 10.0.0.1
Switch(dhcp-config)#dns-server 10.0.0.1
Switch(dhcp-config)#domain-name example.com
Switch(dhcp-config)#option 150 ip 10.0.0.2
Исключение адреса из пула (адрес интерфейса Cisco автоматически исключает) :
Switch(config)#ip dhcp excluded-address 10.0.0.1 10.0.0.50
Резервирование адресов - "старый способ" - пул из одного адреса
Switch(config)#ip dhcp pool CLIENT1
Switch(dhcp-config)#host 10.0.0.2 255.255.255.0
Switch(dhcp-config)#hardware-address 0000.deaf.beaf
Резервирование адресов - "новый способ" - резервирование прямо в пуле
Switch(config)#ip dhcp pool POOL_NAME
Switch(dhcp-config)#network 10.0.0.0 /24
Switch(dhcp-config)#address 10.0.0.2 hardware-address 0000.deaf.beaf
Диагностика DHCP
Switch#show ip dhcp pool
Pool 99NET :
Utilization mark (high/low) : 100 / 0
Subnet size (first/next) : 0 / 0
Total addresses : 254
Leased addresses : 1
Excluded addresses : 154
Pending event : none
1 subnet is currently in the pool :
Current index IP address range Leased/Excluded/Total
10.0.99.3 10.0.99.1 - 10.0.99.254 1 / 154 / 254
Pool 101NET :
Utilization mark (high/low) : 100 / 0
Subnet size (first/next) : 0 / 0
Total addresses : 254
Leased addresses : 1
Excluded addresses : 100
Pending event : none
1 subnet is currently in the pool :
Current index IP address range Leased/Excluded/Total
10.0.101.2 10.0.101.1 - 10.0.101.254 1 / 100 / 254
Switch#show ip dhcp binding
Bindings from all pools not associated with VRF:
IP address Client-ID/ Lease expiration Type State Interface
Hardware address/
User name
10.0.99.2 0063.6973.636f.2d35. Dec 29 2018 12:02 PM Automatic Active GigabitEthernet0/1
3030.302e.3030.3032.
2e30.3030.312d.4769.
302f.31
10.0.101.1 0063.6973.636f.2d35. Dec 28 2018 12:41 PM Automatic Selecting GigabitEthernet0/1
3030.302e.3030.3031.
2e30.3030.302d.4769.
302f.30
Switch#show ip dhcp conflict
DHCP Relay
Фактически посредник между клиентом и сервером
Полезен в случае большого количества широковещательных сред и желания использовать централизованный DHCP-сервер для всех них сразу

Вместо локального пула на интерфейсе задается команда ip helper-address <ip>. После ее активации пересылаются все широковещательные пакеты UDP, включая TFTP, DNS, TACACS и т. д.
Switch(config-if)#ip helper-address 10.0.0.1
Switch(config)#no ip forward-protocol udp tftp
Добавлять опцию 82
Switch(config-if)#ip dhcp relay information option-insert
Доверять опции 82 (точнее, пакетам с giaddr=0)
DHCP_SERVER(config)#ip dhcp information trust-all
Отказоустойчивость и безопасность
В сети может быть больше одного сервера, если они:
раздают адреса из непересекающихся диапазонов, но из одной 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 (на коммутаторах доступа):
Switch(config)#ip dhcp snooping
Switch(config)#ip dhcp snooping vlan 10,20
Switch(config)#ip dhcp snooping database flash:snoopdb !хранить базу можно где угодно в сети
Switch(config)#interface gi0/0
Switch(config-if)#ip dhcp snooping trust
Switch(config-if)#interface range fa0/1-3
Switch(config-if-range)#ip dhcp snooping limit rate 10 !кол-во запросов в секунду
По умолчанию после включения DHCP Snooping все порты становятся недоверенными, доверенные необходимо назначить вручную.
Диагностика DHCP Snooping
Switch#show ip dhcp snooping
Switch DHCP snooping is enabled.
DHCP Snooping is configured on the following VLANs:
10 30-40 100 200-220
Insertion of option 82 information is enabled.
Interface Trusted Rate limit (pps)
--------- ------- ----------------
FastEthernet2/1 yes 10
FastEthernet3/1 yes none
GigabitEthernet1/1 no 20
Switch#show ip dhcp snooping database
Switch DHCP snooping is enabled.
DHCP Snooping is configured on the following VLANs:
10 30-40 100 200-220
Insertion of option 82 information is enabled.
Interface Trusted Rate limit (pps)
--------- ------- ----------------
FastEthernet2/1 yes 10
FastEthernet3/1 yes none
GigabitEthernet1/1 no 20
Switch#show ip dhcp snooping statistics
Packets processed 61343
Packets received through cfsoe 0
Packets forwarded 0
Packets forwarded on cfsoe 0
Total packets dropped 61343
Packets dropped from untrusted ports 0
Packets dropped due to MAC address check failure 0
Packets dropped due to Option 82 insertion failure 0
Packets dropped due to o/p intf unknown 0
Packets dropped which were unknown 0
Packets dropped due to dhcp relay not enabled 0
Packets dropped due to no binding entry 0
Packets dropped due to interface error/no interface 61343
Packets dropped due to max hops exceeded 0
Switch#show ip dhcp snooping binding
MacAddress IpAddress Lease(sec) Type VLAN Interface
------------------ --------------- ---------- ------------- ---- --------------
00:02:B3:3F:3B:99 55.5.5.2 6943 dhcp-snooping 10 FastEthernet6/10
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
Switch(config)#ipv6 dhcp pool STATELESS
Switch(config-dhcp)#dns-server 2001:4860:4860::8888
Switch(config-dhcp)#domain-name example.com
Switch(config-dhcp)#interface vlan 1
Switch(config-if)#ipv6 address 2001:db8:b16b:b5::1/64
Switch(config-if)#ipv6 dhcp server STATELESS
Switch(config-if)#ipv6 nd other-config-flag
Получение настроек по DHCPv6:
Адрес генерируется клиентом по SLAAC из RA
Опции получаются по DHCPv6 Stateless
Switch(config-if)#ipv6 address autoconfig default
Switch(config-if)#show ipv6 interface gi0/0
Switch(config-if)#show ipv6 dhcp interface gi0/0
Настройка DHCPv6 Stateful:
Сервер управляет адресами для каждого клиента
Отправляемый в RA флаг "Managed Address Configuration" рекомендует получить адрес и и опции по DHCP
Switch(config)#ipv6 dhcp pool STATEFUL
Switch(config-dhcp)#dns-server 2001:4860:4860::8888
Switch(config-dhcp)#address prefix 2001:db8:b16b:b5::1/64 lifetime infinite 86400
Switch(config-dhcp)#domain-name example.com
Switch(config-dhcp)#interface vlan 1
Switch(config-if)#ipv6 address 2001:db8:b16b:b5::1/64
Switch(config)#ipv6 dhcp server STATEFUL
Switch(config)#ipv6 nd other-config-flag
Switch(config)#ipv6 nd prefix 2001:db8:b16b:b5::1/64 no-advertise
Получение настроек по DHCPv6:
Адрес генерируется сервером
Опции получаются по DHCPv6 Stateful
Switch(config)#inteface gi0/0
Switch(config-if)#ipv6 address dhcp
Switch(config-if)#ipv6 enable !не логично, но необходимо
Switch#show ipv6 dhcp pool
Switch#show ipv6 dhcp binding
Prefix Deligation
RFC 3633 описывает запрос маршрутизатором префикса
Используется новая опция DHCP Prefix
Настройка DHCPv6 Prefix Deligation:
Сервер выдает маршрутизатору блок адресов из диапазона
Маршрутизатор анонсирует полученную сеть в RA
SERVER(config)#ipv6 local pool PD_PREFIX 2001:db8:1::/48 60
SERVER(config)#ipv6 dhcp pool PD_POOL
SERVER(config-dhcpv6)#prefix-deligation pool PD_PREFIX
SERVER(config-dhcpv6)#interface gi0/0
SERVER(config-if)#ipv6 enable
SERVER(config-if)#ipv6 dhcp server PD_POOL
Switch(config)#interface gi0/0
Switch(config-if)#ipv6 address autoconfig default
Switch(config-if)#ipv6 dhcp client pd PREFIX
Switch(config-if)#interface vlan 1
Switch(config-if)#ipv6 address PREFIX ::1:0:0:0:1/64
Switch(config-if)#interface vlan 2
Switch(config-if)#ipv6 address PREFIX ::1:0:0:0:1/64
Switch(config-if)#do show ipv6 interface vlan1 | section Global
Switch(config-if)#do show ipv6 interface vlan2 | section Global
DHCPv6 Guard
Блокирует нелегитимные сообщения Reply и Advertisement
Switch(config)#interface range gi0/1-3
Switch(config-if-range)#switchport
Switch(config-if-range)#ipv6 dhcp guard
Switch#show ipv6 dhcp guard policy
Можно настроить гранулярные политики блокировки
Switch(config)#ipv6 access-list DHCP_SERVERS_ACL
Switch(config-ipv6-acl)#permit host FE80:A8BB:CCFF:FE01:F700 any
Switch(config)#ipv6 prefix-list DHCP_PREFIXES permit 2001:0DB8::/64 le 128
Switch(config)#ipv6 dhcp guard policy DHCP_GUARD_SERVERS_POLICY
Switch(config-dhcp-guard)#device-role server
Switch(config-dhcp-guard)#match server access-list DHCP_SERVERS_ACL
Switch(config-dhcp-guard)#preference min 0
Switch(config-dhcp-guard)#preference max 255
Switch(config-dhcp-guard)#trusted port
Switch(config)#interface gi0/0
Switch(config-if)#switchport
Switch(config-if)#ipv6 dhcp guard attach-policy DHCP_GUARD_SERVERS_POLICY
Last updated