Установка и настройка DHCP сервера и клиента на CentOS/RHEL

Установка и настройка DHCP сервера и клиента на CentOS/RHEL

 

Протокол DHCP (Dynamic Host Configuration Protocol) широко используется в TCP/IP сетях для автоматического назначения IP адресов и других сетевых параметров устройствам в сети. В этой статье мы покажем, как настроить DHCP сервер на CentOS 8, и как настроить DHCP клиента в этой ОС для автоматического получения настроек сети от сервера.

 

Установка и базовая настройка DHCP

В CentOS/RHEL можно установить DHCP-сервер с помощью менеджера пакетов из базового репозитория:

 

# dnf install dhcp-server -y – установка DHCP сервера для CentOS/RHEL 8

# yum install dhcp -y – установка DHCP сервера для CentOS/RHEL 7

Конфигурационный файл DHCP сервиса — /etc/dhcp/dhcpd.conf. Откройте в него и добавьте описание DHCP зоны (IP подсети) с настройками, которые ваш DHCP сервер должен выдавать клиентам.

# nano /etc/dhcp/dhcpd.conf

subnet 15.10.0.0 netmask 255.255.255.0 {
  range 15.10.0.100 15.10.0.200;
  option domain-name-servers 77.88.8.8, 8.8.8.8;
  option domain-name "winitpro.ru";
  option routers 15.10.0.1;
  option broadcast-address 15.10.0.255;
  default-lease-time 3600;
  max-lease-time 7200;
}

Краткое описание настраиваемых параметров DHCP зоны:

  • subnet – адресное пространство (IP сеть), которое обслуживает данный DHCP сервер;
  • option domain-name — параметр задает доменное имя, которое клиенты используют при запросах к DNS;
  • range – диапазон IP адресов, из которого будут назначаться адреса устройствам;
  • option domain-name-servers – адреса DNS серверов, которые будут использоваться клиентом;
  • option routers — IP адрес шлюза, который будет использоваться DHCP клиентом
  • default-lease-time, max-lease-time – время и максимальное время (в сек) на которое выдается IP адрес клиенту. После истечения этого времени IP клиент должен продлить срок аренды.
  • option broadcast-address — широковещательный (бродкаст) адрес IP сети;

Некоторые опции DHCP можно задать на уровне глобальных параметров DCHP сервера (в начале файла dhcpd.conf). Например:

option domain-name "winitpro.ru";
option domain-name-servers 77.88.8.8, 8.8.8.8;
default-lease-time 3600;
max-lease-time 7200;
authoritative;
log-facility local7;

Для проверки корректность настройки конфигурационного файла DHCP сервера используется команда:

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

На скриншоте с цифрой 1 показан пример проверки при корректной настройке конфигурационного файла DHCP. В сегменте с цифрой 2 показано, что при наличии ошибок в конфигурации утилита dhcpd указывает на них.

Добавьте сервис dhcpd в автозагрузку и запустите:

# systemctl enable dhcpd
# systemctl start dhcpd

У меня сразу сервис не запустился. Служба dhcpd вернула ошибку:

Not configured to listen on any interfaces!

На виртуальной машине у меня два интерфейса, на одном прописан белый IP-адрес, а второй пустой. В подобном случае, нужно указать конкретный интерфейс для работы DHCP и прописать на нем адрес из сети, которую мы будем раздавать клиентам.

Откройте файл:

# nano /etc/sysconfig/dhcpd

Добавьте в него следующую строку:

DHCPDARGS=ens5

Где ens5 — это имя сетевого интерфейса, котором будет обслуживать DHCP запросы.

Затем создайте файл конфигурации сетевого интерфейса (если он не создан):

# nano /etc/sysconfig/network-scripts/ifcfg-ens5

TYPE="Ethernet"
DEVICE="ens5"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR="15.10.0.5"
NETMASK="255.255.255.0"
DNS1=77.88.8.8

Выполните рестарт сети:

# service network restart – для CentOS/RHEL 7
# systemctl restart NetworkManager – для CentOS/RHEL 8

Когда настройки сети будут выполнены и применены, можно запустить сам сервис dhcpd:

# systemctl start dhcpd.service

Сервис успешно настроен и запущен. Чтобы DHCP-клиент мог получить адрес с нашего сервера, нужно добавить сервис в исключения в firewalld:

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

Если вы используете другой файерволл, откройте 67 UDP порт на нем.

Резервирование IP адресов на DHCP сервере

DHCP сервер выдает динамические IP адреса. Это значит, что IP адрес, назначаемый конкретному клиенту может иногда меняться. В конфигурационном файле DHCP сервера вы можете зарезервировать (зафиксировать) для любого клиента конкретный статический IP адрес. Просто добавьте в файл /etc/dhcp/dhcpd.conf следующие строки:

