<
  • Главная
Статьи

Налаштування первинного DNS-сервера на базі NSD

  1. 18 Вересень 2016
18 Вересень 2016
Setting master DNS server using NSD

Як відомо, основною функцією DNS-сервера є перетворення текстових імен вузлів в мережі Інтернет ( доменів ) В числові IP-адреси, з допомогою яких і здійснюється маршрутизація даних. Крім цього на базі тієї ж технології Domian Name System в даний час реалізуються багато технологій, пов'язані із забезпеченням безпеки, аутентифікації і політики доступу, а також автоматизації налаштувань клієнтського програмного забезпечення.

У переважній більшості випадків DNS-сервери, які підтримують інформацію про той чи інший доменному імені, розміщуються у реєстраторів доменів, провайдерів хостингу або послуг досуп в Інтернет. Такий підхід, з одного боку, знімає питання простого налаштування, підтримки і забезпечення надійності з власника доменного імені, а, з іншого, має ряд обмежень пов'язаних з тонким налаштуванням, оперативної актуалізацією містяться в DNS-записах відомостей і необхідної в ряді випадків автоматизацією цих процесів . Крім того, далеко не всі надають послуги DNS-хостингу організації підтримують сучасні типи ресурсних записів .

Для вирішення цих проблем розумним рішенням представляється організація свого власного первинного DNS на базі програмного рішення, яке буде підтримувати сучасні технології. До числа подібних, безумовно, відноситься і DNS-сервер NSD .

Розглянемо приклад налаштування DNS-зони для домену kostikov.co, який використовує цей сайт .

Всі настройки будуть проводитися на базі FreeBSD .

root @ beta: ~ # uname -v FreeBSD 11.0-RC2 # 0 r304729: Wed Aug 24 6:59:03 UTC 2016 [email protected]: / usr / obj / usr / src / sys / GENERIC

Для початку необхідно встановити сам пакет NSD. З огляду на те, що опції за замовчуванням підібрані розумно, можна встановити його з пакетів. Але я скористаюся традиційної складанням з виходячи текстів через систему портів Freebsd , Додавши функціонал збірки статистики і відключивши відсутня в даній системі IPv6.

root @ beta: ~ # cd / usr / ports / dns / nsd / root @ beta: / usr / ports / dns / nsd # make config ... root @ beta: / usr / ports / dns / nsd # make showconfig = ==> The following configuration options are available for nsd-4.1.12: BIND8_STATS = off: BIND8-like NSTATS & XSTATS CHECKING = off: Internal run-time checks DOCS = on: Build and / or install documentation IPV6 = off: IPv6 protocol support LARGEFILE = on: Largefile support MINRESPSIZE = on: Minimial response sizing MMAP = off: Use mmap instead of malloc (experimental) MUNIN_PLUGIN = off: Install Munin plugin (requires BIND8_STATS) NSEC3 = on: NSEC3 support ROOT_SERVER = off: Configure as a root server RRL = on: Response Rate Limiting ZONE_STATS = on: Separate statistics for each zone ===> Use 'make config' to modify these settings root @ beta: / usr / ports / dns / nsd # make install clean == => License BSD3CLAUSE accepted by the user ===> Found saved configuration for nsd-4.1.12 ===> nsd-4.1.12 depends on file: / usr / local / sbin / pkg - found ===> Fetching all distfiles required by nsd-4.1.12 for building ===> Extracting for nsd-4.1.12 => SHA256 Checksum OK for nsd-4.1.12.tar.gz. ...

Не відкладаючи справу на потім, треба прописати запуск демона NSD в файл початкової ініціалізації системи rc.conf.

root @ beta: / usr / ports / dns / nsd # cat /etc/rc.conf | grep nsd nsd_enable = "YES"

Тепер створимо структуру робочих каталогів для нашого DNS-сервера в спеціально створеному в процесі установки каталозі / usr / local / etc / nsd /. Це робиться для забезпечення додаткової безпеки нашої системи через запуск NSD в chroot .

