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