host host1 {
  hardware ethernet 52:54:00:b6:89:82; fixed-address 15.10.0.101;
}

Как вы видите, нужно указать MAC-адрес устройства и зафиксированный за ним IP адрес из зоны DHCP, которую обслуживает сервер.

Не обязательно располагать отдельный DHCP сервер в каждом сегменте сети. Один DCHP сервер может обслуживать любое количество IP-подсетей. В этом случае на уровне маршрутизатора IP сегмента нужно настроить пересылку DHCP запросов на ваш сервер (функция DHCP-relay или ip helper-address в терминологии Cisco).

В конфигурационном файле dhcpd можно добаить несколько зон DHCP. Просто добавьте еще один блок:

subnet xxx.xxx.xxx.xxx netmask 255.xxx.xxx.xxx {...}

# nano /etc/dhcp/dhcpd.conf

Чтобы не загромождать основной конфиг dhcpd, вы можете с помощью функции include подключать дополнительные файлы конфигурации:

include "/etc/dhcp/conf.d/subnets.conf";

В файле subnets.conf можно описать все DCHP зоны, которые обслуживаются вашим сервером.

Для просмотра списка IP адресов, которые выданы клиентам вашим DHCP-сервером, используйте команду:

# cat /var/lib/dhcpd/dhcpd.leases

Все логи DHCP по умолчанию пишутся в файл /var/log/messages. Для фильтрации событий dhcp можно использовать команду:

# cat /var/log/messages | grep dhcp

Или перенастроить сохранение журнала в отдельный файл, через rsyslog. В файл /etc/rsyslog.conf добавьте строку:

local6.* /var/log/dhcp.log

А в файл /etc/dhcp/dhcpd.conf строку:

log-facility local6;

Перезапустите оба сервиса:

# systemctl restart rsyslog
# systemctl restart dhcpd

Теперь все события DHCP сервера пишутся в отдельный лог-файл.

# cat /var/log/dhcp.log

Oct 28 00:28:02 server2 dhcpd[2981]: Internet Systems Consortium DHCP Server 4.3.6
Oct 28 00:28:02 server2 dhcpd[2981]: Copyright 2004-2017 Internet Systems Consortium.
Oct 28 00:28:02 server2 dhcpd[2981]: All rights reserved.
Oct 28 00:28:02 server2 dhcpd[2981]: For info, please visit https://www.isc.org/software/dhcp/
Oct 28 00:28:02 server2 dhcpd[2981]: Source compiled to use binary-leases
Oct 28 00:28:02 server2 dhcpd[2981]: Wrote 0 deleted host decls to leases file.
Oct 28 00:28:02 server2 dhcpd[2981]: Wrote 0 new dynamic host decls to leases file.
Oct 28 00:28:02 server2 dhcpd[2981]: Wrote 0 leases to leases file.
Oct 28 00:28:02 server2 dhcpd[2981]: Listening on LPF/ens5/52:54:00:80:be:db/15.10.0.0/24
Oct 28 00:28:02 server2 dhcpd[2981]: Sending on LPF/ens5/52:54:00:80:be:db/15.10.0.0/24
Oct 28 00:28:02 server2 dhcpd[2981]: Sending on Socket/fallback/fallback-net
Oct 28 00:28:02 server2 dhcpd[2981]: Server starting service.

На этом настройка и отладка DHCP-сервера окончена.

Получение сетевых настроек DCHP клиентом

Теперь посмотрим, как настроить DHCP клиент в CentOS и получить IP адрес от DHCP сервера. Я добавил дополнительный интерфейс на вторую виртуальную машину с CentOS. Теперь нужно создать файл конфигурации для этого интерфейса:

# nano /etc/sysconfig/network-scripts/ifcfg-ens5

Внесите в него следующие параметры:

DEVICE=ens5
BOOTPROTO=dhcp
TYPE=Ethernet
ONBOOT=yes

Сохраните файл и перезапустите сетевой сервис:

# systemctl restart NetworkManager

В моем случае IP адрес на интерфейсе появился только после перезагрузки сервера:

3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:b6:89:82 brd ff:ff:ff:ff:ff:ff
inet 15.10.0.101/8 brd 15.255.255.255 scope global noprefixroute ens5

Несколько полезных команд для DHCP-клиента:

# dhclient -r ens5 – освободить текущий IP адрес
# dhclient -v ens5 – получить новый IP адрес у DHCP сервера
# dhclient -v ens5 -H testserver – указать имя клиента

Имя клиента вы можете прописать на сервере(dhcp-клиенте) в файле /etc/dhcp/dhclient.conf, Добавьте строку:

send host-name "testserver";

Перезапустите DHCP-клиент:

# dhclient -r ens5
# dhclient -v ens5