Настройка DHCP-сервера в Linux — isc-dhcp-server

Проблема

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

В терминале пишем

sudo apt update
sudo apt install isc-dhcp-server -y

CentOS/RHEL:

В терминале пишем

sudo yum install dhcp-server -y

После установки служба dhcpd не запустится автоматически, так как требуется настройка. Подробную информацию о пакете можно найти в Debian package information или в официальных репозиториях CentOS.

Шаг 2. Определение сетевого интерфейса

Нужно указать, на каком сетевом интерфейсе DHCP-сервер будет слушать запросы. Обычно это интерфейс, смотрящий в локальную сеть (например, eth0, ens18, enp0s3). Узнайте имя интерфейса:

Для этого в терминале

ip a

В Ubuntu/Debian отредактируйте файл /etc/default/isc-dhcp-server:

sudo nano /etc/default/isc-dhcp-server

Найдите строку INTERFACESv4 и укажите ваш интерфейс (можно через пробел, если несколько):

INTERFACESv4="ens18"

В CentOS/RHEL интерфейс указывается в /etc/sysconfig/dhcpd:

sudo nano /etc/sysconfig/dhcpd

Добавьте:

DHCPDARGS="ens18"

Шаг 3. Базовая настройка DHCP-сервера

Основной конфигурационный файл — /etc/dhcp/dhcpd.conf. Сделаем его резервную копию:

sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak

Откроем файл для редактирования:

sudo nano /etc/dhcp/dhcpd.conf

Пример минимальной конфигурации для подсети 192.168.1.0/24. Синтаксис и все опции подробно описаны в официальной документации: man dhcpd.conf и man dhcp-options.

# Глобальные параметры
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-сервером для данной сети (рекомендуется включать). Подробнее в man dhcpd.conf.

Шаг 4. Резервирование адресов (статическое назначение)

Если нужно, чтобы определённое устройство всегда получало один и тот же IP (например, принтер или сервер), используйте привязку по MAC-адресу. Внутри той же секции subnet добавьте блок host:

host printer {
    hardware ethernet 00:11:22:33:44:55;
    fixed-address 192.168.1.50;
}

Можно также задать для этого хоста индивидуальные параметры (шлюз, DNS и т.п.), если они отличаются от общих. Описание параметра host есть в man dhcpd.conf.

Шаг 5. Дополнительные параметры

DHCP может передавать множество опций. Наиболее полезные:

  • 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).

Полный список опций можно найти в man-странице dhcp-options (онлайн-версия).

Шаг 6. Проверка конфигурации и запуск

После редактирования проверьте синтаксис:

sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf

Если ошибок нет, запустите службу:

sudo systemctl start isc-dhcp-server   # Ubuntu
sudo systemctl start dhcpd              # CentOS

Включите автозапуск:

sudo systemctl enable isc-dhcp-server

Шаг 7. Настройка брандмауэра

DHCP использует UDP-порт 67 (сервер) и 68 (клиент). Откройте порт 67 на сервере.

Для Ubuntu с ufw:

sudo ufw allow 67/udp

Для CentOS с firewalld:

sudo firewall-cmd --permanent --add-service=dhcp
sudo firewall-cmd --reload

Если сервер находится за файрволом, убедитесь, что разрешены пакеты с IP-адреса 0.0.0.0 на 255.255.255.255 через порты 67 и 68. Это стандартное поведение, описанное в RFC 2131.

Шаг 8. Проверка работы

На любом клиенте (компьютере, телефоне) включите автоматическое получение IP (DHCP). После этого проверьте, какой адрес был выдан. Можно также посмотреть логи DHCP-сервера:

Ubuntu:

sudo tail -f /var/log/syslog | grep dhcpd

CentOS:

sudo tail -f /var/log/messages | grep dhcpd

Вы должны увидеть сообщения о выдаче IP-адресов.

Для проверки на клиенте (Windows) выполните ipconfig /all и убедитесь, что IP принадлежит вашему пулу, а шлюз и DNS указаны верно.

Шаг 9. Мониторинг и управление арендами

Файл аренд находится в /var/lib/dhcp/dhcpd.leases. В нём хранятся все выданные адреса с указанием MAC, времени начала и окончания аренды. Просмотреть текущие аренды можно, например, командой:

sudo cat /var/lib/dhcp/dhcpd.leases

Этот файл не нужно редактировать вручную он обновляется автоматически. Подробная информация о формате файла аренд доступна в man-странице 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. Подробнее в man dhcpd.conf.

Настройка DHCP-сервера на Linux задача, которая решается за 15-20 минут, но значительно упрощает администрирование сети. Вы избавляетесь от ручного ввода IP-адресов, снижаете риск ошибок и получаете централизованное управление параметрами сети. isc-dhcp-server стабильно работает годами и легко интегрируется с другими сервисами (DNS, PXE, мониторингом). Для углублённого изучения рекомендуется обратиться к официальной документации ISC DHCP (kb.isc.org) и соответствующим man-страницам.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Популярные
Новые Старые

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
Menu