В прошлых уроках сеть настраивалась руками: адрес, маска, шлюз, DNS прописывались на каждой машине. Это не масштабируется - представьте офис на 200 рабочих станций или класс с ноутбуками, которые приходят и уходят. Задача этого урока - научиться поднимать DHCP-сервер, который раздаёт сетевые параметры автоматически: пулы адресов на подсети, фиксированные адреса по MAC, глобальные и подсетевые опции (шлюз, DNS, домен), управлять временем аренды и читать журнал. Разберём ретрансляцию между подсетями и коротко DHCPv6 с radvd. Сразу важная пометка 2026: классический ISC dhcpd объявлен EOL, на смену пришёл ISC Kea, но цели экзамена LPIC-2 v4.5 всё ещё опираются на dhcpd и его dhcpd.conf - поэтому учим dhcpd как экзаменационную базу, а в граблях скажу, чем это заменено на боевых стендах.

Как это работает
DHCP (Dynamic Host Configuration Protocol) - это протокол, по которому клиент при загрузке получает от сервера IP-адрес и сопутствующие настройки. Работает поверх UDP: клиент шлёт на порт 67, сервер отвечает на порт 68. Клиент в начале ещё не имеет адреса, поэтому первый пакет идёт широковещательно на 255.255.255.255 - сервер слышит его в пределах своего L2-сегмента.
Обмен идёт по схеме из четырёх шагов, которую запоминают как DORA: Discover (клиент кричит в эфир, кто тут DHCP), Offer (сервер предлагает свободный адрес из пула), Request (клиент просит именно этот адрес), Acknowledge (сервер подтверждает и фиксирует аренду). После ACK клиент настраивает интерфейс. Понимание DORA нужно и для экзамена, и для диагностики: видя в логе только Discover без Offer, вы сразу знаете, что сервер либо не слышит клиента, либо в пуле нет свободных адресов.
Ключевое понятие - аренда (lease). Сервер выдаёт адрес не навсегда, а на срок (lease time). Примерно на половине срока клиент пытается продлить аренду (renew) у того же сервера unicast-запросом; если тот молчит - на 87.5% срока пробует rebinding широковещательно у любого сервера. Истёкшая и не продлённая аренда возвращается в пул. Все активные аренды dhcpd хранит в текстовом файле leases - это и есть журнал, по которому видно, кто какой адрес держит и до когда.
Адреса бывают двух видов. Динамические берутся из пула range внутри объявленной подсети subnet - кому первый свободный достанется, тому и достанется. Фиксированные привязываются к MAC-адресу через блок host: одна и та же машина всегда получает один и тот же IP, что удобно для серверов, принтеров, камер. Опции (шлюз routers, серверы DNS, имя домена) задаются на трёх уровнях: глобально для всех, внутри subnet для конкретной сети и внутри host для отдельной машины - более узкий уровень переопределяет более широкий.
Отдельная проблема - DHCP не маршрутизируется: broadcast от клиента не уходит за пределы своей подсети. Если сервер стоит в другой сети, на шлюзе включают DHCP relay (агент ретрансляции): он ловит broadcast клиента и пересылает его unicast-ом на адрес сервера, подставляя в пакет giaddr - адрес интерфейса, по которому пришёл запрос. Сервер по giaddr понимает, из какой подсети клиент, и выдаёт адрес из правильного пула.
Команды и примеры
Установка сервера. Пакеты называются по-разному в двух семействах:
Код: Выделить всё
# Debian 13 / Ubuntu 24.04
apt install isc-dhcp-server
# конфиг: /etc/dhcp/dhcpd.conf
# на каком интерфейсе слушать - в /etc/default/isc-dhcp-server (INTERFACESv4)
# RHEL 10 / Fedora 41+
dnf install dhcp-server
# конфиг тот же: /etc/dhcp/dhcpd.conf
# юнит: dhcpd.service
Код: Выделить всё
# глобальные параметры аренды (в секундах)
default-lease-time 3600;
max-lease-time 86400;
authoritative; # мы тут главный DHCP, можем слать DHCPNAK чужим
# глобальные опции - наследуются всеми подсетями
option domain-name "lab.local";
option domain-name-servers 192.168.50.1, 1.1.1.1;
subnet 192.168.50.0 netmask 255.255.255.0 {
range 192.168.50.100 192.168.50.200; # динамический пул
option routers 192.168.50.1; # шлюз именно этой подсети
option broadcast-address 192.168.50.255;
}
# фиксированный адрес по MAC - вне range, чтобы не пересекался с пулом
host printer-hall {
hardware ethernet 00:1b:44:11:3a:b7;
fixed-address 192.168.50.10;
}
Код: Выделить всё
dhcpd -t -cf /etc/dhcp/dhcpd.conf # проверить конфиг
systemctl enable --now dhcpd # RHEL: юнит dhcpd
systemctl enable --now isc-dhcp-server # Debian: юнит isc-dhcp-server
journalctl -u dhcpd -f # смотреть DORA в реальном времени
Код: Выделить всё
# Debian/Ubuntu
cat /var/lib/dhcp/dhcpd.leases
# RHEL/Fedora
cat /var/lib/dhcpd/dhcpd.leases
Код: Выделить всё
lease 192.168.50.105 {
starts 4 2026/06/12 10:00:00;
ends 4 2026/06/12 11:00:00;
binding state active;
hardware ethernet 52:54:00:ab:cd:ef;
client-hostname "laptop-07";
}
Код: Выделить всё
# Debian
apt install isc-dhcp-relay
# демон relay: указать сервер и интерфейсы клиентов
dhcrelay -i eth1 192.168.50.5
# RHEL: dnf install dhcp-relay; настройка через dhcrelay.service (drop-in)
Код: Выделить всё
# отдельный экземпляр для IPv6
dhcpd -6 -cf /etc/dhcp/dhcpd6.conf
# radvd - анонсы префикса для SLAAC, конфиг /etc/radvd.conf
apt install radvd # Debian
dnf install radvd # RHEL
systemctl enable --now radvd
- Резервация fixed-address внутри диапазона range. Адрес может уйти динамически другой машине - конфликт. Держите host-адреса ВНЕ пула.
- Забыли option routers внутри subnet. Клиент получит IP, но без шлюза - локально пинг идёт, в интернет нет.
- Сервер слушает не на том интерфейсе. На Debian нужно явно прописать интерфейс в /etc/default/isc-dhcp-server, иначе демон не стартует или раздаёт не туда.
- subnet без объявления самой подсети сервера. dhcpd обязан иметь subnet-блок для КАЖДОЙ сети на своих интерфейсах, даже пустой, иначе откажется запускаться.
- Два DHCP в одном сегменте без согласования (failover/split). Клиенты получают конфликтующие предложения - классика жалоб на отвалившуюся сеть.
- authoritative забыт - сервер не шлёт DHCPNAK на устаревшие запросы, и клиент с чужой арендой долго не может перенастроиться.
- Битый dhcpd.leases после жёсткой перезагрузки. Бывает leases~ - переименуйте резервную копию, не удаляйте журнал вслепую.
- Пометка 2026: на новых стендах ISC dhcpd снят с поддержки. В проде берите ISC Kea (JSON-конфиг, БД аренд, REST API) или dnsmasq для мелких сетей. dhcpd учим только под экзамен.
- Поднимите две VM в одной изолированной сети: одна - сервер, вторая - клиент (DHCP на клиенте включён).
- Установите пакет сервера (isc-dhcp-server или dhcp-server) и напишите dhcpd.conf с подсетью своего сегмента, пулом range на 20 адресов и глобальными опциями routers и domain-name-servers.
- Проверьте конфиг через dhcpd -t, запустите сервис и через journalctl -u поймайте полный цикл DORA при загрузке клиента.
- Откройте файл dhcpd.leases и найдите аренду клиента: выпишите его MAC, выданный адрес и время ends.
- Добавьте блок host с fixed-address по MAC клиента (вне range), перезапустите сервер, обновите аренду на клиенте и убедитесь, что он получил именно зарезервированный адрес.
- Уменьшите default-lease-time до 120 секунд, перезапустите и понаблюдайте в журнале, как клиент продлевает аренду примерно на половине срока.
- Дополнительно: поднимите radvd с анонсом IPv6-префикса и проверьте через ip -6 addr, что клиент собрал адрес по SLAAC.
- Назовите четыре шага обмена DHCP и какой из них первым уходит широковещательно и почему.
- Чем директива range отличается от блока host с fixed-address и почему их адреса не должны пересекаться?
- На каких трёх уровнях dhcpd.conf можно задать опцию domain-name-servers и какой из них приоритетнее?
- Что такое giaddr и какую задачу решает DHCP relay при наличии нескольких подсетей?
- Где физически лежит журнал аренд в Debian и в RHEL и какие поля записи показывают срок аренды?
- Чем занимается radvd относительно DHCPv6 и какие порты использует DHCPv6 вместо 67/68?