DHCP или Dynamic Host Configuration Protocol – это используемый в сетях протокол посредством которого сетевое устройство может автоматически получать сетевые настройки необходимые для связи с другими устройствами во время загрузки. Использование DHCP-сервера в вашей локальной сети значительно упрощает администрирование сетевых устройств, а также позволяет централизовать точку управления сетей.
DHCP-сервер может предоставить IP-адрес устройства, маска сети, DNS-серверы, IP-адрес шлюза, широковещательный адрес сети, к которой вы принадлежите, адреса серверов точного времени и другие более экзотические настройки.
Данная инструкция актуальная для Ubuntu и Debian.
sudo apt update && sudo apt -y install isc-dhcp-server
Сразу же после установки сервер попытается запуститься, но у него это не получится. Требуется настройка.
Первым делом нужно обьяснить isc-dhcp-server на каком интернефейсе он будет работать. Эта настройка производится в файле /etc/default/isc-dhcp-server:
nano /etc/default/isc-dhcp-server
Выбираем нужный протокол и вставляем в кавычки имя интерфейса, на котором служба DHCP будет ожидать запросы на выдачу адресов.
...
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4=""
INTERFACESv6=""
...
Пример содержимого:
INTERFACESv4="eth1"
INTERFACESv6=""
Далее редактируем файл конфигурации, где описывается большиство других парметров DHCP сервера.
nano /etc/dhcp/dhcpd.conf
Приводим содержимое к следующему виду:
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.0 192.168.0.100;
range 192.168.0.120 192.168.0.254;
option domain-name-servers 192.168.0.10, 192.168.0.11;
option domain-name "it-cheats.test";
option routers 192.168.0.1;
option broadcast-address 192.168.0.255;
default-lease-time 600;
max-lease-time 7200;
}
Активировать автозагрузку сервиса:
systemctl start isc-dhcp-server
Стартовать сервис:
systemctl start isc-dhcp-server
Хост с именем pc1, у которого сетевая карта имеет MAC 08:45:33:00:00:23 должен иметь постоянный адрес 192.168.1.120.
host pc1 {
hardware ethernet 08:45:33:00:00:23;
fixed-address 192.168.1.120;
}
Для отказоустойчивой конфигурации необходимо два сервера DHCP. Синхронизируйте время, между серверами.
Предположим, что имеется два сервера, на которых установлен пакет isc-dhcp-server и добавлен в автозапуск.
Первичный сервер: 192.168.0.1
Вторичный сервер: 192.168.0.2
Обратите внимание, что параметр mclt (максимальное время выполнения клиента) должен быть определен на главном сервере, но не должен быть определен на подчиненном сервере. Параметр split является еще одним параметром , который должен быть определен на первичном и опущен из конфигурации на вторичном сервере. Cвязь между отказоустойчивыми узлами не шифруется и не аутентифицируется.
Содержимое конфигурации /etc/dhcp/dhcpd.conf на первичном сервере.
failover peer "failover-dhcp" {
primary;
address 192.168.0.1;
port 647;
peer address 192.168.0.2;
peer port 647;
max-response-delay 60;
max-unacked-updates 10;
mclt 3600;
split 128;
load balance max seconds 3;
}
authoritative;
default-lease-time 86400;
max-lease-time 86400;
update-static-leases on;
one-lease-per-client on;
omapi-port 7911;
omapi-key omapi_key;
key omapi_key {
algorithm hmac-md5;
secret a6d79e096b7055ff51e5756c77947ab5==;
# сформируйте секретный ключ с помощью любого генератора, указав тип шифрования hmac-md5
}
subnet 192.168.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name-servers it-cheats.test;
option domain-search "it-cheats.test";
pool {
failover peer "failover-dhcp";
range 192.168.0.100 192.168.0.200;
}
}
Проверка файла конфигурации:
dhcpd -t -cf /etc/dhcp/dhcpd.conf
Содержимое конфигурации /etc/dhcp/dhcpd.conf на вторичном сервере.
failover peer "failover-dhcp" {
secondary;
address 192.168.0.2;
port 647;
peer address 192.168.0.1;
peer port 647;
max-response-delay 60;
max-unacked-updates 10;
load balance max seconds 3;
}
authoritative;
default-lease-time 86400;
max-lease-time 86400;
update-static-leases on;
one-lease-per-client on;
omapi-port 7911;
omapi-key omapi_key;
key omapi_key {
algorithm hmac-md5;
secret a6d79e096b7055ff51e5756c77947ab5==;
# впишите тот же секретный ключ, как и на первичном сервере.
}
subnet 192.168.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name-servers it-cheats.test;
option domain-search "it-cheats.test";
pool {
failover peer "failover-dhcp";
range 192.168.0.100 192.168.0.200;
}
}
После настройки обоих серверов - необходимо перезапустить обе службы.
Если возникает необходимость передевать разным компьютерам одной подсети разные параметры, например для PXE-загрузки, можно использовать группы внутри подсети. Например:
#Группа для нового LTSP
#================================================================================================================================
group pxe1 {
option ipxe.no-pxedhcp 1;
if exists ipxe.menu {filename "ltsp/ltsp.ipxe"; }
elsif option arch = 00:00 { filename "ltsp/undionly.kpxe"; }
elsif option arch = 00:07 { filename "ltsp/snponly.efi"; }
elsif option arch = 00:09 { filename "ltsp/snponly.efi"; }
else { filename "ltsp/unmatched-client"; }
next-server 192.168.100.10;
host pc1 { hardware ethernet 00:18:f3:e3:85:87; fixed-address 192.168.100.52; }
host pc2 { hardware ethernet b0:6e:bf:ad:7d:f1; fixed-address 192.168.100.50; }
}
#Группа для старого LTSP
#=================================================================================================================================
group pxe2 {
next-server 192.168.100.131;
filename "/ltsp/i386/pxelinux.0";
host pc3 { hardware ethernet 00:18:f3:e3:85:87; fixed-address 192.168.100.52; }
}
}
#Простые пользователи с загрузкой с локального пк
#================================================================================================================================
host pc4 { hardware ethernet 00:15:5d:31:c4:1f; fixed-address 192.168.100.10; }
Для более легкого администрирования и траблшутинга я стараюсь выводить лог из системного журнала syslog в отдельный файл, например в /var/log/dhcp/dhcp.log
Первым делом создайте каталог /var/log/dhcp и задайте нужные права доступа:
sudo mkdir -p /var/log/dhcp
sudo chown root:adm /var/log/dhcp
sudo chmod 750 /var/log/dhcp
Теперь настроим сам rsyslog. Откройте или создайте конфигурационный файл для перенаправления логов isc-dhcp-server. Например:
sudo nano /etc/rsyslog.d/isc-dhcp-server.conf
Добавьте туда следующие строки:
if $programname == 'dhcpd' then /var/log/dhcp/dhcpd.log
& stop
Сохраните файл и перезапустите rsyslog:
sudo systemctl restart rsyslog
Чтобы логи не росли бесконечно, настройте ротацию логов с помощью logrotate. Создайте файл настройки:
sudo nano /etc/logrotate.d/dhcpd
Добавьте в файл:
/var/log/dhcp/dhcpd.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 syslog adm
postrotate
systemctl restart isc-dhcp-server > /dev/null
endscript
}
Сохраните файл.
Перезапустите сервис isc-dhcp-server, чтобы убедиться, что все работает:
sudo systemctl restart isc-dhcp-server