В условието имаме: - наличие на два хоста, на единия ще имаме DNS сървър на главните зони, на другия ще имаме DNS сървър с под зони, - DNS сървър с главни зони с публично IP: 109.160.80.230, - DNS сървър с под зони с публично IP: 185.163.245.186, - локално IP на двата сървъра: 192.168.11.5, защото са зад рутер на който е присвоено публичното IP, - на главния DNS сървър ще създадем зоната tlan.net, също ще делегираме под зоната my.tlan.net, - за да облекчим административното натоварване ще делегираме отговорността за администриране на под домейна на my.tlan.net За да работи правилно един DNS сървър трябва да се пренасочи порт 53 от рутера към хоста(сървъра), като протокола да е UDP. Следващото нещо е да се инсталира и самата услуга, като за начало обновяваме Debian.
apt update apt upgrade apt install bind9 bind9utils dnsutils -y
Проверяваме версията на Bind 9
named -v
BIND 9.18.24-1-Debian (Extended Support Version)
С инсталиране на пакета bind9utils получихме отдалечен named контролер с наименование rndc. Чрез този контролер може да се презарежда/стопира и контролира част от BIND услугата. rndc комуникира с BIND по TCP на порт 953. Да проверим статуса на rndc.
rndc status
version: BIND 9.16.48-Debian (Extended Support Version)
Стартираме услугата named
systemctl start named systemctl enable named
Проверяваме как работи услугата.
systemctl status named
Горните команди могат да се изпълнят и с:
service named start service named restart service named reload
Започваме с една уговорка. Ако ползвате само IPv4 то тогава:
nano /etc/default/named OPTIONS="-u bind -4"
Конфигурационните файлове на BIND се намират в /etc/bind. След като сме инсталирали услугата ще трябва да я конфигурираме. И ще започнем с конфигурационните файлове които дойдоха с инсталацията. Първия файл за редакция е: /etc/bind/named.conf.options. Той трябва да изглежда така:
nano /etc/bind/named.conf.options options { directory "/var/cache/bind"; allow-query { any; }; version "DNS TLan.NET"; };
allow-query { any; }; - разрешава заявки отвсякъде към DNS сървъра version "DNS TLan.NET"; - даваме име DNS TLan.NET на DNS сървъра recursion yes; - позволяваме рекурсивните заявки (име към IP), ако беше no, то тогава се изпълняват само интерактивни заявки (IP към име) И заговорихме за зоновия файл да го създадем.
nano /etc/bind/named.conf.local zone "tachko.com" { type master; file "/etc/bind/tachko.com.db"; }; zone "tlan.net" { type master; file "/etc/bind/tlan.net.db"; };
Стигнахме и до дефиниране на самите зонови файлове. Започваме със зоната на tachko.com.
nano /etc/bind/tachko.com.db $TTL 3600 @ IN SOA mail.tachko.com. root.tachko.com. ( 2016042401 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 86400 ) ; Minimum ; Define Name Server @ IN NS mail.tachko.com. @ IN NS 1234567890.sn.mynetname.net. ; Define Mail Exchanger @ IN MX 10 mail.tachko.com. @ IN MX 20 post.tachko.com. ; Define name server's IP address @ IN A 109.160.80.230 ; Define IP address of a hostname mail IN A 109.160.80.230 post IN A 185.163.245.186 ceno IN A 82.137.80.140 ; Aliases www IN CNAME mail mikrotik IN CNAME 1234567890.sn.mynetname.net. ; Делегираме под-домейн my.tachko.com към друг хост $ORIGIN my.tachko.com. @ IN NS ns1.my.tachko.com. ns1 IN A 185.163.245.186 ; Дефинираме обратни зони $ORIGIN 80.160.109.in-addr.arpa. @ IN NS mail.tachko.com. 168 IN PTR tachko.com.
Интересната част тук е делегирането на поддомейна към друг хост. За целта е необходимо да се дефенира именен сървър за поддомейна и на кой IP адрес ще е хоста за поддомейна. Описваме и зоната tlan.net. Забележете синтаксиса е по-различен но същността е еднаква.
nano /etc/bind/tlan.net.db $TTL 3600 tlan.net. IN SOA mail.tlan.net. root.tlan.net. ( 2016042401 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 86400 ) ; Minimum ; Define Name Server IN NS mail.tlan.net. IN NS 1234567890.sn.mynetname.net. ; Define Mail Exchanger IN MX 10 post.tlan.net. IN MX 20 home.tlan.net. ; Define name server's IP address IN A 109.160.80.230 ; Define IP address of a hostname mail IN A 109.160.80.230 post IN A 185.163.245.186 ceno IN A 82.137.80.140 ; Aliases www IN CNAME mail mikrotik IN CNAME 1234567890.sn.mynetname.net. ; Делегираме под-домейн my.tlan.net към друг хост my.tlan.net. IN NS ns1.my.tlan.net. ; primary DNS for sub-domain ns1.my.tlan.net. IN A 185.163.245.186 ; glue record ; Дефинираме обратни зони $ORIGIN 80.160.109.in-addr.arpa. IN NS mail.tlan.net. 168 IN PTR tlan.net.
Публичното IP на този сървър е: 185.163.245.186. Тук ще дефинираме под зоната my.tlan.net. За този сървър тя ще е главна зона, но беше определена от главния сървър с публично IP:109.160.80.230. Тук ще покажа съдържанието на конфигуриращите файлове. Няма да демонстрираме пак как се инсталира и т.н. Конфигурация отнасяща се за всички зони:
nano /etc/bind/named.conf.options options { allow-query { any; }; version "DNS Tlan.NET"; };
Файл отговарящ за дефиниране на зоните.
nano /etc/bind/named.conf.local zone "my.tachko.com" { type master; file "/etc/bind/my.tachko.com.db"; }; zone "my.tlan.net" { type master; file "/etc/bind/my.tlan.net.db"; }; // Локална зона, не се вижда в Интернет, за сега няма да се разглежда. zone "my.lan" { type master; file "/etc/bind/my.lan.db"; allow-update {none;}; };
Конфигуращ файл описващ зоната my.tachko.com.
nano /etc/bind/my.tachko.com.db $TTL 600 my.tachko.com. IN SOA ns1.my.tachko.com. root.my.tachko.com. ( 2024040101 ; Serial 3600 ; Refresh 900 ; Retry 360000 ; Expire 3600 ) ; Minimum Negative Cache TTL IN NS ns1.my.tachko.com. IN MX 10 ns1.my.tachko.com. IN A 185.163.245.186 ns1 IN A 185.163.245.186 mail IN A 185.163.245.186 www IN A 185.163.245.186
Конфигуращ файл описващ зоната my.tlan.net.
nano /etc/bind/my.tlan.net.db $TTL 600 my.tlan.net. IN SOA ns1.my.tlan.net. root.my.tlan.net. ( 2024040101 ; Serial 3600 ; Refresh 900 ; Retry 360000 ; Expire 3600 ) ; Minimum Negative Cache TTL IN NS ns1.my.tlan.net. IN MX 10 ns1.my.tlan.net. IN A 185.163.245.186 ns1 IN A 185.163.245.186 mail IN A 185.163.245.186 www IN A 185.163.245.186
С това завършваме. При така направени настройки ще имаме работеща зона my.tlan.net.
service named restart service named status
На практика си свършихме работата, но да проверим до колко е вярна. Рестартираме услугата DNS.
service named restart
Проверяваме конфигурационните файлове за синтетични грешки. Първо на DNS сървър с главни зони:
named-checkconf
Не връща никакъв резултат, значи всичко е наред. По същия начин проверяваме конфигурационните файлове на DNS сървъра с под зони. Синтаксиса е същия затова няма да го показвам. Проверяваме зоните tachko.com и tlan.net за грешки. Първо на DNS сървър с главни зони:
named-checkzone tachko.com /etc/bind/tachko.com.db zone tachko.com/IN: loaded serial 2024040201 OK
Зоната е наред и заредена. Проверяваме и зоната tlan.net:
named-checkzone tlan.net /etc/bind/tlan.net.db zone tlan.net/IN: loaded serial 2024040201 OK
Отново всичко е наред. Прехвърляме се на DNS сървъра с под зони. Тестваме my.tlan.net.
named-checkzone my.tlan.net /etc/bind/my.tlan.net.db zone my.tlan.net/IN: loaded serial 2024040101 OK
И тук зоната е описана правилно и няма грешки. Също е заредена правилно. Сега да проверим правилно ли работят зоните. За целта се връщаме на DNS сървъра с главни зони. И за да е правилен теста ще редактираме файла /etc/resolv.conf
nano /etc/resolv.conf nameserver 127.0.0.1
Изтрихме всички редове, и създадохме нов. Така машина ще резолва от себе си. С една дума ще ползваме DNS сървъра който създадохме и настроихме. За целта използваме nslookkup.
nslookup > tachko.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: tachko.com Address: 109.160.80.230 > tlan.net Server: 127.0.0.1 Address: 127.0.0.1#53 Name: tlan.net Address: 109.160.80.230
В случая по-подразбиране ползваме сървър 127.0.0.1. Да сменим сървъра и да ползваме запитване примерно до сървърите на Google.
nslookup > server 8.8.8.8 Default server: 8.8.8.8 Address: 8.8.8.8#53 > tachko.com Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: tachko.com Address: 109.160.80.230 > tlan.net Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: tlan.net Address: 109.160.80.230
Отново всичко работи точно. Да проверим и SOA записите.
nslookup > set q=soa > tachko.com Server: 127.0.0.1 Address: 127.0.0.1#53 tachko.com origin = mail.tachko.com mail addr = root.tachko.com serial = 2024040201 refresh = 10800 retry = 3600 expire = 604800 minimum = 86400 > tlan.net Server: 127.0.0.1 Address: 127.0.0.1#53 tlan.net origin = mail.tlan.net mail addr = root.tlan.net serial = 2024040201 refresh = 10800 retry = 3600 expire = 604800 minimum = 86400 > my.tachko.com Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: my.tachko.com origin = ns1.my.tachko.com mail addr = root.my.tachko.com serial = 2024040101 refresh = 3600 retry = 900 expire = 360000 minimum = 3600 my.tlan.net Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: my.tlan.net origin = ns1.my.tlan.net mail addr = root.my.tlan.net serial = 2024040101 refresh = 3600 retry = 900 expire = 360000 minimum = 3600 set q=nx set q=mx set q=a set q=cname set q=ptr set q=txt
Да проверим сървърите им за имена:
nslookup -type=ns tachko.com Server: 127.0.0.1 Address: 127.0.0.1#53 tachko.com nameserver = mail.tachko.com. tachko.com nameserver = post.tachko.com. tachko.com nameserver = a974098f269e.sn.mynetname.net. nslookup -type=ns tlan.net Server: 127.0.0.1 Address: 127.0.0.1#53 tlan.net nameserver = mail.tlan.net. tlan.net nameserver = post.tlan.net. tlan.net nameserver = a974098f269e.sn.mynetname.net.
Да проверим записите на пощенските сървъри
nslookup -q=mx tachko.com Server: 127.0.0.1 Address: 127.0.0.1#53 tachko.com mail exchanger = 20 post.tachko.com. tachko.com mail exchanger = 10 mail.tachko.com. nslookup -q=mx tlan.net Server: 127.0.0.1 Address: 127.0.0.1#53 tlan.net mail exchanger = 10 mail.tlan.net. tlan.net mail exchanger = 20 post.tlan.net.
По същия начин може да се проверят и А записите. Освен това може да се проверят и CNAME, PTR, NS, ANY, само се променя -q=a или -q=PTR и т.н. Забележете, NS може да се провери и по този начин. Резултата ще е същия. С това тестовете приключват. Следващата тема ще е за защита и ограничения при DNS сървърите.
До тук всичко е идеално работещо с изключение при големи натоварвания и хакерски атаки. За тези цели се ползват определени ограничения. Ограниченията биват общи (отнасящи се за всички) и такива отнасящи се за определена зона. По-надолу няма да показвам разни примери, а ще има обяснение за всяка команда за какво се ползва.
Към общите ограничения: recursion no; - Сървърът ще предоставя интеративно поведение на заявките към клиента - IP адрес към име. По-подразбиране е в състояние yes (сървърът предоставя поведение на рекурсивна заявка от клиента - име към IP адрес), allow-recursion { none; }; - Изключваме рекурсивните заявки, защото намаляват скоростта на работа. Вместо none може да се посочи списък от IP адреси или определен адрес. Рекурсивните запитвания към DNS сървъра са с пълното име на домейна и чака да му върната прилежащото IP. При това сървъра може да запита други DNS сървъри. Обратното запитване е изпращане на IP и чака връщане на име. Произволен DNS сървър е длъжен да отговори интерактивно, version "DNS Tachko. COM"; - Наименование на сървъра, allow-query { any; }; — Сървъра приема заяки от всички. По-подразбиране са разрешени само локални обръщения към DNS-a. Понякога обаче може вместо any да се опише определен IP адрес или няколко IP адреса, allow-transfer { none; } - По подразбиране зоните не могат да се прехвърлят на никого. Това е най-вече полезно за зони, за които този сървър е подчинен сървър за имена. Ако сървъра е master, то тогава се описва IP или масив от IP адреси отговарящи на secondaty-сървъра, allow-update {none;} — Забранява обновяването на всички зони. После в определената зона или ще разрешим обновяването и или ще забраним. Също ако разрешим обновяването ще укажем към кое IP да се обнови,- listen-on port 53 { IP; IP; }; - адреси на които DNS-a ще приема заявки за IPv4 на порт 53 (може да е различен); listen-on-v6 port 53 { none; }; - адреси на които DNS-a ще приема заявки за IPv6 на порт 53 (може да е различен), в случая е забранено ползването на IPv6; notify no; - По подразбиране промените в зоните няма се уведомяват към подчинените сървъри. Това е най-вече полезно за зони, за които този сървър е главен сървър за имена. Може да се сложи notify yes; при самата зона, forward first; - указваме DNS сървъра да се насочва към DNS-ите указани в forwarders {8.8.8.8; 1.1.1.1;}; forwarders {8.8.8.8; 1.1.1.1;}; - казваме заявките към DNS-a първо да се обръщат към DNS-и с IP адреси 8.8.8.8 и 1.1.1.1
Ограничения в самите зони се прилагат при условие, че искам да получим даден резултат само за определена зона, а за другите да не се отнаса. По-надолу ще покажа някои неща необходими за тази цел: allow-transfer { 212.220.110.32;; } - Разрешава предаване на зоната на подчинените DNS сървъри, в случая с IP: 212.220.110.32, allow-update {212.220.110.32;} — разрешава обновяване на зоната към IP: 212.220.110.32, notify yes; - По подразбиране промените в зоната ще бъдат уведомени към подчинените сървъри. Това е най-вече полезно за зони, за които този сървър е главен сървър за имена.жЗа зони, за които този сървър е подчинен сървър за имена, трябва да отменим тази директива, като поставим "notify no;" в раздела "зона",
Сега ще поговорим за една безплатна услуга предоставена от https://dns.he.net/ Ако искате сигурен DNS сървър който да работеи 24/7 то това е решението. Правите си безплатна регистрация и си дефинирате домейна.