root @ beta: / usr / ports / dns / nsd # cd / usr / local / etc / nsd / root @ beta: / usr / local / etc / nsd # ll total 2 -rw-r - r-- 1 root wheel 1874 17 сент. 17:41 nsd.conf -rw-r - r-- 1 root wheel 10299 17 сент. 17:41 nsd.conf.sample root @ beta: / usr / local / etc / nsd # mkdir -p var / db / nsd root @ beta: / usr / local / etc / nsd # mkdir -p var / run / nsd root @ beta: / usr / local / etc / nsd # mkdir var / log root @ beta: / usr / local / etc / nsd # mkdir tmp

З огляду на те, що демон NSD буде працювати від імені nsd, слід дати йому права на щойно створені каталоги.

root @ beta: / usr / local / etc / nsd # chown nsd: nsd / usr / local / etc / nsd root @ beta: / usr / local / etc / nsd # chown -R nsd: nsd var / root @ beta: / usr / local / etc / nsd # chown -R nsd: nsd tmp /

Тепер слід створити базову настройку для щойно встановленого DNS-сервера. Це робиться на базі встановленого в робочий каталог зразка конфігураційного файлу nsd.conf. Однак, для початку, слід згенерувати ключі для віддаленого управління сервером за допомогою утиліти nsd-control-setup, яка включена до складу пакета NSD.

root @ beta: / usr / local / etc / nsd # nsd-control-setup setup in directory / usr / local / etc / nsd generating nsd_server.key Generating RSA private key, 1536 bit long modulus .... ++++ . ++++ e is 65537 (0x10001) generating nsd_control.key Generating RSA private key, 1536 bit long modulus ................. ++++ ..... .................................................. ....... ++++ e is 65537 (0x10001) create nsd_server.pem (self signed certificate) create nsd_control.pem (signed client certificate) Signature ok subject = / CN = nsd-control Getting CA Private Key Setup success. Certificates created. Enable in nsd.conf file to use

Для даного сайту файл конфігурації буде мати наступний вигляд.

root @ beta: / usr / local / etc / nsd # cat nsd.conf # # nsd.conf - the NSD (8) configuration file, nsd.conf (5). # # Copyright (c) 2001-2011, NLnet Labs. All rights reserved. # # See LICENSE for the license. # # - by Max Kostikov 2016-09-17 server: ip-address: 10.10.10.10 debug-mode: no do-ip6: no verbosity: 3 chroot: "/ usr / local / etc / nsd" zonesdir: "/ usr / local / etc / nsd / zones "zonelistfile:" /usr/local/etc/nsd/var/db/nsd/zone.list "database:" / usr / local / etc / nsd / var / db / nsd / nsd.db "logfile:" /usr/local/etc/nsd/var/log/nsd.log "pidfile:" /usr/local/etc/nsd/var/run/nsd/nsd.pid "xfrdfile:" / usr / local / etc / nsd / var / db / nsd / xfrd.state "xfrdir:" / usr / local / etc / nsd / tmp "remote-control: control-enable: yes server-key-file:" / usr /local/etc/nsd/nsd_server.key "server-cert-file:" /usr/local/etc/nsd/nsd_server.pem "control-key-file:" /usr/local/etc/nsd/nsd_control.key "control-cert-file:" /usr/local/etc/nsd/nsd_control.pem "# - for secondary @ dns.he.net pattern: name:" xfr-he "zonefile:"% s /% s. zone "notify: 216.218.130.2 NOKEY provide-xfr: 216.218.133.2 NOKEY zone: name:" kostikov.co "include-pattern:" xfr-he "

