[Документация Yandex Cloud](../index.md) > [Облачная терминология](index.md) > Сети и доставка контента > DHCP

# Протокол конфигурации динамического хоста (DHCP)

Протокол конфигурации динамического хоста (_Dynamic Host Configuration Protocol, DHCP_) — это технология, позволяющая автоматически распределять IP-адреса между устройствами сети и задавать им дополнительные сетевые [настройки](#options). Основные преимущества использования протокола:

* Экономит время на ручную настройку подключаемых к сети устройств.
* Упрощается управление сетевой инфраструктурой.
* Устраняет сетевые конфликты из-за дублирования IP-адресов.
* Упрощает масштабирование сетей.

Первые решения для автоматизации процесса настройки сетевых устройств предпринимались еще в 1980-е годы, но они не отвечали всем стоящим перед ними вызовам. Протокол DHCP впервые был опубликован в 1993 году, но со временем сильно изменился.

## Принцип работы DHCP {#how-work}

Процесс подключения через DHCP-сервер состоит из четырех этапов, которые объединяют в аббревиатуру _DORA_:

* **Discovery** (обнаружение) — устройство подключается к сети и запрашивает у серверов настройки. Сервером может выступать Wi-Fi-роутер, маршрутизатор или коммутатор.
* **Offer** (предложение) — DHCP-сервер предлагает устройству незанятый IP-адрес и другие [настройки](#config).
* **Request** (запрос) — устройство уведомляет DHCP-сервер, что принимает настройки и теперь использует их для работы в сети.
* **Acknowledgement** (подтверждение) — DHCP-сервер закрепляет за устройством адрес и срок его использования. По окончании срока использования или при перезагрузке устройства процедура повторяется.

Может показаться, что этапы Offer и Request избыточны, а DHCP-сервер мог бы сразу назначить устройству адрес. Однако они поддерживают стабильность системы: гарантируют, что адрес уникален, настройки согласованы, а конфликты исключены. Например, в сети может быть несколько DHCP-серверов, и без этих этапов каждый бы назначал устройству адрес.

## Структура DHCP-пакета {#structure}

DHCP-пакеты всегда имеют одинаковую [структуру](https://www.ietf.org/rfc/rfc2131.txt), но содержимое полей зависит от конфигурации сетевого оборудования, устройств и настроек администратора сети. Рассмотрим структуру DHCP-пакета полностью:

Название поля |	Описание | Длина, байт
--------|----------|------------
`op` | Тип сообщения: запрос (`0`) или ответ (`1`) | 1
`htype` | Тип устройства. Чаще всего используется `1` — Ethernet | 1
`hlen` | Длина [MAC-адреса](https://ru.wikipedia.org/wiki/MAC-адрес) в байтах | 1
`hops` | Число маршрутизаторов на пути от устройства до сервера | 1
`xid` | Идентификатор пакета | 4
`secs` | Число секунд со времени получения IP-адреса | 2
`flags` | Настройки доставки пакетов между устройством и сервером. Чаще всего используется только первый бит поля, определяющий, назначен ли устройству IP-адрес | 2
`ciaddr` | Текущий IP-адрес устройства | 4
`yiaddr` | IP-адрес, который предлагается устройству | 4
`siaddr` | IP-адрес сервера с конфигурацией или операционной системой. Используется для бездисковых рабочих станций | 4
`giaddr` | IP-адрес ретранслятора, если сервер и устройство находятся в разных подсетях | 4
`chaddr` | MAC-адрес устройства | 16
`sname` | Имя сервера, предоставляющего дополнительный файл для настройки | 64
`file` | Имя дополнительного файла | 128
`options` | Список [параметров](#options), задаваемых администратором сети | Зависит от содержания

## Опции DHCP {#options}

DHCP-сервер может передавать клиенту множество дополнительных опций. Рассмотрим основные из них:

* Маска подсети (например, `255.255.255.0`) — определяет, какие устройства находятся в локальной сети, а какие — в глобальной. Необходима для правильного направления данных и разграничения доступов.
* Время аренды IP-адреса.
* Шлюз по умолчанию — служит межсетевым маршрутизатором, обеспечивая обмен пакетами между сетями с разными протоколами.
* [DNS-серверы](dns.md) — позволяют пользователям обращаться к сайтам по именам, а не по IP-адресам.
* NTP-сервер (Network Time Protocol) — предоставляет точное время сети для синхронизации при сохранении логов, сертификатов и других операций.
* TFTP-сервер или Boot-сервер — предоставляет операционную систему, прошивку или начальную конфигурацию. Применяется для бездисковых рабочих станций, таких как маршрутизаторы, коммутаторы или IP-телефоны.
* Доменное имя — название домена сети (например, `company.ru`). Упрощает доступ к ресурсам в локальной сети, удобная настройка для корпоративных сетей.

Полный список опций можно посмотреть в [RFC 2132](https://datatracker.ietf.org/doc/html/rfc2132).

## Управление IP-адресами в DHCP {#manage-ip}

В зависимости от реализации DHCP-сервер может распределять IP-адреса тремя методами:

* **Статическое распределение** — IP-адреса привязываются к MAC-адресам устройств. Используется для статических устройств: роутеры, принтеры, серверные машины и другое.
* **Динамическое распределение** — случайные адреса выдаются на определенный срок, что позволяет освобождать их и повторно распределять между новыми устройствами в сети.
* **Автоматическое распределение** — новым устройствам адреса выдаются случайно, как и при динамическом, но на неопределенный срок и из заранее заданного диапазона. При повторном входе устройству будет назначен тот же адрес, что был у него ранее.

Через DHCP-сервер сетевой администратор может тонко настраивать пул доступных адресов. Например, задавать разные диапазоны для Wi-Fi-клиентов и для статических устройств.

Рассмотрим пример настройки DHCP-сервера со следующими параметрами:

* количество доступных адресов — для 100 устройств;
* время аренды адреса — 5 часов;
* принтеру зарезервирован статический адрес.

Для этого в конфигурационном файле `dhcpd.conf` понадобятся следующие настройки:

```bash
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;   # Диапазон адресов для устройств
    option routers 192.168.1.1;          # Шлюз по умолчанию
    option subnet-mask 255.255.255.0;    # Маска подсети
    option domain-name-servers 8.8.8.8;  # DNS-сервер Google
    default-lease-time 18000;            # Время аренды по умолчанию, в секундах
    max-lease-time 18000;                # Максимальное время аренды
}

host printer {
    hardware ethernet 60:A4:4C:**:**:**; # MAC-адрес принтера
    fixed-address 192.168.1.10;          # Зарезервированный IP-адрес
}
```

## Безопасность и управление рисками в DHCP {#safety}

Протокол DHCP не имеет встроенной аутентификации, поэтому без дополнительной защиты уязвим для атак злоумышленников. В сетях, где это критически важно, например военных, протокол не используют. Рассмотрим основные типы уязвимостей:

* **Поддельный DHCP-сервер** — злоумышленник подключает к сети свой DHCP-сервер, который вместо легитимного выдает свои настройки. Так он может перехватывать трафик, перенаправлять пользователя на фишинговые сайты, модифицировать отправляемые им данные.
* **Поддельные DHCP-запросы** — злоумышленник отправляет поддельные DHCP-запросы, чтобы присвоить все доступные IP-адреса пула или перегрузить сервер. Это может сделать сеть недоступной, что особенно опасно для корпоративных сетей, или обеспечить поддельному серверу перехват запросов.
* **Поддельный клиент** — если у клиента сети статический IP-адрес, злоумышленник может выдать себя за него и получить его доступы. Например, выдать свой компьютер за компьютер сотрудника компании, подделав MAC-адрес. Также это может вызвать сбой в работе другого устройства с этим адресом.
* **Подмена пакетов** — на [этапе](#how-work) передачи устройству настроек (Offer) злоумышленник может подменить DHCP-пакет своим. Это поможет ему перехватывать трафик и перенаправлять пользователя на вредоносные ресурсы, как и в случае с подменой DHCP-сервера.

Чтобы устранить уязвимости, владельцам сетей доступны следующие популярные методы:

* **Пароль** — для небольшого офиса, кафе или домашней сети в большинстве случаев хватит надежного Wi-Fi пароля.
* **Аутентификация** — среди корпоративных сетей популярна аутентификация по стандарту [802.1X](https://ru.wikipedia.org/wiki/IEEE_802.1X), которая ограничивает доступ к предоставляемым коммутатором сервисам неавторизованным устройствам. В этом случае у каждого устройства свои учетные данные.
* **Опция DHCP Snooping** — на коммутаторах существует опция, которая разрешает ответы только от доверенных DHCP-серверов и фильтрует пакеты от ненадежных источников.
* **Анализ DHCP-пакетов** — опция DHCP Snooping также ведет базу данных успешных присвоений IP-адресов. Анализ базы поможет выявить аномалии в запросах и даже физическое местоположение устройств.
* **Виртуальные подсети** — устройства в сети можно разграничить так, чтобы они не могли видеть DHCP-пакеты друг друга и имели разные права. Например, если вы владеете гостевой Wi-Fi сетью, вы можете отделить устройства клиентов в ней от корпоративных устройств.
* **Шифрование трафика** — используйте протоколы безопасности [VPN](vpn.md) или [IPsec](ipsec.md). Даже если трафик будет перехвачен, злоумышленник не сможет его расшифровать.

Для крупных сетей также рекомендуется создать резервный DHCP-сервер на случай выхода из строя основного, иначе все пользователи потеряют доступ к сети.

## Использование DHCP в Yandex Cloud {#dhcp-yc}

В Yandex Cloud доступна настройка сетевой инфраструктуры, включающей в себя DHCP-серверы:

* Виртуальные машины [Yandex BareMetal](https://yandex.cloud/ru-kz/services/baremetal) предусматривают возможность создания подсетей с автоматическим конфигурированием параметров IP-адресации. Адреса назначаются на физический интерфейс сетевой карты с фиксацией MAC-адреса, что служит дополнительной защитой. Подробнее в [документации](../baremetal/concepts/dhcp.md).
* Подсети [Yandex Virtual Private Cloud](https://yandex.cloud/ru-kz/services/vpc) позволяют управлять настройками DHCP и задавать пользователям подсети те же DNS- и NTP-серверы, что используются в вашей корпоративной сетевой инфраструктуре. Подробнее в [документации](../vpc/concepts/dhcp-options.md).