DNS в CentOS

Содержание
Введение
Подготовка к установке
Установка BIND
Запуск
Проверить статус
Перезапуск DNS сервиса
Проверка iptables
Проверка netstat
dig: Выполнить DNS запрос
Типы DNS серверов: caching, forwarding
named.conf: Конфигурация
caching
query: Запросы
Использовать DNS сервер из локальной сети
Настройка forwarding DNS сервера
Похожие статьи

Введение

Про DNS в целом вы можете прочитать в статье « Domain Name System »

BIND - Berkeley Internet Name Domain. Самая популярная DNS в мире.

Подготовка к установке

Перед установкой bind обновите систему и убедитесь, что у вас установлен epel-release

sudo yum update
sudo yum upgrade
yum list epel-release

Loaded plugins: fastestmirror, langpacks Determining fastest mirrors * base: mirror.hosthink.net * epel: www.nic.funet.fi * extras: mirror.hosthink.net * updates: mirror.hosthink.net Installed Packages epel-release.noarch

Installed означает, что у меня epel-release установлен

Если вместо Installed вы видите Available - тогда установите командой

sudo yum install epel-release

Установка BIND

Проверить наличие bind можно выполнив

yum list bind

Loaded plugins: fastestmirror, langpacks Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast Determining fastest mirrors * base: mirror.hosthink.net * epel: mirror.yandex.ru * extras: mirror.hosthink.net * updates: mirror.hosthink.net Available Packages bind.x86_64 32:9.11.4-26.P2.el7_9.5 updates

Available означает, что пакет не установлен но доступен для установки.

Установить bind и bind-utils (нужен, например, для dig) можно командой

sudo yum install -y bind bind-utils

