Перейти до змісту

NSD Authoritative DNS

Альтернативою BIND, NSD (Name Server Daemon) є сучасний авторитетний сервер DNS, який підтримується NLnet Labs.

Передумови та припущення

  • Сервер під керуванням Rocky Linux
  • Можливість використання firewalld для створення правил брандмауера
  • Доменне ім’я або внутрішній рекурсивний DNS-сервер вказує на ваш авторитетний DNS-сервер

Вступ

Зовнішні або загальнодоступні DNS-сервери відображають імена хостів на IP-адреси, а у випадку записів PTR (відомих як «вказівник» або «зворотний»), відображають IP-адреси в імені хоста. Це важлива частина Інтернету. Завдяки цьому ваш поштовий сервер, веб-сервер, FTP-сервер або багато інших серверів і служб працюють належним чином, незалежно від того, де ви знаходитесь.

Встановлення та включення NSD

Спочатку встановіть EPEL:

dnf install epel-release

Далі встановіть NSD:

dnf install nsd

Налаштування NSD

Перш ніж вносити зміни до будь-якого конфігураційного файлу, скопіюйте оригінальний встановлений робочий файл nsd.conf:

cp /etc/nsd/nsd.conf /etc/nsd/nsd.conf.orig

Це допоможе в майбутньому, якщо станеться введення помилок у файл конфігурації. Завжди варто зробити резервну копію перед внесенням змін.

Відредагуйте файл nsd.conf. Автор використовує vi, але ви можете замінити свій улюблений редактор командного рядка:

vi /etc/nsd/nsd.conf

Перейдіть униз і вставте наступне:

zone:
    name: example.com
    zonefile: /etc/nsd/example.com.zone

Замініть example.com ім'ям домену, для якого ви запускаєте сервер імен.

Далі створіть файли зони:

vi /etc/nsd/example.com.zone

Файли зони DNS сумісні з BIND. У файл вставте:

$TTL    86400 ; How long should records last?
; $TTL used for all RRs without explicit TTL value
$ORIGIN example.com. ; Define our domain name
@  1D  IN  SOA ns1.example.com. hostmaster.example.com. (
                              2024061301 ; serial
                              3h ; refresh duration
                              15 ; retry duration
                              1w ; expiry duration
                              3h ; nxdomain error ttl
                             )
       IN  NS     ns1.example.com. ; in the domain
       IN  MX  10 mail.another.com. ; external mail provider
       IN  A      172.20.0.100 ; default A record
; server host definitions
ns1    IN  A      172.20.0.100 ; name server definition
www    IN  A      172.20.0.101 ; web server definition
mail   IN  A      172.20.0.102 ; mail server definition

Якщо вам потрібна допомога з налаштуванням файлів зон у стилі BIND, Oracle має хороший вступ до файлів зон.

Збережіть зміни.

Включення NSD

Далі дозвольте порти DNS у firewalld і ввімкніть NSD:

firewall-cmd --add-service=dns --zone=public
firewall-cmd --runtime-to-permanent
systemctl enable --now nsd

Перевірте дозвіл DNS за допомогою команди host:

% host example.com 172.20.0.100
Using domain server:
Name: 172.20.0.100
Address: 172.20.0.100#53
Aliases:

example.com has address 172.20.0.100
example.com mail is handled by 10 mail.another.com.
%

Вторинний сервер DNS

Запуск одного або кількох вторинних авторитетних DNS-серверів зазвичай є нормою, якщо основний сервер вийде з ладу. Це особливо корисно, коли основний сервер не працює. NSD має функцію, що дозволяє синхронізувати DNS-записи з основного сервера на один або декілька резервних серверів.

Щоб увімкнути резервний сервер, згенеруйте ключі підпису в основній зоні:

nsd-control-setup

Вам потрібно буде скопіювати наступні файли на сервер резервного копіювання в каталог /etc/nsd/:

  • nsd_control.key
  • nsd_control.pem
  • nsd_server.key
  • nsd_server.pem

На всіх DNS-серверах додайте наступне перед директивою zone::

remote-control:
        control-enable: yes
        control-interface: 0.0.0.0
        control-port: 8952
        server-key-file: "/etc/nsd/nsd_server.key"
        server-cert-file: "/etc/nsd/nsd_server.pem"
        control-key-file: "/etc/nsd/nsd_control.key"
        control-cert-file: "/etc/nsd/nsd_control.pem"

Також увімкніть записи брандмауера:

firewall-cmd --zone=public --add-port=8952/tcp
firewall-cmd --runtime-to-permanent

На основному сервері змініть зону так, щоб вона відповідала наступному:

zone:
    name: example.com
    zonefile: /etc/nsd/example.com.zone
    allow-notify: NS2_IP NOKEY
    provide-xfr: NS2_IP NOKEY
    outgoing-interface: NS1_IP

Замініть NS1_IP1 і NS2_IP2 загальнодоступними IP-адресами основного та додаткового серверів імен.

На вторинному сервері додайте зону:

zone:
    name: fourplex.net
    notify: NS1_IP NOKEY
    request-xfr: NS1_IP NOKEY
    outgoing-interface: NS2_IP

Замініть NS1_IP1 і NS2_IP2 загальнодоступними IP-адресами основного та додаткового серверів імен.

Перезапустіть NSD на обох серверах імен:

NS1# systemctl restart --now nsd

Щоб завантажити файл зони на вторинний сервер імен з основного:

nsd-control notify -s NS2_IP

Замініть NS2_IP2 загальнодоступними IP-адресами вторинного сервера імен.

Висновок

Більшість людей використовують сторонні служби для DNS. Однак є сценарії, коли бажано самостійно розміщувати DNS. Наприклад, телекомунікаційні, хостингові та соціальні медіа компанії розміщують багато записів DNS, де розміщені послуги є небажаними.

NSD є одним із багатьох інструментів з відкритим кодом, які роблять можливим розміщення DNS.

Author: Neel Chauhan

Contributors: Steven Spencer, Ganna Zhyrnova