какие команды нужно вообще прописывать?
Часть 1. Подготовка VDS к установке Bind.
Итак, у нас имеется:
# uname -a
Linux zeroxzed.ru 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Меняем имя хоста (при необходимости) :
Проверить какое у нас используется hostname можно командой:
# hostname
Изменить имя хоста можно следующей командой
Для CentOS 6 в файле /etc/sysconfig/network
HOSTNAME=example.com
Для CentOS 7 командой:
# hostnamectl set-hostname новое_имя_хоста
# hostnamectl set-hostname word-music.ru
Перезапустим сетевой интерфейс чтобы изменения вступили в силу:
# /etc/init.d/network restart
Проверяем работает ли у нас все:
# hostname
Для удобства администрирования, я всегда устанавливаю Midnight Commander, или просто mc:
# yum -y install mc
Подсветка синтаксиса в Midnight Commander
Для подсветки файлов, у которых нет своих цветовых настроек:
# cp /usr/share/mc/syntax/cxx.syntax /usr/share/mc/syntax/unknown.syntax
Дальше нам пригодятся сетевые утилиты.
# yum -y install net-tools.x86_64
Отключаем SELinux.
# mcedit /etc/sysconfig/selinux
меняем значение
SELINUX=disabled
Чтобы изменения вступили в силу, перезагружаемся:
# reboot
Или примените исключение:
# setenforce 0
Отключить IPv6 везде где только можно:
В файл /etc/sysctl.conf
Добавляем следующие строки:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
# echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
# mcedit /etc/sysconfig/network-scripts/ifcfg-eth0
IPV6INIT=no
# mcedit /etc/sysconfig/network
добавить
NETWORKING_IPV6=no
IPV6INIT=no
SSH:
/etc/ssh/sshd_config
до
#AddressFamily any
#ListenAddress 0.0.0.0
после
AddressFamily inet
ListenAddress 0.0.0.0
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Перезагрузка и проверка:
# reboot
# netstat -tulnp
Все строки с ::: это ipv6 протокол
Удаляем NetworkManager в CentOS 7
Это программа, облегчающая определение и конфигурацию средств для автоматического подключения к сети.
Полезна она только для домашнего ПК или ноутбука, на сервере же может создавать проблемы с настройкой сети,
т.к. может самостоятельно менять настройки.
# systemctl stop NetworkManager && systemctl disable NetworkManager && systemctl restart network
Настраиваем время
Установим нужный часовой пояс:
# yum -y install tzdata
# mv /etc/localtime /etc/localtime.bak
# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Синхронизируем время:
Можно запускать синхронизацию времени вручную:
# ntpdate pool.ntp.org
Или установить сервер ntp (настройки в файле /etc/ntp.conf):
# yum install ntp
# service ntpd start
# chkconfig ntpd on
Узнать, какое время на сервере можно с помощью команды date:
# date
Часть 2. Установка Bind 9 (named) в CentOS 7
Первым делом проверим, установлен ли у нас днс сервер в системе:
# rpm -qa bind*
У меня не установлен.
Если не установлен, то ответ следующий :
bind-libs-lite-9.9.4-14.el7.x86_64
bind-license-9.9.4-14.el7.noarch
При установленном получим следующий примерный ответ :
bind-libs-9.9.4-51.el7.x86_64
bind-chroot-9.9.4-51.el7.x86_64
bind-libs-lite-9.9.4-51.el7.x86_64
bind-license-9.9.4-51.el7.noarch
bind-9.9.4-51.el7.x86_64
bind-utils-9.9.4-51.el7.x86_64
Устанавливаем соответствующие пакеты:
# yum -y install bind bind-utils
Проведём первоначальную настройку DNS-сервера:
Осталось открыть порт в firewall
Добавим следующие правила для 53 порта.
# iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
Обновляем iptable
# service iptables save
# service iptables restart
Файл конфигурации нашего сервера располагается по адресу etc/named.conf.
Открываем его и приводим к следующему виду:
# mcedit /etc/named.conf
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; }; # Если планируете использовать IPv6
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";
allow-query { any; };
...
А в его конец добавим следующие строки
zone "word-music.ru" IN {
type master;
file "/etc/named/word-music.ru.zone";
allow-update { none; };
};
Можно проверить конфиг на наличие ошибок стандартными средствами
# named-checkconf /etc/named.conf
Если вывод пустой, то значит ошибок нету
Дальше подключаем файл зоны в конфигурационном файле bind — etc/named.conf:
Поправим /var/named/word-music.ru.zone
# mcedit /var/named/word-music.ru.zone
************************************************************************
$TTL 86400
@ IN SOA ns1.word-music.ru. ns2.word-music.ru. (
2017011301 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS ns1.word-music.ru.
IN NS ns2.word-music.ru.
IN MX 10 mail.word-music.ru.
@ IN A 185.209.23.247
ns1 IN A 185.209.23.247
ns2 IN A 185.209.23.247
mail IN A 185.209.23.247
www IN A 185.209.23.247
***********************************************************************
Объяснение: Внутри файла зоны, SOA означает начало авторизации.
Это полное доменное имя авторитетного сервера имен. После полного доменного имени, идёт контактный email адрес.
Поскольку мы не можем использовать ‘@’ в
mial@example.tst, мы перезаписываем email адрес как mial.example.tst.
NS: Имя сервера
A: A запись или запись адреса — это IP адрес
MX: Mail Exchanger запись. Здесь мы используем только один MX с приоритетом 10. В случае множества MX, мы можем использовать различные цифровые приоритеты. Нижний номер выигрывает. Например, MX 0 лучше чем MX 1.
CNAME: имя в каноническом виде. Если на сервере размещено множество служб, весьма вероятно, что множество имён будут преобразовываться к одному серверу. CNAME сигнализирует, что другие имена сервер может иметь и отсылает к имени, которое содержится в A записи.
Проверяем зоны на ошибки:
# named-checkzone word-music.ru /var/named/word-music.ru.zone
zone word-music.ru.zone/IN: loaded serial 2017011301
OK
Выставляем необходимые права:
# chown root:named /var/named/word-music.ru.zone
# chmod 0640 /var/named/word-music.ru.zone
Запускаем сервис, предварительно добавив его в автозагрузку
# systemctl enable named
# systemctl start named
И проверяем, что он работает корректно:
# systemctl status named
#####################################################
Часть 3. Настройка логов в Bind 9 (named)
Чтобы вывести все категории логов в отдельные файлы, необходимо в конфиг named добавить следующую конструкцию:
# mcedit /etc/named.conf
Если мы хотим собирать все логи запросов из категории queries,
то в раздел options файла конфигурации необходимо добавить параметр, который это разрешает:
querylog yes;
И далее вписываем :
Код:
logging {
channel default {
file "/var/log/named/default.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel general {
file "/var/log/named/general.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel database {
file "/var/log/named/database.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel security {
file "/var/log/named/security.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel config {
file "/var/log/named/config.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel resolver {
file "/var/log/named/resolver.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel xfer-in {
file "/var/log/named/xfer-in.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel xfer-out {
file "/var/log/named/xfer-out.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel notify {
file "/var/log/named/notify.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel client {
file "/var/log/named/client.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel unmatched {
file "/var/log/named/unmatched.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel network {
file "/var/log/named/network.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel update {
file "/var/log/named/update.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel update-security {
file "/var/log/named/update-security.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel queries {
file "/var/log/named/queries.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel query-errors {
file "/var/log/named/query-errors.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel dispatch {
file "/var/log/named/dispatch.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel dnssec {
file "/var/log/named/dnssec.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel lame-servers {
file "/var/log/named/lame-servers.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel delegation-only {
file "/var/log/named/delegation-only.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel edns-disabled {
file "/var/log/named/edns-disabled.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel rpz {
file "/var/log/named/rpz.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
channel rate-limit {
file "/var/log/named/rate-limit.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
category default { default; };
category general { general; };
category database { database; };
category security { security; };
category config { config; };
category resolver { resolver; };
category xfer-in { xfer-in; };
category xfer-out { xfer-out; };
category notify { notify; };
category client { client; };
category unmatched { unmatched; };
category network { network; };
category update { update; };
category update-security { update-security; };
category queries { queries; };
category query-errors { query-errors; };
category dispatch { dispatch; };
category dnssec { dnssec; };
category lame-servers { lame-servers; };
category delegation-only { delegation-only; };
category edns-disabled { edns-disabled; };
category rpz { rpz; };
category rate-limit { rate-limit; };
};
Теперь создадим папку для логов.
Код:
# mkdir /var/log/named
# touch /var/log/named/default.log
# touch /var/log/named/general.log
# touch /var/log/named/database.log
# touch /var/log/named/security.log
# touch /var/log/named/config.log
# touch /var/log/named/resolver.log
# touch /var/log/named/xfer-in.log
# touch /var/log/named/xfer-out.log
# touch /var/log/named/notify.log
# touch /var/log/named/client.log
# touch /var/log/named/unmatched.log
# touch /var/log/named/network.log
# touch /var/log/named/update.log
# touch /var/log/named/update-security.log
# touch /var/log/named/queries.log
# touch /var/log/named/query-errors.log
# touch /var/log/named/dispatch.log
# touch /var/log/named/dnssec.log
# touch /var/log/named/lame-servers.log
# touch /var/log/named/delegation-only.log
# touch /var/log/named/edns-disabled.log
# touch /var/log/named/rpz.log
# touch /var/log/named/rate-limit.log
# chmod -R 777 /var/log/named
Конфигурирование сервера я начинаю с настройки утилиты управления rndc.
Настройка rndc
# mcedit /etc/rndc.key
Если файла нет, то можно сгенерировать командой
Воспользуемся утилитой rndc-confgen для генерации конфигурационного файла rndc:
# rndc-confgen -a
# mcedit /etc/sysconfig/network-scripts/ifcfg-eth0
PEERDNS=no
DOMAIN="example.com example.org"
DNS1=127.0.0.1
DNS2=8.8.8.8
DNS3=8.8.4.4
# systemctl restart network
************************************************************************************8
Перечитываем конфигурацию named с помощью rndc:
# rndc reconfig
При изменении в файле описания зоны вместо перезапуска всего named-сервера достаточно выполнить команду
# rndc reload
Для применения настроек выполните команду:
# systemctl restart named
Если всё хорошо, то ничего в ответ не появится,
а если рестарт не произойдёт, то следующие команды помогут разобраться
# systemctl status named
# journalctl -xe
Часть 4. Проверка работоспособности ДНС сервера.
Для проверки работоспособности сервера с другого компьютера сети (например, на Windows) выполняем команду:
# nslookup dmosk.ru 192.168.166.155
* данной командой мы пытаемся узнать IP-адреса сайта dmosk.ru через сервер 192.168.166.155.
# nslookup yandex.ru 185.213.211.178
# nslookup word-music.ru 185.213.211.178
Ошибки
Сообщение
rndc: connect failed: 127.0.0.1#953: connection refused
Решение
service named restart
rndc reload