Долгие годы стандартным DHCP-сервером в Linux был ISC DHCP (пакет isc-dhcp-server, файл dhcpd.conf). Его разработка прекращена, и на смену пришёл Kea от того же разработчика. Для маленькой сети, лаборатории или домашнего маршрутизатора проще dnsmasq - лёгкий сервер, совмещающий DHCP и DNS. Разберём оба.
Инструкция подходит для Ubuntu 22.04/24.04, Debian 12/13, Fedora и RHEL 9/10 и родственных дистрибутивов.
Перед началом серверу нужен статический IP-адрес в той подсети, которую он будет обслуживать. И убедитесь, что в сети нет другого DHCP-сервера, например, на маршрутизаторе: два сервера будут раздавать адреса вперемешку.
Kea
Установка
sudo apt install kea-dhcp4-server # Debian, Ubuntu
sudo dnf install kea # Fedora, RHEL и родственные
Служба называется kea-dhcp4-server в Debian и Ubuntu и kea-dhcp4 в Fedora и RHEL. Для IPv6 есть отдельный сервер kea-dhcp6.
Конфигурация
Файл /etc/kea/kea-dhcp4.conf в формате JSON (комментарии разрешены). Минимальный рабочий пример:
{
"Dhcp4": {
"interfaces-config": {
"interfaces": [ "eth0" ]
},
"lease-database": {
"type": "memfile",
"persist": true,
"name": "/var/lib/kea/kea-leases4.csv"
},
"valid-lifetime": 86400,
"renew-timer": 43200,
"rebind-timer": 75600,
"subnet4": [
{
"id": 1,
"subnet": "192.168.10.0/24",
"pools": [ { "pool": "192.168.10.100 - 192.168.10.200" } ],
"option-data": [
{ "name": "routers", "data": "192.168.10.1" },
{ "name": "domain-name-servers", "data": "192.168.10.1, 192.168.10.2" },
{ "name": "domain-name", "data": "office.example" }
],
"reservations": [
{
"hw-address": "52:54:00:12:34:56",
"ip-address": "192.168.10.20",
"hostname": "printer-1"
}
]
}
],
"loggers": [
{
"name": "kea-dhcp4",
"output-options": [ { "output": "/var/log/kea/kea-dhcp4.log" } ],
"severity": "INFO"
}
]
}
}
Что здесь:
- interfaces - на каких интерфейсах слушать запросы. Укажите только внутренние, иначе сервер начнёт раздавать адреса провайдеру.
- lease-database - где хранить аренды. Для небольшой сети достаточно файла, для крупных можно использовать MySQL или PostgreSQL.
- valid-lifetime - срок аренды в секундах (в примере сутки), renew-timer и rebind-timer - когда клиент начнёт продлевать аренду.
- subnet4 - подсети с уникальным
id, пулами адресов и параметрами. - reservations - постоянные адреса по MAC-адресу. Адрес резервирования лучше брать вне пула, чтобы его не выдали кому-то другому до первого подключения устройства.
Параметры, указанные вне subnet4, действуют для всех подсетей.
Проверка и запуск
sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf
sudo systemctl restart kea-dhcp4-server
sudo systemctl enable kea-dhcp4-server
sudo systemctl status kea-dhcp4-server
Первая команда проверяет синтаксис, не запуская сервер. Выданные аренды записываются в /var/lib/kea/kea-leases4.csv, одна строка на аренду, с адресом, MAC-адресом, именем и временем окончания.
Если клиенты находятся в других подсетях, на маршрутизаторах настраивают ретрансляцию DHCP на адрес сервера, а в конфигурацию Kea добавляют соответствующие подсети.
dnsmasq
dnsmasq подходит, когда сеть небольшая и хочется одной программой закрыть и DHCP, и локальный DNS: клиенты автоматически становятся доступны по имени.
Установка
sudo apt install dnsmasq
sudo dnf install dnsmasq
Конфигурация
Основной файл - /etc/dnsmasq.conf, но удобнее положить свой файл в /etc/dnsmasq.d/:
# /etc/dnsmasq.d/lan.conf
interface=eth0
bind-interfaces
dhcp-range=192.168.10.100,192.168.10.200,255.255.255.0,12h
dhcp-option=option:router,192.168.10.1
dhcp-option=option:dns-server,192.168.10.1
domain=office.example
dhcp-host=52:54:00:12:34:56,192.168.10.20,printer-1
dhcp-authoritative
- dhcp-range - диапазон, маска и срок аренды.
- dhcp-option - шлюз, DNS-серверы и другие параметры.
- dhcp-host - резервирование: MAC-адрес, IP-адрес, имя.
- dhcp-authoritative - сервер считает себя единственным в сети и быстрее отвечает клиентам, вернувшимся с чужим адресом.
Конфликт с локальным DNS
dnsmasq по умолчанию запускает и DNS-сервер на порту 53. В дистрибутивах, где этот порт уже занят службой systemd-resolved, dnsmasq не запустится с ошибкой «Address already in use». Варианты:
- нужен только DHCP - добавьте в конфигурацию
port=0, DNS-часть отключится; - нужен и DNS - оставьте
bind-interfacesиinterface=eth0, чтобы dnsmasq слушал только внутренний интерфейс, аsystemd-resolved- свой локальный адрес.
Проверка и запуск
sudo dnsmasq --test
sudo systemctl restart dnsmasq
sudo systemctl enable dnsmasq
Аренды хранятся в /var/lib/misc/dnsmasq.leases (в некоторых дистрибутивах - в /var/lib/dnsmasq/).
Что выбрать

- Kea - для офисной сети, нескольких подсетей, большого числа клиентов, отказоустойчивой пары серверов и управления через API.
- dnsmasq - для небольшой сети, лабораторного стенда, виртуальных машин, домашнего сервера или маршрутизатора, когда нужны DHCP и DNS в одной простой настройке.
Файрвол и проверка с клиента
Сервер принимает запросы на UDP-порт 67. Если на нём включён файрвол, откройте этот порт на внутреннем интерфейсе:
sudo ufw allow in on eth0 to any port 67 proto udp
sudo firewall-cmd --add-service=dhcp --permanent && sudo firewall-cmd --reload
На клиенте Linux получить адрес заново:
sudo nmcli connection down "Проводное подключение 1" && sudo nmcli connection up "Проводное подключение 1"
sudo dhclient -v eth0 # в системах, где используется dhclient
На Windows - ipconfig /release и ipconfig /renew.
Частые проблемы
- Клиенты не получают адрес, в журнале сервера пусто - сервер слушает не тот интерфейс или запросы не доходят из-за файрвола либо отсутствия ретрансляции между подсетями.
- Сервер не запускается - ошибка в конфигурации (проверьте командой
kea-dhcp4 -tилиdnsmasq --test) или занят порт. - Сервер получает запрос, но не отвечает - подсеть в конфигурации не совпадает с адресом интерфейса, на который пришёл запрос.
- Клиенты получают адреса от другого сервера - в сети есть ещё один DHCP-сервер. Найти его можно на клиенте:
sudo nmap --script broadcast-dhcp-discoverпокажет все ответившие серверы.





Спасибо, полезная статья, правда пришлось кое что поменять — но вроде работает сервер…
Статья супер, все работает — благодарю автора и жму руку
На новой версии не работает, можете не пытаться, если найду гайд на новую обновлю комментарий 🙄 🙄