Установка и настройка DNS + DHCP с динамическим обновлением зон в Ubuntu 16.04
Apr 6, 2017 13:56 · 719 words · 4 minute read
Даже в небольших организациях для упрощения администрирования локальной сети необходимы один или несколько DNS (Domain Name System — система доменных имён) и DHCP (Dynamic Host Configuration Protocol — протокол динамической настройки узла) серверов.
Давайте рассмотрим процесс установки DNS и DHCP серверов, а также разберемся с настройкой динамического обновления DNS-зон в операционной системе Ubuntu 16.04!
Установка DNS-сервера выполняется командой:
sudo apt install bind9
DHCP-сервер устанавливаем следующим образом:
sudo apt install isc-dhcp-server
Редактируем конфигурационный файл /etc/bind/named.conf.options
и приводим его к следующему виду:
options {
directory "/var/cache/bind";
listen-on {
192.168.0.0/22;
127.0.0.1;
};
forwarders {
8.8.8.8;
8.8.4.4;
};
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
Здесь важными являются директивы forwarders
(вышестоящие DNS-сервера, на которые будет переадресован запрос при отсутствии информации о хосте на локальном сервере) и listen-on
(с каких сетей или IP адресов локальный DNS-сервер будет обслуживать запросы).
Далее создадим файлы зон (прямого и обратного просмотра) и добавить их в конфигурацию DNS-сервера. По умолчанию предлагается создавать файлы зон в каталоге /etc/bind/zones/
, но в будущем это вызовет проблемы с их динамическим обновлением, поэтому мы будем создавать файлы зон в папке /var/lib/bind/
.
Исходные данные для создания зон:
- имя домена —
lc
; - имя DNS-сервера —
ns.lc
; - ip-адрес DNS-сервера —
192.168.0.218
.
Создаем файл зоны прямого просмотра:
touch /var/lib/bind/db.lc
Содержимое файла следующее:
$TTL 604800 ; 1 week
@ IN SOA ns.lc. root.ns.lc. (
201703271 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
2419200 ; expire (4 weeks)
604800 ; minimum (1 week)
)
@ IN NS ns.lc.
@ IN A 192.168.0.218
ns IN A 192.168.0.218
labs IN A 192.168.0.218
*.labs IN A 192.168.0.218
jira.labs IN A 192.168.0.3
confluence.labs IN A 192.168.0.3
gitlab IN A 192.168.0.3
router IN A 192.168.0.1
zabbix IN A 192.168.0.3
grafana IN A 192.168.0.3
e-lebed IN A 192.168.0.80
Создаем файл зоны обратного просмотра:
touch /var/lib/bind/db.192.168.0
Содержимое файла выглядит следующим образом:
$TTL 604800 ; 1 week
@ IN SOA ns.lc. root.ns.lc. (
201703271 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
2419200 ; expire (4 weeks)
604800 ; minimum (1 week)
)
@ IN NS ns.lc.
218 IN PTR lc.
218 IN PTR labs.lc.
218 IN PTR git.labs.lc.
218 IN PTR develop.labs.lc.
218 IN PTR gocd.labs.lc.
80 IN PTR e-lebed.lc.
3 IN PTR jira.labs.lc.
3 IN PTR confluence.labs.lc.
3 IN PTR gitlab.lc
3 IN PTR zabbix.lc.
3 IN PTR grafana.lc.
1 IN PTR router.lc.
Добавляем ссылки на только что созданные зоны в конфигурационный файл /etc/bind/named.conf.local
:
...
zone "lc" {
type master;
file "/var/lib/bind/db.lc";
allow-update { key rndc-key; };
};
zone "0.168.192.in-addr.arpa" {
type master;
file "/var/lib/bind/db.192.168.0";
allow-update { key rndc-key; };
};
...
Здесь именно благодаря строке allow-update { key rndc-key; };
будет возможно динамическое обновление зон.
Можно просмотреть содержимое файла rndc-key
:
cat rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "/NjKY+BwOtgxBbpsmAp0Cg==";
};
Теперь проверим правильность синтаксиса конфигурационных файлов DNS-сервера:
named-checkconf
Если все выполнено правильно, то вывод этой команды должен быть пуст.
Перезапускаем DNS-сервер командой:
/etc/init.d/bind9 restart
Далее приступаем к настройке DHCP-сервера, приводим конфигурационный файл /etc/dhcp/dhcpd.conf
к следующему виду:
ddns-updates on;
ddns-update-style interim;
update-static-leases on;
key rndc-key {
algorithm hmac-md5;
secret "/NjKY+BwOtgxBbpsmAp0Cg==";
}
zone lc. {
primary 192.168.0.218;
key rndc-key;
}
zone 0.168.192.in-addr.arpa. {
primary 192.168.0.218;
key rndc-key;
}
authoritative;
log-facility local7;
subnet 192.168.0.0 netmask 255.255.252.0 {
range 192.168.0.100 192.168.0.199;
option domain-name-servers 192.168.0.218;
option domain-name "lc";
option routers 192.168.0.1;
option broadcast-address 192.168.3.255;
default-lease-time 604800;
max-lease-time 604800;
}
host e-lebed {
hardware ethernet 90:2b:34:ac:3a:d2;
fixed-address 192.168.0.80;
}
Для применения изменений перезапускаем службу DHCP:
/etc/init.d/isc-dhcp-server restart
или
service isc-dhcp-server restart
Теперь, при появлении нового компьютера в локальной сети, DHCP-сервер выдаст ему свободный ip-адрес из определенного диапазона и обновит DNS-зоны (при этом в каталоге с зонами также будут созданы два файла с расширением .jnl
).
Если бы мы создавали файлы зон в каталоге по умолчанию (/etc/bind/zones/
), то столкнулись бы со следующими ошибками в логах:
...
Mar 28 05:45:07 labs named[16662]: client 192.168.0.218#37999/key rndc-key: signer "rndc-key" approved
Mar 28 05:45:07 labs named[16662]: client 192.168.0.218#37999/key rndc-key: updating zone 'lc/IN': adding an RR at 'Olesya.lc' A 192.168.0.142
Mar 28 05:45:07 labs named[16662]: client 192.168.0.218#37999/key rndc-key: updating zone 'lc/IN': adding an RR at 'Olesya.lc' TXT "31863aeb2d49662304b5e70f4d291ca2c4"
Mar 28 05:45:07 labs named[16662]: /etc/bind/zones/db.lc.jnl: create: permission denied
Mar 28 05:45:07 labs named[16662]: client 192.168.0.218#37999/key rndc-key: updating zone 'lc/IN': error: journal open failed: unexpected error
...
На этом все, установка и настройка DNS и DHCP серверов с динамическим обновлением зон в Ubuntu 16.04 закончена.