Loaded plugins: fastestmirror, langpacks You need to be root to perform this command. [andrei@localhost ~]$ sudo yum install -y bind bind-utils Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile epel/x86_64/metalink | 29 kB 00:00 * base: mirror.hosthink.net * epel: mirror.yandex.ru * extras: mirror.hosthink.net * updates: mirror.hosthink.net base | 3.6 kB 00:00 epel | 4.7 kB 00:00 extras | 2.9 kB 00:00 updates | 2.9 kB 00:00 (1/4): epel/x86_64/updateinfo | 1.0 MB 00:01 (2/4): extras/7/x86_64/primary_db | 243 kB 00:01 (3/4): epel/x86_64/primary_db | 7.0 MB 00:03 (4/4): updates/7/x86_64/primary_db | 11 MB 00:05 Resolving Dependencies --> Running transaction check ---> Package bind.x86_64 32:9.11.4-26.P2.el7_9.7 will be installed --> Processing Dependency: bind-libs-lite(x86-64) = 32:9.11.4-26.P2.el7_9.7 for package: 32:bind-9.11.4-26.P2.el7_9.7.x86_64 --> Processing Dependency: bind-libs(x86-64) = 32:9.11.4-26.P2.el7_9.7 for package: 32:bind-9.11.4-26.P2.el7_9.7.x86_64 ---> Package bind-utils.x86_64 32:9.11.4-26.P2.el7_9.5 will be updated ---> Package bind-utils.x86_64 32:9.11.4-26.P2.el7_9.7 will be an update --> Running transaction check ---> Package bind-libs.x86_64 32:9.11.4-26.P2.el7_9.5 will be updated ---> Package bind-libs.x86_64 32:9.11.4-26.P2.el7_9.7 will be an update --> Processing Dependency: bind-license = 32:9.11.4-26.P2.el7_9.7 for package: 32:bind-libs-9.11.4-26.P2.el7_9.7.x86_64 ---> Package bind-libs-lite.x86_64 32:9.11.4-26.P2.el7_9.5 will be updated ---> Package bind-libs-lite.x86_64 32:9.11.4-26.P2.el7_9.7 will be an update --> Running transaction check ---> Package bind-license.noarch 32:9.11.4-26.P2.el7_9.5 will be updated ---> Package bind-license.noarch 32:9.11.4-26.P2.el7_9.7 will be an update --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: bind x86_64 32:9.11.4-26.P2.el7_9.7 updates 2.3 M Updating: bind-utils x86_64 32:9.11.4-26.P2.el7_9.7 updates 261 k Updating for dependencies: bind-libs x86_64 32:9.11.4-26.P2.el7_9.7 updates 157 k bind-libs-lite x86_64 32:9.11.4-26.P2.el7_9.7 updates 1.1 M bind-license noarch 32:9.11.4-26.P2.el7_9.7 updates 91 k Transaction Summary ================================================================================ Install 1 Package Upgrade 1 Package (+3 Dependent packages) Total download size: 3.9 M Downloading packages: No Presto metadata available for updates (1/5): bind-libs-9.11.4-26.P2.el7_9.7.x86_64.rpm | 157 kB 00:00 (2/5): bind-9.11.4-26.P2.el7_9.7.x86_64.rpm | 2.3 MB 00:02 (3/5): bind-libs-lite-9.11.4-26.P2.el7_9.7.x86_64.rpm | 1.1 MB 00:01 (4/5): bind-license-9.11.4-26.P2.el7_9.7.noarch.rpm | 91 kB 00:00 (5/5): bind-utils-9.11.4-26.P2.el7_9.7.x86_64.rpm | 261 kB 00:00 -------------------------------------------------------------------------------- Total 1.8 MB/s | 3.9 MB 00:02 Running transaction check Running transaction test Transaction test succeeded Running transaction Updating : 32:bind-license-9.11.4-26.P2.el7_9.7.noarch 1/9 Updating : 32:bind-libs-lite-9.11.4-26.P2.el7_9.7.x86_64 2/9 Updating : 32:bind-libs-9.11.4-26.P2.el7_9.7.x86_64 3/9 Installing : 32:bind-9.11.4-26.P2.el7_9.7.x86_64 4/9 Updating : 32:bind-utils-9.11.4-26.P2.el7_9.7.x86_64 5/9 Cleanup : 32:bind-utils-9.11.4-26.P2.el7_9.5.x86_64 6/9 Cleanup : 32:bind-libs-9.11.4-26.P2.el7_9.5.x86_64 7/9 Cleanup : 32:bind-libs-lite-9.11.4-26.P2.el7_9.5.x86_64 8/9 Cleanup : 32:bind-license-9.11.4-26.P2.el7_9.5.noarch 9/9 Verifying : 32:bind-9.11.4-26.P2.el7_9.7.x86_64 1/9 Verifying : 32:bind-libs-9.11.4-26.P2.el7_9.7.x86_64 2/9 Verifying : 32:bind-utils-9.11.4-26.P2.el7_9.7.x86_64 3/9 Verifying : 32:bind-libs-lite-9.11.4-26.P2.el7_9.7.x86_64 4/9 Verifying : 32:bind-license-9.11.4-26.P2.el7_9.7.noarch 5/9 Verifying : 32:bind-libs-9.11.4-26.P2.el7_9.5.x86_64 6/9 Verifying : 32:bind-libs-lite-9.11.4-26.P2.el7_9.5.x86_64 7/9 Verifying : 32:bind-utils-9.11.4-26.P2.el7_9.5.x86_64 8/9 Verifying : 32:bind-license-9.11.4-26.P2.el7_9.5.noarch 9/9 Installed: bind.x86_64 32:9.11.4-26.P2.el7_9.7 Updated: bind-utils.x86_64 32:9.11.4-26.P2.el7_9.7 Dependency Updated: bind-libs.x86_64 32:9.11.4-26.P2.el7_9.7 bind-libs-lite.x86_64 32:9.11.4-26.P2.el7_9.7 bind-license.noarch 32:9.11.4-26.P2.el7_9.7 Complete!

Пакет, который мы установили называется bind но сервис назывется named

Поэтому для запуска сервиса при загрузке системы нужно выполнить

sudo systemctl enable named

Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.

Пока он не запущен статус будет inactive (dead)

systemctl status named

● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled) Active: inactive (dead)

Запуск named

sudo systemctl start named

Перезапуск named

sudo systemctl restart named

Проверка состояния named

sudo systemctl status -l named

