Започвам с едно леко отклонение. Има един много по-лесен начин. Графично нареден, прегледен. Най-вече безплатен. Можете да се регистрирате на: https://dns.he.net и да управлявате до 50 домейна. И да се върнем на идеята. Тук ще се помъчим да усвоим принципа на DNS услугата с използване на BIND 9 В условието имаме: - наличие на два хоста, на единия ще имаме 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.
sudo apt update sudo apt upgrade sudo apt install bind9 bind9utils dnsutils -y
Проверяваме версията на Bind 9
sudo named -v
BIND 9.18.24-1-Debian (Extended Support Version)
С инсталиране на пакета bind9utils получихме отдалечен named контролер с наименование rndc. Чрез този контролер може да се презарежда/стопира и контролира част от BIND услугата. rndc комуникира с BIND по TCP на порт 953. Да проверим статуса на rndc.
sudo rndc status
version: BIND 9.16.48-Debian (Extended Support Version)
Стартираме услугата named
sudo systemctl start named sudo systemctl enable named
Проверяваме как работи услугата.
sudo systemctl status named
Горните команди могат да се изпълнят и с:
sudo service named start sudo service named restart sudo service named reload
Започваме с една уговорка. Ако ползвате само IPv4 то тогава:
sudo nano /etc/default/named OPTIONS="-u bind -4"
Конфигурационните файлове на BIND се намират в /etc/bind. След като сме инсталирали услугата ще трябва да я конфигурираме. И ще започнем с конфигурационните файлове които дойдоха с инсталацията. Първия файл за редакция е: /etc/bind/named.conf.options. Той трябва да изглежда така:
sudo 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 към име) И заговорихме за зоновия файл да го създадем.
sudo 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.
sudo 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
Интересната част тук е делегирането на поддомейна към друг хост. За целта е необходимо да се дефенира именен сървър за поддомейна и на кой IP адрес ще е хоста за поддомейна. Описваме и зоната tlan.net. Забележете синтаксиса е по-различен но същността е еднаква.
sudo nano /etc/bind/tlan.net.db $TTL 3600 @ 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 mail.tlan.net. IN MX 20 post.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 към друг хост $ORIGIN my.tlan.net. @ IN NS ns1.my.tlan.net. ns1 IN A 185.163.245.186
Публичното IP на този сървър е: 185.163.245.186. Тук ще дефинираме под зоната my.tlan.net. За този сървър тя ще е главна зона, но беше определена от главния сървър с публично IP:109.160.80.230. Тук ще покажа съдържанието на конфигуриращите файлове. Няма да демонстрираме пак как се инсталира и т.н. Конфигурация отнасяща се за всички зони:
sudo nano /etc/bind/named.conf.options options { allow-query { any; }; version "DNS Tlan.NET"; };
Файл отговарящ за дефиниране на зоните.
sudo 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.
sudo nano /etc/bind/my.tachko.com.db $TTL 600 @ 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.
sudo nano /etc/bind/my.tlan.net.db $TTL 600 @ 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.
sudo service named restart sudo service named status
На практика си свършихме работата, но да проверим до колко е вярна. Рестартираме услугата DNS.
sudo service named restart
Проверяваме конфигурационните файлове за синтетични грешки. Първо на DNS сървър с главни зони:
sudo named-checkconf
Не връща никакъв резултат, значи всичко е наред. По същия начин проверяваме конфигурационните файлове на DNS сървъра с под зони. Синтаксиса е същия затова няма да го показвам. Проверяваме зоните tachko.com и tlan.net за грешки. Първо на DNS сървър с главни зони:
sudo named-checkzone tachko.com /etc/bind/tachko.com.db zone tachko.com/IN: loaded serial 2024040201 OK
Зоната е наред и заредена. Проверяваме и зоната tlan.net:
sudo named-checkzone tlan.net /etc/bind/tlan.net.db zone tlan.net/IN: loaded serial 2024040201 OK
Отново всичко е наред. Прехвърляме се на DNS сървъра с под зони. Тестваме my.tlan.net.
sudo named-checkzone my.tlan.net /etc/bind/my.tlan.net.db zone my.tlan.net/IN: loaded serial 2024040101 OK
И тук зоната е описана правилно и няма грешки. Също е заредена правилно. Сега да проверим правилно ли работят зоните. За целта се връщаме на DNS сървъра с главни зони. И за да е правилен теста ще редактираме файла /etc/resolv.conf
sudo nano /etc/resolv.conf nameserver 127.0.0.1
Изтрихме всички редове, и създадохме нов. Така машина ще резолва от себе си. С една дума ще ползваме DNS сървъра който създадохме и настроихме. За целта използваме nslookkup.
sudo nslookup > server 8.8.8.8 Default server: 8.8.8.8 Address: 8.8.8.8#53 > my.tlan.net Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: my.tlan.net Address: 185.163.245.186 > set q=soq > my.tlan.net Server: 8.8.8.8 Address: 8.8.8.8#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 Authoritative answers can be found from: > set q=ns > my.tlan.net Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: my.tlan.net nameserver = ns1.my.tlan.net. Authoritative answers can be found from: > set q=mx >my.tlan.net Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: my.tlan.net mail exchanger = 10 ns1.my.tlan.net. Authoritative answers can be found from: > set q=a > my.tlan.net Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: my.tlan.net Address: 185.163.245.186
Да проверим сървърите им за имена:
sudo 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. sudo 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.
Да проверим записите на пощенските сървъри
sudo 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. sudo 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;" в раздела "зона",