Проблема
В офисе или домашней сети несколько компьютеров, принтеров, телефонов и других устройств. Если на каждом из них вручную прописывать IP адрес, маску, шлюз и DNS, это долго, чревато ошибками и неудобно при расширении сети. При добавлении нового устройства нужно снова лезть в настройки. К тому же статические адреса могут конфликтовать, если два администратора назначат один и тот же IP разным машинам.
Решение очевидно. Нужен DHCP сервер, который будет автоматически выдавать сетевым устройствам IP адреса и другие параметры. В Windows Server такая роль есть, но если у вас уже есть Linux сервер (или старый компьютер, который можно превратить в сервер), то можно настроить DHCP на нём бесплатно и с минимальными затратами.
Решение
ISC DHCP Server (dhcpd) это стандартный DHCP сервер для Linux, разрабатываемый Internet Systems Consortium (ISC). Полная документация доступна на официальном сайте ISC. Он поддерживает автоматическую выдачу IP адресов из заданного пула. Резервирование (статическое назначение) по MAC адресу. Выдачу параметров: шлюз, DNS серверы, доменное имя, NTP серверы, время аренды и многое другое. Поддержку нескольких сетей (разных подсетей) на одном сервере.
Важное примечание. ISC объявила о прекращении поддержки проекта ISC DHCP в пользу новой реализации Kea. Однако ISC DHCP остаётся стабильным и широко используемым решением, особенно в дистрибутивах, где он является стандартным пакетом.
Мы настроим isc-dhcp-server на Ubuntu Server. Инструкции подойдут и для Debian, CentOS, RHEL с небольшими изменениями. Создадим DHCP пул для локальной сети, зарезервируем статические адреса для важных устройств (принтеры, серверы), настроим время аренды и добавим необходимые параметры.
Пошаговая инструкция
Шаг 1. Установка DHCP сервера
Ubuntu, Debian.
text
sudo apt update
sudo apt install isc-dhcp-server -y
CentOS, RHEL.
text
sudo yum install dhcp-server -y
После установки служба dhcpd не запустится автоматически, так как требуется настройка.
Шаг 2. Определение сетевого интерфейса
Нужно указать, на каком сетевом интерфейсе DHCP сервер будет слушать запросы. Обычно это интерфейс, смотрящий в локальную сеть (например eth0, ens18, enp0s3). Узнайте имя интерфейса.
text
ip a
В Ubuntu, Debian отредактируйте файл /etc/default/isc-dhcp-server.
text
sudo nano /etc/default/isc-dhcp-server
Найдите строку INTERFACESv4 и укажите ваш интерфейс (можно через пробел, если несколько).
text
INTERFACESv4="ens18"
В CentOS, RHEL интерфейс указывается в /etc/sysconfig/dhcpd.
text
sudo nano /etc/sysconfig/dhcpd
Добавьте.
text
DHCPDARGS="ens18"
Шаг 3. Базовая настройка DHCP сервера
Основной конфигурационный файл это /etc/dhcp/dhcpd.conf. Сделаем резервную копию.
text
sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
Откроем файл для редактирования.
text
sudo nano /etc/dhcp/dhcpd.conf
Пример минимальной конфигурации для подсети 192.168.1.0/24.
text
# Глобальные параметры
option domain-name "company.local";
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 600;
max-lease-time 7200;
# Логирование (по желанию)
log-facility local7;
# Если этот DHCP сервер является официальным для сети, раскомментируйте:
# authoritative;
# Определение подсети
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 domain-name-servers 192.168.1.10, 8.8.8.8; # DNS серверы
option domain-name "company.local";
default-lease-time 600; # время аренды по умолчанию (10 минут)
max-lease-time 7200; # максимальное время аренды (2 часа)
}
Пояснения.
option domain-name доменное имя, которое будет передаваться клиентам.
option domain-name-servers список DNS серверов.
default-lease-time и max-lease-time время аренды IP в секундах.
subnet описывает подсеть. В ней задаётся пул адресов (range), шлюз (routers) и другие параметры.
authoritative указывает, что этот сервер является официальным DHCP сервером для данной сети (рекомендуется включать).
Шаг 4. Резервирование адресов (статическое назначение)
Если нужно, чтобы определённое устройство всегда получало один и тот же IP (например принтер или сервер), используйте привязку по MAC адресу. Внутри той же секции subnet добавьте блок host.
text
host printer {
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.1.50;
}
Можно также задать для этого хоста индивидуальные параметры (шлюз, DNS и т.п.), если они отличаются от общих.
Шаг 5. Дополнительные параметры
DHCP может передавать множество опций. Наиболее полезные.
text
option ntp-servers 192.168.1.10; # NTP сервер для синхронизации времени
option netbios-name-servers 192.168.1.10; # WINS сервер (если используется)
option broadcast-address 192.168.1.255; # широковещательный адрес
option tftp-server-name "192.168.1.10"; # TFTP сервер (для сетевой загрузки PXE)
Шаг 6. Проверка конфигурации и запуск
После редактирования проверьте синтаксис.
text
sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
Если ошибок нет, запустите службу.
text
sudo systemctl start isc-dhcp-server # Ubuntu
sudo systemctl start dhcpd # CentOS
Включите автозапуск.
text
sudo systemctl enable isc-dhcp-server
Шаг 7. Настройка брандмауэра
DHCP использует UDP порт 67 (сервер) и 68 (клиент). Откройте порт 67 на сервере.
Для Ubuntu с ufw.
text
sudo ufw allow 67/udp
Для CentOS с firewalld.
text
sudo firewall-cmd --permanent --add-service=dhcp
sudo firewall-cmd --reload
Если сервер находится за файрволом, убедитесь, что разрешены пакеты с IP адреса 0.0.0.0 на 255.255.255.255 через порты 67 и 68. Это стандартное поведение.
Шаг 8. Проверка работы
На любом клиенте (компьютере, телефоне) включите автоматическое получение IP (DHCP). После этого проверьте, какой адрес был выдан. Можно также посмотреть логи DHCP сервера.
Ubuntu.
text
sudo tail -f /var/log/syslog | grep dhcpd
CentOS.
text
sudo tail -f /var/log/messages | grep dhcpd
Вы должны увидеть сообщения о выдаче IP адресов.
Для проверки на клиенте (Windows) выполните ipconfig /all и убедитесь, что IP принадлежит вашему пулу, а шлюз и DNS указаны верно.
Шаг 9. Мониторинг и управление арендами
Файл аренд находится в /var/lib/dhcp/dhcpd.leases. В нём хранятся все выданные адреса с указанием MAC, времени начала и окончания аренды. Просмотреть текущие аренды можно командой.
text
sudo cat /var/lib/dhcp/dhcpd.leases
Этот файл не нужно редактировать вручную. Он обновляется автоматически.
Шаг 10. Устранение распространённых проблем
ПроблемаПричинаРешениеКлиенты не получают IPИнтерфейс не указан в настройках или брандмауэр блокирует портПроверьте INTERFACES в /etc/default/isc-dhcp-server, откройте порт 67/udp в брандмауэреОшибка «No subnet declaration»Не описана подсеть для интерфейсаУбедитесь, что в конфиге есть subnet, соответствующая сети, в которой работает интерфейсОшибка «No free leases»Пул адресов исчерпанУвеличьте пул или уменьшите время арендыDHCP не запускается после правки конфигаСинтаксическая ошибкаПроверьте конфигурацию командой dhcpd -tНе работает для Wi-Fi клиентовИнтерфейс смотрит в другую подсетьЕсли Wi-Fi и LAN в разных подсетях, нужно добавить отдельную секцию subnet для каждой
Расширенные настройки
Разделение подсетей. Если сервер подключён к нескольким сетям (например LAN и Wi-Fi), можно описать несколько секций subnet с разными пулами.
PXE (сетевая загрузка). Добавьте опции next-server и filename для загрузки по сети.
Динамическое обновление DNS (DDNS). Можно настроить DHCP на автоматическое добавление записей в DNS сервер BIND. Для этого используйте директиву ddns-update-style interim; и укажите ddns-domainname.
Настройка DHCP сервера на Linux задача, которая решается за 15-20 минут, но значительно упрощает администрирование сети. Вы избавляетесь от ручного ввода IP адресов, снижаете риск ошибок и получаете централизованное управление параметрами сети. isc-dhcp-server стабильно работает годами и легко интегрируется с другими сервисами (DNS, PXE, мониторингом). Для углублённого изучения рекомендуется обратиться к официальной документации ISC DHCP и соответствующим man страницам.