Skip to content

DHCP

Для чего нужен протокол DHCP?

  • Dynamic Host Configuration Protocol
  • Упрощение настройки большого количества клиентов
    • ПК
    • МФУ
    • IP-телефоны
    • IP-камеры
    • и т.д.
  • В небольших сетях DHCP можно настроить на маршрутизаторе, не выделяя отдельный сервер
  • UDP, порты 67, 68
sequenceDiagram
    participant Server
    participant Client

    Note left of Server: Я могу выдавать адреса
    Note right of Client: Мне нужен адрес

Какие настройки выдаются устройствам?

  • IP-адресс/маска
  • Шлюз
  • Домен
  • Список адресов DNS-серверов
  • Списко адресов NTP-серверов
  • и т.д. (см. DHCP Options)

Варианты присвоения адреса клиенту DHCP-сервером

  • Статическое
    • Адрес назначается администратором вручную
    • Каждый раз клиент всегда получает один и тот же адрес
    • IP-адрес закрепляется за определенным MAC-адресом
  • Динамическое
    • Адрес выдается на некоторое время
    • Каждый раз адрес может меняться
  • Автоматическое
    • IP-адрес закрепляется за определенным MAC-адресом (не администратором, а самим сервером)
    • Выдается навсегда

DORA

Начальная аренда адреса

sequenceDiagram
    participant Server
    participant Client

    Client ->> Server: Discover
    Server ->> Client: Offer
    Client ->> Server: Request
    Server ->> Client: Acknowledgement

Обнаружение сервера

  • Источник
    • MAC - MAC клиента
    • IP - 0.0.0.0
  • Получатель
    • MAC - FF:FF:FF:FF:FF:FF
    • IP - 255.255.255.255
sequenceDiagram
    participant Server
    participant Client

    Note left of Server: Ждет запросов...
    Note right of Client: Мне нужен адрес
    Client ->> Server: Discover

Предложение от сервера

  • Источник
    • MAC - Предполагаемый IP клитента
    • IP - IP сервера
  • Получатель
    • MAC - MAC клиента
    • IP - MAC сервера
  • Сервер отправляет предварительные настройки
sequenceDiagram
    participant Server
    participant Client

    Note left of Server: У меня есть такой адрес
    Server ->> Client: Offer
    Note right of Client: 🤔 Хм...

Запрос (уведомление) клиента

  • Подтверждает предложившему серверу, что согласен с настройками
  • Сервер помечает IP как занятый
  • Отправляется всем в сети, чтобы уведомить все DHCP-серверы, если еще есть такие
sequenceDiagram
    participant Server
    participant Client

    Note right of Client: Я согласен с настройками
    Client ->> Server: Request
    Note left of Server: Теперь этот адрес занят

Подтверждение сервера

  • Уведомление клиента о резервировании адреса
  • Сервер сообщает время, в течение которого можно использовать адрес
sequenceDiagram
    participant Server
    participant Client

    Note left of Server: Резервирую окончательно адрес
    Server ->> Client: Acknowledgement

Продление аренды адреса

sequenceDiagram
    participant Server
    participant Client

    Note over Server, Client: DORA

    loop Истекло половина времени аренды (lease time)
        Client ->> Server: Request
        Server ->> Client: Acknowledgement
    end

Если сервер, выдавший адрес, не отвечает:

  • Клиент ждет половину оставшегося времени и снова пытается продлить
  • Попытки продолжаются до истчения 7/8 времени аренды
  • После истечени 7/8 времени аренды отправляется широковещательный запрос, чтобы его могли увидеть все DHCP-серверы

Схема с несколькими DHCP-серверами

sequenceDiagram
    participant S1
    participant C
    participant S2

    Note right of C: Мне нужен адрес
    Note over S1, S2: Discover (всем)

    Note right of S1: У меня есть адрес
    S1 ->> C: Offer
    Note right of S2: У меня есть адрес
    S2 ->> C: Offer

    Note right of C: Возьму адрес от S1
    Note over S1, S2: Request (всем)

    Note right of S1: Резервирую адрес для C
    S1 ->> C: Acknowledgement

    loop Пока не прошло 7/8 времени аренды
        Note over C, S1: Прошло 1/2 оставшегося времени
        C ->> S1: Request
        Note over C, S1: S1 не отвечает
    end

    Note right of C: Теперь запрос всем
    Note over S1, S2: Нужен адрес (всем)
    S2 ->> C: Вот адрес

    Note over C, S2: Взаимодействие продолжается

Другие сообщения DHCP

NAK

  • Отправляет сервер
  • Может быть отправлено клиенту, чтобы он перестал использовать адрес

RELEASE

  • Отправляет клиент
  • Уведомление сервера об освобождении адреса (досрочное окончание аренды)

Уязвимость протокола DHCP

  • DORA содержит широковещательную рассылку
  • Первый откликнувшийся DHCP-сервер получает возможность предложить адрес
  • Сервер злоумышленника может дать самый быстрый ответ клиенту
    • Возможность дать ложную информацию клиенту
      • Например, DNS-сервер
    • Возможность легко анализировать незащищенный трафик

Настройка DHCP на Cisco

Выдача клиентам адреса из сети 192.168.0.0/24:

conf t
ip dhcp pool LAN
network 192.168.0.0 255.255.255.0
default-router 192.168.0.1
domain-name net.lab
dns-server 192.168.0.2
end

Не все параметры обязательны.

Если нужно исключить некоторые адреса из пула:

conf t
ip dhcp excluded-address 192.168.0.1 192.168.0.2
end

Проверить выданные адреса - show ip dhcp binding.

Получить адрес по DHCP - ip address dhcp.

Когда DHCP-relay не нужен

В данных примерах сервер и клиенты в одной сети, поэтому ретранслятор не нужен.

Пример 1

flowchart LR
    R((DHCP server))
    C1[Client 1]
    C2[Client 2]
    S[Switch]

    C1 o--o S
    C2 o--o S
    S o--o R

Пример 2

flowchart LR
    R((DHCP server))
    C1[Client 1]
    C2[Client 2]
    S1[Switch]
    S2[Switch]
    C3[Client 3]
    C4[Client 4]

    C1 o--o S1
    C2 o--o S1
    S1 o--o R
    R o--o S2
    S2 o--o C3
    S2 o--o C4

Когда DHCP-relay нужен

А что делать в таких ситуациях?

Пример 1

flowchart LR
    R((Router))
    DHCP((DHCP server))
    C1[Client 1]
    C2[Client 2]
    S1[Switch]
    S2[Switch]
    C3[Client 3]
    C4[Client 4]

    DHCP o--o S1
    C1 o--o S1
    C2 o--o S1
    S1 o--o R
    R o--o S2
    S2 o--o C3
    S2 o--o C4

Пример 2

flowchart LR
    R((Router))
    DHCP((DHCP server))
    C1[Client 1]
    C2[Client 2]
    S1[Switch]
    S2[Switch]
    C3[Client 3]
    C4[Client 4]

    DHCP o--o R
    C1 o--o S1
    C2 o--o S1
    S1 o--o R
    R o--o S2
    S2 o--o C3
    S2 o--o C4

Пример 3

flowchart LR
    R1((DHCP server))
    R2((Router))
    C1[Client 1]
    C2[Client 2]
    S1[Switch]
    S2[Switch]
    C3[Client 3]
    C4[Client 4]

    C1 o--o S1
    C2 o--o S1
    S1 o--o R1
    R1 o--o R2
    R2 o--o S2
    S2 o--o C3
    S2 o--o C4

Можно создать в каждой подсети свой DHCP-сервер, но это может быть неэффективно.

  • Маршрутизатор не пересылает широковещательные кадры
  • Ретранслятор - вспомогательное устройство
    • Помогает добраться DHCP-сообщениям от клиента к серверу, и наоборот

Пример настройки DHCP-relay

  • Настройки нужно выполнять на ближайшем к клиенту маршрутизаторе.
  • Этот маршрутизатор должен иметь доступность с DHCP-сервером.
conf t
int { интерфейс в сторону клиента, где будут запросы }
ip helper-address { адрес DHCP-сервера }
end

DHCPv6

Варианты получения адреса

  • С отслеживанием состояния
    • Выдача адреса DHCP-сервером
  • Без отслеживания состояния
    • Получение префикса, длины префикса и адрес шлюза по умолчанию от маршрутизатора IPv6 без помощи DHCP-сервера
  • SLAAC (“слэк”)
    • Без участия DHCP-сервера

SLAAC

  • Stateless Address Autoconfiguration
  • Никем не отслеживается использование адреса
  • Используется ICMPv6
    • Многоадресная рассылка на адрес FE02::2 (все маршрутизаторы) - сообщение RS
    • Многоадресная рассылка на адрес FE02::1 (все узлы) - сообщение RA
  • Процедура EUI-64 или случайно
  • В конце проверка на уникальность в сети

"Флаги" управления

  • RA сообщение содержит специальные флаги
    • Флаг М
    • Флаг О
  • С помощью их комбинаций указывается, каким образом нужно получить адрес

Варианты флагов

  • М = 0, О = 0
    • SLAAC - использовать информацию из сообщения RA + EUI-64
  • М = 0, О = 1
    • Без отслеживания состояния - адрес от R + EUI-64, остальное от DHCPv6
  • М = 1
    • DHCPv6 с отслеживанием состояния - вся информация от DHCPv6

Пример настройки флагов на маршрутизаторе Cisco

Пример установки обоих флагов в 1 (мало смысла в одновременной установке флага в 1).

conf t
int { в сторону клиента }
ipv6 nd managed-config-flag
ipv6 nd other-config-flag
end

Схемы взаимодействия

SLAAC

sequenceDiagram
    participant Router
    participant Client
    participant DHCPv6

    Client ->> Router: RS
    Note left of Router: Отправлю M = 0, O = 0
    Router ->> Client: RA
    Note right of Client: Генерирую адрес с помощью EUI-64
    Note right of DHCPv6: Никому не понадобился :(

Без отслеживания состояния

sequenceDiagram
    participant Router
    participant Client
    participant DHCPv6

    Client ->> Router: RS
    Note left of Router: Отправлю M = 0, O = 1
    Router ->> Client: RA
    Note right of Client: Генерирую адрес с помощью EUI-64
    Note right of Client: Нужно запросить адрес DNS
    Client ->> DHCPv6: Solicit (multicast)
    DHCPv6 ->> Client: Advertise (unicast)
    Client ->> DHCPv6: Information Request (unicast)
    DHCPv6 ->> Client: Reply (unicast)
  • FF02::1:2 - адрес многоадресной (multicast) рассылки от клиента всем DHCPv6-серверам
  • Используется в Solicit здесь и далее в примерах
  • От клиента к серверу - 547 порт UDP
  • От сервера к клиенту - 546 порт UDP
conf t

ipv6 unicast-routing

int {в сторону клиента}
ipv6 address 2001::1 /64
no ipv6 nd managed-config-flag
ipv6 nd other-config-flag
no sh

end
conf t

ipv6 unicast-routing

ipv6 dhcp pool LAN
dns-server 2001::1
domain-name net.lab

int {в сторону клиента}
ipv6 address 2001::2 /64
ipv6 dhcp server LAN
no sh

end

С отслеживанием состояния

sequenceDiagram
    participant Router
    participant Client
    participant DHCPv6

    Client ->> Router: RS
    Note left of Router: Отправлю M = 1
    Router ->> Client: RA
    Note right of Client: Нужно запросить все настройки у DHCPv6
    Client ->> DHCPv6: Solicit (multicast)
    DHCPv6 ->> Client: Advertise (unicast)
    Client ->> DHCPv6: Request (unicast)
    DHCPv6 ->> Client: Reply (unicast)
conf t

ipv6 unicast-routing

int { в сторону клиента }
ipv6 address 2001::1 /64
ipv6 nd managed-config-flag
no sh

end
conf t

ipv6 unicast-routing

ipv6 dhcp pool LAN
address prefix 2001::/64 [ lifetime ? ]
dns-server 2001::1
domain-name net.lab

int { в сторону клиента }
ipv6 address 2001::2 /64
ipv6 dhcp server LAN
no sh

end

Проверка настроек

show ipv6 dhcp pool

show ipv6 dhcp binding

DHCPv6-relay

Может понадобиться по тем же причинам, что в IPv4.

Пример настройки

conf t
ipv6 dhcp relay destination { адрес DHCP-сервера }
end

🧰 Лабораторная работа

Ознакомиться перед выполнением любой лабораторной работы (список раскрывается)
  • Вместо ❔ или x нужно подставить свой номер по журналу
  • Выполнять задание без "отмашки" не стоит ⛔, т.к. задание здесь может существовать более актуальная версия
  • У каждой работы есть срок сдачи 📅, который озвучивается на занятии, после которого работа не может быть защищена на максимальный балл 📉
  • Дополнительные задания 📚 не являются обязательными, но по результатам сдачи лабораторной работы может быть выдано одно или несколько из них. Также дополнительное задание может быть сформулировано устно
  • Для каждой лабораторной работы должен быть отчет 📝 с описанием выполнения ваших действий, оформление должно соответствовать требованиям (см. на сайте учебного заведения)
  • Нужно уметь ответить на вопросы ❓ по теме, контрольные вопросы и другие связанные вопросы
  • Примеры могут быть выполнены по желанию, а также выданы в качестве дополнительного задания с изменениями или без в случае неуспешной 😢 защиты основной работы
  • Иногда в работах встречаются задания по IPv4 и IPv6 одновременно 🔗. Это считается как одна работа. Допускается сдача работы только с IPv4 или только с IPv6, но максимальный балл в таком случае получить невозможно

🎯 Цель работы: получить навыки настройки DHCP-сервера и DHCP-Relay на маршрутизаторе.

🌐 Схемы

  1. В качестве PC использовать любое устройство с DHCP-клиентом. Рекомендуется Linux (требуется изучение документации).
  2. В качестве SRV рекомендуется использовать маршрутизатор Cisco.

IPv4

img

IPv6

img

✔️ Условия

IPv4

  1. В сети 10.x.12.0 два маршрутизатора делят один пул пополам.
  2. R4 является DHCP-сервром для сетей 10.x.31.0 и 10.x.32.0.
  3. Способ маршрутизации любой.
    1. В случае статической маршрутизации на R4 должно быть 2 маршрута в сеть 10.x.12.0 и необходимо настроить IP SLA.
  4. При отключении R1 или R2 доступность сети 10.x.12.0 должна остаться.

IPv6

  1. В сети 2000:x:1:: использовать SLACC.
    1. R1 выдает только префикс.
  2. В сети 2000:x:2:: использовать вариант DHCPv6 без отслеживания состояния.
    1. R1 выдает префикс.
    2. SRV1 выдает любой адрес DNS-сервера.
  3. В сети 2000:x:3:: использовать вариант DHCPv6 с отслеживанием состояния.
    1. R1 ничего не выдает (кроме флагов).
    2. SRV2 выдает любой адрес DNS-сервера.
  4. Способ маршрутизации любой.

📚 Дополнительные задания

  1. Вместо статической маршрутизации использовать OSPF.
  2. В сети IPv4 настроить VRRP.
  3. Создать сеть из двух маршрутизаторов (с DHCP-сервером) и ПК. Настроить время аренды адреса 32 секунд. Получить на ПК адрес по DHCP. Отключить сервер, с которого был получен адрес. Проверить, будет ли по истечении 7/8 времени аренды (28 секунд) ПК будет просить адрес у другого сервера.
  4. Изменение адресации.

🤔 Контрольные вопросы

  1. Почему Request в процессе DORA имеет broadcast рассылку?
  2. Изучите с помощью Wireshark или аналога заголовок DHCP.
    1. Какие параметры в нем передаются?
    2. Какие протокол и порт транспортного уровня используется DHCP?
    3. Какие номера опций имеют шлюз, срок аренды, маска подсети?
    4. В случае использования DHCP-relay как DHCP-сервер понимает, из какого пула выдать адрес?
  3. Варианты присвоения адреса.
    1. Какой вариант используется чаще всего?
    2. В каких случаях используется статическое присвоение?
  4. Кто определяет срок аренды адреса?
  5. Какой срок аренды используется по умолчанию?
  6. Зачем нужно исключать адреса из пула?
  7. Приведите пример, когда DHCP-сервер является еще и DHCP-клиентом.
  8. Чем отличаются вариант с отслеживанием от варианта без отслеживания?
  9. Можно ли исключить адреса из DHCPv6 пула?
  10. Как разделить в одной LAN все возможные адреса между двумя DHCP-серверами?
  11. Почему в DHCPv6 2 аналога сообщения Request из DHCPv4?
  12. Как задать время аренды адреса?
  13. Какой смысл разделения одного пула адресов на 2 и более DHCP-сервера?
  14. Какие номера options имеют шлюз по умолчанию, маска, адрес DNS-сервера?