У приниципе, коментувати призначення параметрів потреби немає, оскільки це цілком зрозуміло з їх назв. Опишу лише використовувані секції:

  • server відповідає за базові настройки сервера;
  • remote-control дозволяє віддалене управління по ключам за допомогою спеціальної утиліти nsd-control;
  • використання pattern дозволяє використовувати типові настройки для будь-якої кількості доменних імен;
  • і, нарешті, zone описує мій домен з використанням раніше прописаного шаблону xfr-he.

Зверніть увагу, що наш первинний DNS-сервер буде обслуговувати домен kostikov.co, а вторинні DNS-сервери будуть підтримуватися на базі популярного сервісу публічних DNS від американського провайдера Hurricane Electric . Для вирішення синхронізації зон на вторинні сервери в шаблоні xfr-he прописані IP-адреси серверів - окремий для запиту AXFR зони в параметрі xfr-he (IP відповідає імені сервера slave.dns.he.net), і окремий для нотифікації про оновлення зони в параметрі notify (відповідає сервера ns1.he.net). Параметр NOKEY указаивает на відсутність додаткової аутентифікації для сіхнронізаціі зон, оскільки публічний DNS від Hurricane Electric в даний час не підтримує механізм TSIG .

Також слід врахувати ще один тонкий момент, який стосується типових інсталяцій FreeBSD. Починаючи з версії 10.0 до її складу включений рекурсивний кешуючий DNS-сервер Unbound , Який написаний тим же автором, що і NSD - компанією NLnet labs . У зв'язку з цим, якщо передбачається використання обох цих серверів в рамках однієї серверної інталляціі, то слід подбати про поділ інтефрейсов, на яких вони будуть слухати і відповідати на DNS-запити. У моєму випадку Undound працює на інтерфейсі локального хоста з IP 127.0.0.1, а NSD - на зовнішньому, адреса якого прописаний в параметрі конфігурації ip-address.

Тепер залишається лише прописати файл зони для домену kostikov.co. Формат його файлу, який, як випливає з простого налаштування, буде розташовано безпосередньо в робочому каталозі зон NSD zones в окремому підкаталозі іменованих так само як і домен kostikov.co під ім'ям kostikov.co.zone.

root @ beta: / usr / local / etc / nsd # cat zones / kostikov.co / kostikov.co.zone $ ORIGIN kostikov.co. $ TTL 86400 @ IN SOA my.server. hostmaster.my.server. (2016091705; serial 10800; refresh 1800; retry 604800; expire 86400); minimum; NS IN NS my.server. IN NS ns1.he.net. IN NS ns2.he.net. IN NS ns3.he.net. IN NS ns4.he.net. IN NS ns5.he.net. ; MX IN MX 10 my.server. IN SPF "v = spf1 + mx -all" IN TXT "v = spf1 + mx -all" dkim._domainkey.kostikov.co. IN TXT "k = rsa; p = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJjSZ1Fd0ZbE8V0t6V + / 7GZ + DNaj5qJT0fQcXVxWeo3uKJ85kpZ0AbLExu50tbZuz1AiPwhv9inqXltHWi5aqsSfiFODQH8McjWttFx0iM8cyBHw + DJ5CXAONUXFfSFPNOF7 + J5BKpcx4hyu0j8z2HQIzQCHR9Q7Rky / C + uFxIxwIDAQAB" _adsp._domainkey.kostikov.co. IN TXT "dkim = all" _dmarc.kostikov.co. IN TXT "v = DMARC1; p = quarantine; pct = 100; rua = mailto: [email protected]"; WWW @ IN A 10.10.10.10 www IN CNAME kostikov.co.

Формат його близький до стандартного формату BIND . Для зручності читання блоки DNS-записів розділені на относящіемя до опису DNS (; NS), поштою (; MX) і веб-сервісів (; WWW). Зверніть також увагу на перше число в записі SOA (; serial). При кожному ізмненія налаштувань DNS-зони для домену його слід змінювати в бік збільшення. Це служить індикатором його поновлення і викликає початок процесу його передачі на вторинні сервери.

Тепер залишилося запустити сам демон нашого DNS-сервера і переконатися в його працездатності.

root @ beta: / usr / local / etc / nsd # service nsd start Starting nsd. root @ beta: / usr / local / etc / nsd # netstat -anfinet | grep '.53' tcp4 0 0 10.10.10.10.53 *. * LISTEN tcp4 0 0 127.0.0.1.53 *. * LISTEN udp4 0 0 10.10.10.10.53 *. * udp4 0 0 127.0.0.1.53 *. *

У висновку мережевий статистики видно, що в даній системі є два працюють DNS-сервера - перший, авторитативні NSD, слухає на зовнішньому інтерфейсі з IP-адресою 10.10.10.10, а другий - кешуючий Unbound працює виключно на localhost.

Тепер слід додати вторинний сервер на сервісі від Hurricane Electric і переконатися, що сталася успішна синхронізація зон і вторинні сервери коректно відповідають на запит нашого домену.

root @ beta: / usr / local / etc / nsd # cat var / log / nsd.log [2016-09-17 17: 02: 31.807] nsd [73485]: notice: nsd starting (NSD 4.1.12) [2016 -09-17 17: 02: 31.816] nsd [73485]: info: setup SSL certificates [2016-09-17 17: 02: 31.897] nsd [73487]: info: zone kostikov.co read with success [2016-09 -17 17: 02: 31.900] nsd [73487]: info: zone kostikov.co written to db [2016-09-17 17: 06: 04.557] nsd [73529]: info: axfr for kostikov.co. from 216.218.133.2 ... root @ beta: / usr / local / etc / nsd # root @ beta: / usr / local / etc / nsd # host -a kostikov.co ns1.he.net Trying "kostikov.co" Using domain server: Name: ns1.he.net Address: 216.218.130.2 # 53 Aliases: ;; - >> HEADER << - opcode: QUERY, status: NOERROR, id: 28926 ;; flags: qr aa rd; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 9 ;; QUESTION SECTION:; kostikov.co. IN TYPE255 ;; ANSWER SECTION: kostikov.co. 86400 IN NS ns5.he.net. kostikov.co. 86400 IN NS my.server. kostikov.co. 86400 IN SPF "v = spf1 + mx -all" kostikov.co. 86400 IN NS ns3.he.net. kostikov.co. 86400 IN SOA my.server. hostmaster.my.server. 2016091705 10800 1800 604800 86400 kostikov.co. 86400 IN TXT "v = spf1 + mx -all" kostikov.co. 86400 IN NS ns1.he.net. kostikov.co. 86400 IN MX 10 my.server. kostikov.co. 86400 IN NS ns4.he.net. kostikov.co. 86400 IN A 10.10.10.10 kostikov.co. 86400 IN NS ns2.he.net. ;; ADDITIONAL SECTION: ns3.he.net. 86400 IN A 216.218.132.2 ns2.he.net. 86400 IN A 216.218.131.2 my.server. 86400 IN A 10.10.10.10 ns5.he.net. 86400 IN A 216.66.80.18 ns1.he.net. 86400 IN A 216.218.130.2 ns4.he.net. 86400 IN A 216.66.1.2 ns3.he.net. 86400 IN AAAA 2001: 470: 300 :: 2 ns2.he.net. 86400 IN AAAA 2001: 470: 200 :: 2 ns5.he.net. 86400 IN AAAA 2001: 470: 500 :: 2 Received 466 bytes from 216.218.130.2 # 53 in 69 ms

Як видно, все пройшло вдало. NSD запущений без помилок, зона синхронізувалася з вторинними серверами і вони коректно відповідають на запити.

І, нарешті, слід повідомити реєстратору нашого домену про зміну DNS-серверів, які його підтримують - вони вказані в типі DNS-записи NS в описі зони.

Стаття була корисною? Тоді прошу не соромитися і грошима або біткоіни .

Стаття була корисною?


Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью