Установка и настройка DNS + DHCP с динамическим обновлением зон в Ubuntu 16.04

Apr 6, 2017 13:56 · 719 words · 4 minute read dns dhcp

Даже в небольших организациях для упрощения администрирования локальной сети необходимы один или несколько 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 закончена.

tweet Share