named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2024-03-19 13:09:23; EEST; 1s ago Process: 3143 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS) Process: 3141 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS) Main PID: 3145 (named) Tasks: 4 CGroup: /system.slice/named.service └─3145 /usr/sbin/named -u named -c /etc/named.conf Mar 19 13:09:23 localhost.localdomain named[3145]: network unreachable resolving './DNSKEY/IN': 2001:500:2f::f#53 Mar 19 13:09:23 localhost.localdomain named[3145]: network unreachable resolving './NS/IN': 2001:500:2f::f#53 Mar 19 13:09:23 localhost.localdomain named[3145]: network unreachable resolving './DNSKEY/IN': 2001:500:12::d0d#53 Mar 19 13:09:23 localhost.localdomain named[3145]: network unreachable resolving './NS/IN': 2001:500:12::d0d#53 Mar 19 13:09:23 localhost.localdomain named[3145]: network unreachable resolving './DNSKEY/IN': 2001:503:c27::2:30#53 Mar 19 13:09:23 localhost.localdomain named[3145]: network unreachable resolving './DNSKEY/IN': 2001:500:12::d0d#53 Mar 19 13:09:23 localhost.localdomain named[3145]: network unreachable resolving './DNSKEY/IN': 2001:500:9f::42#53 Mar 19 13:09:23 localhost.localdomain named[3145]: network unreachable resolving './DNSKEY/IN': 2001:500:a8::e#53 Mar 19 13:09:23 localhost.localdomain named[3145]: resolver priming query complete Mar 19 13:09:23 localhost.localdomain named[3145]: managed-keys-zone: Key 20326 for zone . acceptance timer complete: key now trusted

Проверка iptables

sudo iptables -L

На чистой системе, скорее всего не будет никаких правил

Chain INPUT (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination

Если уже включен firewall то открыть нужно порт 53

Проверка netstat

Изучить, какие слушаютс порты можно с помощью netstat

netstat -ltn

Если named выключен

Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN

Если named включен

Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp6 0 0 ::1:53 :::* LISTEN tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:953 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN

Порт 53 слушается для DNS lookup

Порт 953 используется для контроля за DNS сервером

Полный список TCP/UDP портов вы можете изучить здесь

dig: Выполнить DNS запрос

На внешнем сервере

Чтобы выполнить dig достаточно установить bind-utils

dig www.eth1.ru

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> www.eth1.ru ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23334 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4000 ;; QUESTION SECTION: ;www.eth1.ru. IN A ;; ANSWER SECTION: www.eth1.ru. 600 IN A 87.236.16.208 ;; Query time: 37 msec ;; SERVER: 10.10.10.1#53(10.10.10.1) ;; WHEN: Mon Sep 13 12:16:40 EEST 2021 ;; MSG SIZE rcvd: 67

На своём DNS сервере

Если bind установлен и запущен, можно делать dig на нём.

[root@dns-server ~]# dig www.eth1.ru @127.0.0.1

Если named выключен или bind не установлен - вы не сможете сделать dig на локальном хосте.

Получите, например ;; connection timed out; no servers could be reached

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> www.eth1.ru @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4712 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 6, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.eth1.ru. IN A ;; ANSWER SECTION: www.eth1.ru. 600 IN A 87.236.16.208 ;; AUTHORITY SECTION: ANDREYOLEGOVICH.ru. 345600 IN NS ns1.beget.pro. ANDREYOLEGOVICH.ru. 345600 IN NS ns2.beget.com. ANDREYOLEGOVICH.ru. 345600 IN NS ns1.beget.RU. ANDREYOLEGOVICH.ru. 345600 IN NS ns2.beget.RU. ANDREYOLEGOVICH.ru. 345600 IN NS ns1.beget.com. ANDREYOLEGOVICH.ru. 345600 IN NS ns2.beget.pro. ;; ADDITIONAL SECTION: ns2.BEGET.ru. 345600 IN A 185.50.27.12 ns1.BEGET.ru. 345600 IN A 5.101.159.11 ;; Query time: 298 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Mar 19 13:09:23 EEST 2024 ;; MSG SIZE rcvd: 263

Обратите внимание - теперь в ответе содержится AUTHORITY SECTION.

Из неё можно узнать, что домен eth1.ru находится в зоне ответственности ns1.beget.pro. и ещё пяти beget серверов.

Подробности в статье DNS

Лично от себя рекомендую всем именно сервисы beget.com. Как вы могли убедиться - сам ими пользуюсь.

dig mail.google.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> mail.google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5444 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;mail.google.com. IN A ;; ANSWER SECTION: mail.google.com. 61158 IN CNAME googlemail.l.google.com. googlemail.l.google.com. 258 IN A 216.58.207.197 ;; Query time: 2 msec ;; SERVER: 192.168.0.1#53(192.168.0.1) ;; WHEN: Sat Sep 11 22:04:54 EEST 2021 ;; MSG SIZE rcvd: 87

Типы DNS серверов: caching и forwarding

Кэширующий DNS-сервер работает, выполняя все DNS-запросы, выполняемые вашей системой, а затем сохраняя или кэшируя результаты в памяти.

Перенаправляющий DNS-сервер отправляет запрос другому серверу и ждёт пока тот сделает работу за него.

Подробнее изуть особенности caching и forwarding серверов вы можете в статье «Типы DNS серверов»

named.conf - файл с конфигурацией named

Файл с настройками называется named.conf и лежит в

/etc

Настройка caching DNS сервера

Внесём небольшие изменения в файл с конфигурацией

vi /etc/named.conf

// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // // See the BIND Administrator's Reference Manual (ARM) for details about the // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html options { listen-on port 53 { 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { localhost; }; /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ recursion yes; dnssec-enable yes; dnssec-validation yes; /* Path to ISC DLV key */ bindkeys-file "/etc/named.root.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";

Внесём изменения

options { listen-on port 53 { any; }; listen-on-v6 port 53 { none; };

Проверка конфигурации

[root@dns-server ~]# named-checkconf

[root@dns-server ~]# named-checkconf -v

9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7

systemctl restart named

[root@dns-server ~]# netstat -ltn

Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.56.149:53 0.0.0.0:* LISTEN tcp 0 0 10.0.2.49:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:953 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN

На IPv6 больше не слушается порт 53. Количество IPv4 адресов на которых теперь слушается порт 53 увеличилось - сравните с тем что было раньше если не запомнили.

query: Запросы

Разрешить запросы к серверу можно указав нужный хост или сеть в allow-query

options { listen-on port 53 { any; }; listen-on-v6 port 53 { none; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { localhost; 192.168.56.0/24 };

Использовать DNS сервер из локальной сети

В данном примере в сети есть два хоста:

dns-server.andrei.com с IP адресом 192.168.56.149

host113.andrei.com     с IP адресом 192.168.56.113

Напоминаю, что в named.conf внесены следующие изменения

options { listen-on port 53 { any; }; listen-on-v6 port 53 { none; }; … allow-query { localhost; 192.168.56.0/24 };

На сервере 192.168.56.149 нужно открыть порт 53 для tcp и udp

[root@dns-server ~]# firewall-cmd --zone=public --add-port=53/tcp --permanent
[root@dns-server ~]# firewall-cmd --zone=public --add-port=53/udp --permanent
[root@dns-server ~]# firewall-cmd --reload

Полный список портов вы можете изучить в статье « Компьютерные сети »

Подробнее про работу с Firewall читайте в статье « CentOS Firewall »

На хосте 192.168.56.113 теперь можно выполнить dig @192.168.56.149 и если dns-server имеет нужные данные это должно сработать.

В этом примере по умолчанию установлено

recursion yes;

Если у вас это не сделано - для того, чтоб делать запросы к неизвестным именам - нужно разрешить серверу делать рекурсивные запросы .

[root@host113 ~]# dig www.heihei.ru @192.168.56.149

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> www.heihei.ru @192.168.56.149 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44716 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.heihei.ru. IN A ;; ANSWER SECTION: www.heihei.ru. 598 IN A 87.236.16.208 ;; Query time: 84 msec ;; SERVER: 192.168.56.149#53(192.168.56.149) ;; WHEN: Mon Sep 13 14:30:39 EEST 2021 ;; MSG SIZE rcvd: 58

Настройка forwarding DNS сервера

vi /etc/named.conf

Оставим конфиг из предыдущего примера и допишем в конец блока options

options { … forwarders { 8.8.8.8; 8.8.4.4; 1.1.1.1; 1.0.0.1; }; forward only;

8.8.8.8; 8.8.4.4; - это публичные DNS сервера Google

1.1.1.1; 1.0.0.1; - это публичные DNS сервера Cloudflare

Порядок перечисления не имеет значения - будет использоваться тот, от которого быстрее отклик.

forward может принимать одно из двух значений: first или only

Подробнее опции first и only вы можете изучить в статье forward

Похожие статьи
DNS CentOS
Ошибки DNS
Настройка сети в CentOS
Создать новый интерфейс
CentOS
Компьютерные сети
ip
hostname
DNS теория
Firewall
iftop: Мониторинг сети
nethogs: Мониторинг сети
tc: Контроль за трафиком
iperf: Измерение скорости сети
uuidgen: uuid для сетевого интерфейса
SCP: обмен файлами;
SSH: удалённый доступ
Сокеты в C

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: