DHCP-сервер [210.1]

Рейтинг: 62.3% · 11 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

DHCP-сервер [210.1]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1] (вы здесь)
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 30. DHCP-сервер [210.1]

В прошлых уроках сеть настраивалась руками: адрес, маска, шлюз, 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
Базовый dhcpd.conf с глобальными опциями, динамическим пулом и одной резервацией:

Код: Выделить всё

# глобальные параметры аренды (в секундах)
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 ругается на любую мелочь, лучше поймать заранее:

Код: Выделить всё

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
Внутри каждая запись выглядит так - видно адрес, срок и MAC клиента:

Код: Выделить всё

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";
}
Ретрансляция. На промежуточном шлюзе ставят relay-агент и указывают адрес сервера:

Код: Выделить всё

# Debian
apt install isc-dhcp-relay
# демон relay: указать сервер и интерфейсы клиентов
dhcrelay -i eth1 192.168.50.5
# RHEL: dnf install dhcp-relay; настройка через dhcrelay.service (drop-in)
DHCPv6 и автоконфигурация. В IPv6 сосуществуют два механизма. Маршрутизатор шлёт Router Advertisement (RA), по которым хост через SLAAC сам строит адрес из префикса - за RA отвечает radvd. А DHCPv6 (dhcpd с ключом -6, отдельный демон и порты 546/547) раздаёт то, что SLAAC не умеет: DNS, домены, либо адреса в managed-режиме.

Код: Выделить всё

# отдельный экземпляр для 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?
👍3 ❤️4 🔥1 😄 🤔
Аватара пользователя
lazywarlock
Сообщения: 1
Зарегистрирован: 18 май 2026, 19:12

Re: DHCP-сервер [210.1]

Сообщение lazywarlock »

А если в сегменте случайно окажется второй DHCP от чьего-то роутера - как клиент решает, чей OFFER взять? У меня так полкласса разъехалось по двум подсетям.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
Pacha
Сообщения: 1
Зарегистрирован: 24 май 2026, 04:43

Re: DHCP-сервер [210.1]

Сообщение Pacha »

На RHEL 10 поставил dhcp-server, а dhcpd падает молча. Оказалось не объявил subnet для интерфейса сервера, dhcpd -t сразу показал. Реально первым делом гоняйте проверку конфига.
👍1 ❤️ 🔥1 😄 🤔1
Ответить
← Предыдущая глава
Файловый сервер NFS [209.2]
Следующая глава →
Аутентификация PAM и SSSD [210.2]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей