Linux
  • << DEBIAN >>
  •   < Debian 9 >
  •     Инсталиране на Debian 9
  •     Първоначални настройки (мрежа, VIM, Кирилизация)
  •     Инсталиране и настройка на SSH
  •     Инсталиране и настройка на DNS
  •     Инсталиране и настройка на NTP
  •     Инсталиране и настройка на Apache
  •     Инсталиране и настройка на MySQL (MariaDB)
  •     Инсталиране и настройка на PHPMyAdmin
  •     Инсталиране и настройка на собствен облак
  •     Инсталиране и настройка на SAMBA
  •     Инсталиране и настройка на FTP сървър
  •     Инсталиране и настройка на OSCAM
  •     Инсталиране и настройка на Mail server
  •       Първоначално конфигуриране на базата данни
  •       Инсталиране и конфигуриране на PostFix
  •       Инсталиране и конфигуриране на Dovecot
  •       PostFix дефинира Dovecot да удостоверява
  •       RoundCube
  •       Тестване доставката на поща
  •       Създаване на TLS криптиран ключ и сертификат
  •       WEB администриране
  •       Антиспам със SpamAssassin
  •       Антиспам с RSpmad
  •   < Debian 11 >
  •     Как зарежда Linux
  •     Разпределение на диска при BIOS и UEFI
  •     Debian 11 на BIOS върху LVM и RAID
  •     Инсталиране на Debian 11 на BIOS и ZFS
  •     Инсталиране на Debian 11 на BIOS и ZFS-1
  •     Инсталиране на Debian 11 на UEFI и ZFS
  •     ZFS Замяна на развален огледален диск
  •     Ремонт на GRUB и INITRAMFS
  •   < Debian 12 >
  •     Първоначални настройки
  •     DNS Сървър
  •     DNS Практика
  •     Инсталиране и настройка на Apache
  •     MySQL и PHPMyAdmin
  •     Елементарен MAIL сървър
  •       Първо надграждане на MAIL сървъра
  •     Инсталиране и настройка на пощенски сървър
  •     Пощенски сървър с iRedMail и PHPMyAdmin
  •     WEB сървър с Nginx
  •   Сървър на отделни хостове
  •     DNS Сървър
  •     SQL Сървър
  •     WEB Сървър
  •     Пощенски Сървър
  •   PXE Server
  •   PXE UEFI Server - TFTP
  •   Сървър за отдалечен достъп - RustDESK
  • < UBUNTU >
  •   Ubuntu SERVER 22.04
  •     Инсталиране на Ubuntu 22.04 Server
  •     Първоначални настройки на Ubuntu 22.04 Server
  •     DNS в Ubuntu 22.04 Server
  •     MySQL Apache PHPMyAdmin
  •     Пощенски сървър
  •       Пощенски сървър в опростен вариант
  •       PostFix, Dovecot по-подробно
  •   Ubuntu mini
  •   Ubuntu BUDGIE
  •     Инсталиране Ubuntu BUDGIE
  •     Първоначални настройки на Ubuntu BUDGIE
  •     Ubuntu BUDGIE като MAC OS
  •     Приложения за Ubuntu BUDGIE
  • GNOME работна среда
  •   Ubuntu GNOME
  •     Инсталиране на Ubuntu 21.04 GNOME
  •     Ubuntu 21.04 GNOME като MacOS
  • XFCE работна среда
  •   Debian - Install XFCE
  •     Debian XFCE - допълнение
  •     Debian XFCE като MacOS
  •   Ubuntu - Install XFCE
  •     Ubuntu XFCE - допълнение
  •     Ubuntu XFCE като MacOS
  • МАТЕ работна среда
  •   Debian - Install MATE
  •     Настройка на Debian MATE
  • PROGRAMS
  •   Conky
  •   Sublime Text
  • Инсталиране и настройка на DNS в Debian 12

    В условието имаме: - наличие на два хоста, на единия ще имаме 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) running on post: Linux x86_64 5.10.0-28-amd64 #1 SMP Debian 5.10.209-2 (2024-01-31) boot time: Thu, 28 Mar 2024 19:25:10 GMT last configured: Thu, 28 Mar 2024 19:25:14 GMT configuration file: /etc/bind/named.conf CPUs found: 4 worker threads: 4 UDP listeners per interface: 4 number of zones: 103 (97 automatic) debug level: 0 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is OFF recursive clients: 0/900/1000 tcp clients: 0/150 TCP high-water: 0 server is up and running


    Стартираме услугата named

    systemctl start named systemctl enable named

    Проверяваме как работи услугата.

    systemctl status named

    Горните команди могат да се изпълнят и с:

    service named start service named restart service named reload


    DNS сървър с главни зони

    Започваме с една уговорка. Ако ползвате само 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

    Интересната част тук е делегирането на поддомейна към друг хост. За целта е необходимо да се дефенира именен сървър за поддомейна и на кой 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


    DNS сървър с делегирани под зони

    Публичното 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;" в раздела "зона",