Networking

DHCP

Dynamic Host Configuration Protocol — протокол, который автоматически выдаёт устройству IP-адрес, маску, шлюз и адреса DNS-серверов.

Что такое DHCP

DHCP расшифровывается как Dynamic Host Configuration Protocol — протокол динамической настройки узла. Он автоматически выдаёт устройству сетевые параметры в момент подключения к сети. Без него IP-адрес, маску подсети, шлюз и адрес DNS-резолвера пришлось бы вбивать руками на каждой машине — и следить, чтобы адреса не пересеклись.

DHCP-сервер — сторона, которая раздаёт адреса и ведёт учёт выданного. В офисной сети это обычно роутер, в облаке — сервис самой платформы, на Linux — отдельный демон: dnsmasq, isc-dhcp-server, kea. Клиент — любое устройство: ноутбук, телефон, виртуальная машина.

Как это работает: DORA

Обмен занимает четыре пакета, их называют по первым буквам — DORA:

Шаг Пакет Кто шлёт Смысл
D DISCOVER клиент, broadcast «Есть тут DHCP-сервер?»
O OFFER сервер «Предлагаю 192.168.1.50»
R REQUEST клиент, broadcast «Беру именно этот адрес»
A ACK сервер «Закрепил за тобой на 12 часов»

Первый DISCOVER уходит широковещательно на 255.255.255.255 — своего адреса у клиента ещё нет, отвечать некуда. Протокол работает поверх UDP: сервер слушает порт 67, клиент — 68.

Адрес выдаётся не навсегда, а в аренду (lease). На половине срока клиент шлёт REQUEST напрямую серверу и продлевает её, поэтому «динамический» адрес на практике не меняется месяцами. Если DHCP-сервера в сети нет, Windows и Linux берут APIPA-адрес из 169.254.0.0/16 — увидели такой в ip addr, значит аренда не получена и искать надо DHCP, а не приложение.

Что выдаётся, кроме адреса

Параметры передаются опциями, пронумерованными по RFC 2132:

  • 1 — маска подсети
  • 3 — шлюз по умолчанию
  • 6DNS-серверы
  • 15 — доменный суффикс
  • 42NTP-серверы
  • 51 — срок аренды
  • 66/67 — TFTP-сервер и имя загрузочного файла для PXE-загрузки

Опции 66/67 — то, на чём держится сетевая установка ОС в дата-центре: голая машина без диска получает по DHCP не только адрес, но и адрес загрузчика.

Конфиг и диагностика

# dnsmasq: пул, срок аренды, резервация адреса за MAC
dhcp-range=192.168.1.100,192.168.1.200,12h
dhcp-option=6,1.1.1.1,8.8.8.8
dhcp-host=52:54:00:ab:cd:ef,192.168.1.10
$ ip -4 addr show eth0 | grep inet
    inet 192.168.1.50/24 brd 192.168.1.255 scope global dynamic eth0

$ sudo dhclient -v eth0            # перезапросить аренду
$ cat /var/lib/dhcp/dhclient.leases

Слово dynamic в выводе ip addr — прямое указание, что адрес приехал по DHCP, а не прописан статикой.

DHCP на серверах и в облаке

В облаке DHCP работает внутри VPC: при создании инстанса платформа резервирует адрес в подсети и отдаёт его гостевой ОС. Благодаря этому один и тот же образ разворачивается в любой сети без правки конфигов. Прописать себе чужой адрес вручную не выйдет — платформа фильтрует трафик с неучтённых адресов.

Для сервера, на который смотрят снаружи, адрес должен быть предсказуемым. Правильный способ — не статика в конфиге гостя, а резервация по MAC на DHCP-сервере: настройки лежат в одном месте, а переустановка ОС не ломает адресацию.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер