- Как установить и настроить DNS-сервер BIND на Linux CentOS
- Подготовка сервера
- Установка и запуск BIND
- Базовая настройка DNS-сервера
- Описание глобальных опций
- Пример глобальных настроек
- Зоны bind
- Решение проблем с помощью log-файлов
- Лог запросов
- DNS в CentOS
- Введение
- Подготовка к установке
- Установка BIND
- Запуск named
- Перезапуск named
- Проверка состояния named
- Проверка iptables
- Проверка netstat
- dig: Выполнить DNS запрос
- На внешнем сервере
- Настройка caching DNS сервера
- query: Запросы
- Использовать DNS сервер из локальной сети
Как установить и настроить DNS-сервер BIND на Linux CentOS
Что такое DNS, BIND, Linux и CentOS простыми словами. Версии используемого ПО — CentOS 7, BINВ 9.
Подготовка сервера
Устанавливаем все обновления:
Устанавливаем утилиту для синхронизации времени:
yum install chrony
Настраиваем временную зону:
timedatectl set-timezone Europe/Moscow
* в данном примере выбрано московское время.
Разрешаем и запускаем сервис для синхронизации времени:
systemctl enable chronyd —now
Открываем порт в firewall:
firewall-cmd —permanent —add-port=53/udp
И перечитываем настройки сетевого экрана:
Установка и запуск BIND
Устанавливаем DNS-сервер следующей командой:
yum install bind
systemctl enable named
Запускаем сервис имен:
systemctl start named
И проверяем, что он работает корректно:
systemctl status named
Базовая настройка DNS-сервера
Открываем на редактирование конфигурационный файл bind:
и редактируем следующее:
* где 192.168.166.155 — IP-адрес нашего NS-сервера, на котором он будет принимать запросы; allow-query разрешает выполнять запросы всем, но из соображений безопасности можно ограничить доступ для конкретной сети, например, вместо any написать 192.168.166.0/24.
Для применения настроек выполните команду:
systemctl restart named
Для проверки работоспособности сервера с другого компьютера сети (например, на Windows) выполняем команду:
> nslookup dmosk.ru 192.168.166.155
* данной командой мы пытаемся узнать IP-адреса сайта dmosk.ru через сервер 192.168.166.155.
Должно получиться, примерно, следующее:
Описание глобальных опций
Перечисленные ниже параметры являются глобальными по отношению к DNS и всем настроенным зонам. Они задаются в конфигурационном файле named.conf, директиве options <>.
Опции | Описания |
---|---|
directory | Указывает рабочий каталог сервера bind. Если не указан, /var/named |
forwarders | Перечисляет серверы, на которые будет переведен запрос, в случае, если наш сервер не сможет его обработать (нет соответствующей зоны.) |
forward | Переопределяет способ обработки запроса. Принимает два значения — ONLY или FIRST. Первое указывает на то, что сервер не будет пытаться искать совпадения среди локальных зон. Второе — сервер сначала будет перенаправлять запрос и если он не будет успешно обработан, искать соответствия во внутренней базе. |
listen-on | На каких интерфейсах будет слушать bind |
allow-transfer | Указание на список серверов на которые будут разрешены зонные передачи (репликация на вторичные NS) |
allow-query | Список узлов, с которых разрешено обращаться к серверу. Если не задана, разрешено всем. |
allow-notify | Перечисленным серверам разрешает отправку уведомлений об изменениях в настройках зоны. |
allow-recursion | Задает список хостов, для которых разрешены рекурсивные запросы, остальным — будут разрешены итеративные. Если не задана, для всех рекурсивно. |
Пример глобальных настроек
Зоны bind
Для возможности искать соответствия в собственной базе доменов, необходимо создать и настроить зоны. Существуют следующие типы зон:
- Первичная, она же master, она же локальная. База, которая пополняется и редактируется на текущем сервере. Подробнее как настроить первичную зону bind.
- Вторичная или slave. База копирует настройки с первичной зоны на другом сервере. Подробнее как настроить вторичную зону bind.
- Заглушка или stub. Хранит у себя только записи NS, по которым все запросы переводятся на соответствующие NS-серверы.
- Кэширующая или hint. Не хранит на сетбе никаких записей — только результаты уже обработанных запросов для ускорения ответов на повторные обращения.
Решение проблем с помощью log-файлов
По умолчанию, сервер Bind под CentOS хранит логи в файле /var/named/data/named.run.
Для его непрерывного просмотра вводим следующую команду:
tail -f /var/named/data/named.run
Степень детализации логов можно настроить в конфигурационном файле:
logging <
channel default_debug <
file «data/named.run»;
severity dynamic;
>;
>;
* где file — путь к log-файлу; severity — уровень чувствительности к возникающим событиям. Возможны следующие варианты для severity:
- critical — критические ошибки.
- error — ошибки и выше (critical).
- warning — предупреждения и выше. Предупреждения не говорят о наличии проблем в работе сервиса, однако это такие событтия, которые могут привести с ошибкам, поэтому не стоит их игнорировать.
- notice — уведомления и выше.
- info — информация.
- debug — отладка (подробный лог).
- dynamic — тот же debug.
Напротив, чтобы отключить ведение лога, в конфигурационном файле должна быть настройка:
После изменения конфигурационного файла перезапускаем сервис:
systemctl restart named
Лог запросов
Если мы хотим также видеть в логе все запросы, которые приходят на bind, в командной строке вводим:
Источник
DNS в CentOS
Введение
Про 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 можно выполнив
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 Mon 2021-10-11 06:45:14; EEST; 1s ago Process: 3143 ExecStart=/usr/sbin/named -u named -c $
Проверка 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
Если 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 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 > www.andreyolegovich.ru ;; global options: +cmd ;; Got answer: ;; ->>HEADER > DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 > www.andreyolegovich.ru @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER > DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 > mail.google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER named.conf и лежит в
Настройка caching DNS сервера
Внесём небольшие изменения в файл с конфигурацией
// // 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-
systemctl restart named
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 внесены следующие изменения
На сервере 192.168.56.149 нужно открыть порт 53 для tcp и udp
]# 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 читайте в статье « CentOS Firewall »
На хосте 192.168.56.113 теперь можно выполнить dig @192.168.56.149 и если dns-server имеет нужные данные это должно сработать.
В этом примере по умолчанию установлено
Если у вас это не сделано — для того, чтоб делать запросы к неизвестным именам — нужно разрешить серверу делать рекурсивные запросы .
; > 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 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
Источник