Установка сервера DHCP и DNS в Linux CentOS8

Установка сервера DHCP

Установка DHCP сервера
yum -y install dhcp
Скопировать пример конфига
cp /us/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
Открыть скопированный конфиг
/etc/dhcp/dhcpd.conf
Записать в него, с нужными параметрами, следующее
ddns-updates on;
ddns-update-style interim;
update-static-leases on;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
authoritative;
  
zone local {
  primary 192.168.10.15;     #ip-адрес текущего сервера
}

zone 10.168.192.in-addr.arpa.{
  primary 192.168.10.15;     #ip-адрес текущего сервера 
}

subnet 192.168.10.0 netmask 255.255.255.0 {   #подсеть и маска
  range 192.168.10.100 192.168.10.250;        #диапазон из которого будут выдаваться адреса
  option domain-name-servers 192.168.10.15;          #ip-адрес текущего сервера 
  option domain-name "local";                        #имя домена
  option routers 192.168.10.10;                      #ip-адрес шлюза
  option broadcast-address 192.168.10.255;           #широковещательный ip-адрес
  default-lease-time 86400;                          #через сколько будет происходить смена ip-адреса
  max-lease-time 259200;                             #максимальное время через которое будет происходить смена ip-адреса
}

Host HOSTNAME1 {                         #резервирование ip-адреса для указанного компьютера
  hardware ethernet 70:4D:7B:B4:49:97;
  fixed-address 192.168.10.50;
}

Host HOSTNAME2 {
  hardware ethernet B0:6E:BF:7E:2D:A1;
  fixed-address 192.168.10.51;
}
Запустить dhcp, добавить в автозагрузку, проверить статус
systemctl start dhcpd
systemctl enable dhcpd
systemctl status dhcpd
Если возникли ошибки, показывает подробности
journal -xe
Посмотреть выданные адреса можно в файле
/var/lib/dhcpd/dhcpd.leases

Установка DNS сервера

Установка
yum -y install bind bind-utils
В файле
/etc/resolv.conf
Должно быть
nameserver 127.0.0.1
search local
Конфиг
/etc/named.conf
Изменить под свои параметры
options {
  listen-on port 53 {
      127.0.0.1;
      192.168.10.15;     #ip-адрес текущего сервера
  };
  allow-query {
      localhost; 
      192.168.10.0/24;   #подсеть в которой будет работать dns сервер
  };
  forwarders {
      192.168.10.10;     #dns-сервер на который идет перенаправление если неизвестен адрес
  };
}
Добавление зон, указываются пути к файлам зон
zone "local" {
  type master;
  file "/var/named/forward.bind";
};

zone "10.168.192.in-addr.arpa"{
  type master;
  file "/var/named/revers.bind";
};
Скопировать шаблон прямой зоны
cp /var/named/named.localhost /var/named/forward.bind
В шаблоне прямой зоны
/var/named/forward.bind
Прописать
$ORIGIN .
$TTL 604800     ; 1 week
local                   IN SOA  DNSDHCP.local. root.DNSDHCP.local. (    #DNSDHCP -имя текущего сервера
  10487      ; serial
  86400      ; refresh (1 day)
  3600       ; retry (1 hour)
  604800     ; expire (1 week)
  10800      ; minimum (3 hours)
)
NS      DNSDHCP.local.   #DNSDHCP -имя текущего сервера
A       192.168.10.15    #ip-адрес текущего сервера
$ORIGIN local.
$TTL 3600       ; 1 hour
HOSTNAME1             A       192.168.10.35   #соответствие имени компьютера его ip-адресу
Скопировать шаблон обратной зоны
cp /var/named/forward.bind /var/named/revers.bind
В шаблоне обратной зоны
/var/named/revers.bind
Прописать
$ORIGIN .
$TTL 604800     ; 1 week
10.168.192.in-addr.arpa                IN SOA  DNSDHCP.local. root.DNSDHCP.local (
  7028       ; serial
  86400      ; refresh (1 day)
  3600       ; retry (1 hour)
  604800     ; expire (1 week)
  10800      ; minimum (3 hours)
)
NS      DNSDHCP.local.                  #DNSDHCP -имя текущего сервера
$ORIGIN 10.168.192.in-addr.arpa.        #10.168.192 -ip-адрес подсети в перевернутом виде
$TTL 604800     ; 1 week
15                      PTR     DNSDHCP.local.
$TTL 3600       ; 1 hour
35                      PTR     HOSTNAME1.local.
Открыть порт 53
firewall-cmd --zone=public --add-port=53/tcp --permanent
firewall-cmd --zone=public --add-port=53/udp --permanent
firewall-cmd --reload
Сменить владельцев файлов зон
chown named.named /var/named/forward.bind
chown named.named /var/named/rever.bind
Запустить bind, добавить в автозагрузку
systemctl start named
systemctl enable named
можно проверить работу с помощью
host HOSTNAME
host 192.168.10.35

Связывание DNS и DHCP

Нужно, чтобы хосты в файлы зон dns заносились автоматически
Для этого нужно сгенерировать ключ, при этом нужно находится не в корневой папке, а например в
/var/named
Для генерации ключа используется команда
divssec-keygen -a hmac-md5 -b 128 -r/dev/urandom -n USER dhcp_updater
В текущей папке появятся два файла, один из них вида kdhcp_updater.+15f+53664.private нужно прочитать этот файл, в нем будет рандомный ключ, заканчивающийся на ==
В файле
/etc/named.conf
После закрывающей скобки раздела options добавить
key DHCP_UPDATER{
  algorithm HMAC-MD5.SIG-ALG.REG.INT;
  secret QihiST8OqK6ilv6CZMs78A==;   #ключ из файла полученный ранее
};
Изменить
zone "local" {
  type master;
  file "/var/named/forward.bind";
  allow-update {key DHCP_UPDATER;};
};
zone "10.168.192.in-addr.arpa"{
  type master;
  file "/var/named/revers.bind";
  allow-update {key DHCP_UPDATER;};
};
В разделе options перед forwarders добавить
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
В файле
/etc/dhcp/dhcpd.conf
Добавить после закрывающей скобки раздела options
key DHCP_UPDATER {
  algorithm HMAC-MD5;
  secret "QihiST8OqK6ilv6CZMs78A==";
}
zone local {
  primary 192.168.10.15;
  key DHCP_UPDATER;
}
zone 10.168.192.in-addr.arpa.{
  primary 192.168.10.15;
  key DHCP_UPDATER;
}
Перезагрузить службы dhcp и dns, после этого записи будут сами добавляться в файлы forward и revers
systemctl restart named
systemctl restart dhcp

Конфигурационные файлы целиком

/etc/dhcp/dhcpd.conf
ddns-updates on;
ddns-update-style interim;
update-static-leases on;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
authoritative;
  
key DHCP_UPDATER {
  algorithm HMAC-MD5;
  secret "QihiST8OqK6ilv6CZMs78A==";
}
zone local {
  primary 192.168.10.15;
  key DHCP_UPDATER;
}
zone 10.168.192.in-addr.arpa.{
  primary 192.168.10.15;
  key DHCP_UPDATER;
}

subnet 192.168.10.0 netmask 255.255.255.0 {   #подсеть и маска
  range 192.168.10.100 192.168.10.250;        #диапазон из которого будут выдаваться адреса
  option domain-name-servers 192.168.10.15;          #ip-адрес текущего сервера 
  option domain-name "local";                        #имя домена
  option routers 192.168.10.10;                      #ip-адрес шлюза
  option broadcast-address 192.168.10.255;           #широковещательный ip-адрес
  default-lease-time 86400;                          #через сколько будет происходить смена ip-адреса
  max-lease-time 259200;                             #максимальное время через которое будет происходить смена ip-адреса
}

Host HOSTNAME1 {                         #резервирование ip-адреса для указанного компьютера
  hardware ethernet 70:4D:7B:B4:49:97;
  fixed-address 192.168.10.50;
}

Host HOSTNAME2 {
  hardware ethernet B0:6E:BF:7E:2D:A1;
  fixed-address 192.168.10.51;
}

/etc/named.conf
options {
  listen-on port 53 {
      127.0.0.1;
      192.168.10.15;     #ip-адрес текущего сервера
  };
  directory       "/var/named";
  dump-file       "/var/named/data/cache_dump.db";
  statistics-file "/var/named/data/named_stats.txt";
  memstatistics-file "/var/named/data/named_mem_stats.txt";
  secroots-file   "/var/named/data/named.secroots";
  recursing-file  "/var/named/data/named.recursing";
  allow-query {
      localhost; 
      192.168.10.0/24;   #подсеть в которой будет работать dns сервер
  };
  recursion yes;
  dnssec-enable yes;
  dnssec-validation auto;
  managed-keys-directory "/var/named/dynamic";
  pid-file "/run/named/named.pid";
  session-keyfile "/run/named/session.key";
  include "/etc/crypto-policies/back-ends/bind.config";

  forwarders {
      192.168.10.10;     #dns-сервер на который идет перенаправление если неизвестен адрес
  };
}

key DHCP_UPDATER{
  algorithm HMAC-MD5.SIG-ALG.REG.INT;
  secret QihiST8OqK6ilv6CZMs78A==;
};

logging {
  channel default_debug {
    file "data/named.run";
    severity dynamic;
  };
};

zone "local" {
  type master;
  file "/var/named/forward.bind";
  allow-update {key DHCP_UPDATER;};
};

zone "10.168.192.in-addr.arpa"{
  type master;
  file "/var/named/revers.bind";
  allow-update {key DHCP_UPDATER;};
};

/var/named/forward.bind
$ORIGIN .
$TTL 604800     ; 1 week
local                   IN SOA  DNSDHCP.local. root.DNSDHCP.local. (    #DNSDHCP -имя текущего сервера
  10487      ; serial
  86400      ; refresh (1 day)
  3600       ; retry (1 hour)
  604800     ; expire (1 week)
  10800      ; minimum (3 hours)
)
NS      DNSDHCP.local.   #DNSDHCP -имя текущего сервера
A       192.168.10.15    #ip-адрес текущего сервера
$ORIGIN local.
$TTL 3600       ; 1 hour
HOSTNAME1             A       192.168.10.35   #соответствие имени компьютера его ip-адресу

/var/named/revers.bind
$ORIGIN .
$TTL 604800     ; 1 week
10.168.192.in-addr.arpa                IN SOA  DNSDHCP.local. root.DNSDHCP.local (
  7028       ; serial
  86400      ; refresh (1 day)
  3600       ; retry (1 hour)
  604800     ; expire (1 week)
  10800      ; minimum (3 hours)
)
NS      DNSDHCP.local.                  #DNSDHCP -имя текущего сервера
$ORIGIN 10.168.192.in-addr.arpa.        #10.168.192 -ip-адрес подсети в перевернутом виде
$TTL 604800     ; 1 week
15                      PTR     DNSDHCP.local.
$TTL 3600       ; 1 hour
35                      PTR     HOSTNAME1.local.