DHCP сервер на Ubuntu 24.04.1 LTS

DHCP сервер на Ubuntu 24.04.1 LTS
Photo by Nastya Dulhiier / Unsplash

Предисловие

Это третья заметка из серии заметок по настройке домашнего шлюза на Ubuntu 24.04.1 LTS. Предыдущий материал:

DNS сервер Bind на Ubuntu 24.04.1 LTS
Предисловие Это вторая из цикла заметок по настройке домашнего сетевого шлюза на базе Ubuntu 24.04.1. Предыдущий материал: Сетевой шлюз на базе Ubuntu 24.04 (Gateway)Предисловие После очередного успешного теста на хоть и домашнем, но PRODe Ubuntu 20.04 - он лег далеко и надолго. Бэкапа и точек

Установка

sudo apt install isc-dhcp-server

Настройка

Редактируем файл /etc/default/isc-dhcp-server, в нём необходимо прописать имя интерфейса локальной сети, в которую следует раздавать настройки, в моём случае настройка такая INTERFACESv4="enp3s0".

Редактируем файл /etc/dhcp/dhcpd.conf . Указываем основные настройки:

# option definitions common to all supported networks...
option domain-name "savenkoff.local";
option domain-name-servers 192.168.1.1;

default-lease-time 600;
max-lease-time 7200;

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
  • option domain-name - имя домена;
  • option domain-name-servers - IP адрес сервера имен;
  • authoritative - именно с этой опцией dhcp сервер станет приоритетным.

Добавляем настройки диапазона раздачи адресов в локальной сети:

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.254;
  option domain-name "savenkoff.local";
  option domain-name-servers 192.168.1.1;
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.1;
  default-lease-time 7200;
  max-lease-time 604800;
}

При необходимости выдачи статических IP по MAC адресу создаём по блоку:

host my-computer {
  hardware ethernet 00:00:00:00:00:00;
  fixed-address 192.168.1.100;
  server-name "computer.savenkoff.local";
}

Сохраняем все настройки.

Запускаем, проверяем

sudo systemctl restart isc-dhcp-server.service

Проверяем с помощью команды sudo systemctl status isc-dhcp-server.service, ожидаем вывод:

● isc-dhcp-server.service - ISC DHCP IPv4 server
     Loaded: loaded (/usr/lib/systemd/system/isc-dhcp-server.service; enabled; preset: enabled)
     Active: active (running) since Mon 2024-10-21 21:58:01 +07; 1 day 16h ago
       Docs: man:dhcpd(8)
   Main PID: 1083 (dhcpd)
      Tasks: 1 (limit: 9346)
     Memory: 5.8M (peak: 6.3M)
        CPU: 173ms
     CGroup: /system.slice/isc-dhcp-server.service
             └─1083 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf enp3s0

Переподключаемся к сети с локальных устройств, при этом отключив статический IP, если такой был настроен. Подключение должно пройти успешно, если адрес клиента не прописан, как статический - можно посмотреть его в списке выданных командой dhcp-lease-list:

dhcp-lease-list
To get manufacturer names please download http://standards-oui.ieee.org/oui.txt to /usr/local/etc/oui.txt
Reading leases from /var/lib/dhcp/dhcpd.leases
MAC                IP              hostname       valid until         manufacturer
===============================================================================================
00:00:00:00:00:00  192.168.1.205   savenkoff      2024-10-23 10:17:06 -NA-

Информация о производителе

Последуем рекомендациям команды выше и загрузим информацию о производителях для расширенного вывода в команде dhcp-lease-list:

cd /usr/local/etc && sudo wget http://standards-oui.ieee.org/oui.txt

Логирование в отдельный файл

Чтобы не смотреть бесконечный /var/log/syslog и пытаться в нём что-то найти, будем выводить логирование в отдельный файл с помощью RSyslog. Для этого создаём файл командой sudo nano /etc/rsyslog.d/40-dhcp.conf, со следующим содержимым:

local7.* /var/log/dhcpd.log
& stop

и перезагружаем сервис rsyslog sudo service rsyslog restart. Проверяем, что все работает sudo service rsyslog status.

Проверяем наличие файла лога, он должен существовать и скорее всего уже быть не пуст.