- Вопрос или проблема
- Ответ или решение
- Решение проблемы отсутствия репликации между мастер и слейв BIND серверами
- 1. Проверка конфигурации мастер-сервера
- 2. Проверка конфигурации слейв-серверов
- 3. Проблемы с уведомлениями и передачей зон
- 4. Проверка журналов и вывода команд
- 5. Удаление старых файлов зон на слейв-серверах
- 6. Настройки безопасности и сети
- Заключение
Вопрос или проблема
У меня есть главный сервер BIND, который обслуживает несколько зон. Пример записи в файле named.conf
:
zone "example.com" {
type master;
file "example.com.zone";
allow-update { 10.202.215.10; 10.202.215.11; 10.201.215.14; };
};
Существует три ведомых сервера. Пример конфигурации, которая есть на всех трех:
zone "example.com" {
type slave;
file "slaves/example.com.zone";
masters { 10.201.215.11; 10.202.215.10; 10.202.215.11; };
};
ИЗМЕНЕНИЕ
IP-адреса и имена хостов главного и ведомых серверов
Master: 10.201.215.11
Slave1: 10.201.215.14
Slave2: 10.202.215.10
Slave3: 10.202.215.11
КОНЕЦ ИЗМЕНЕНИЯ
Для файла зоны в примере я увеличил серийный номер на главном сервере, а затем запустил rndc reload
на всех серверах (главном и трех ведомых). Временной штамп на файлах зоны на каждом ведомом сервере обновляется, однако серийный номер на ведомом сервере не обновляется.
Однако ведомые серверы обновляются:
Oct 14 12:14:44 dns-slave01 named[12434]: transfer of 'example.com/IN' from m 10.201.215.11#53: connected using 10.202.215.10#44420
Почему серийный номер не обновляется?
ИЗМЕНЕНИЕ
На основании комментария yoonix я удалил все, кроме одного сервера, который я знаю как главный для зоны:
zone "example.com" {
type slave;
file "slaves/example.com.zone";
masters { 10.201.215.11; };
};
Я также явно установил notify yes
, несмотря на то, что это включено по умолчанию.
Кроме того, я убрал опцию allow-update
на главном сервере, чтобы убедиться, что все хосты могут динамически обновляться.
Однако репликация все еще не происходит.
Тем не менее, я вижу, что главный сервер отправляет уведомления NOTIFY:
Oct 17 00:48:00 dns-master01 named[5608]: zone example.com/IN: sending notifies (serial 2009091903)
Oct 17 00:48:13 dns-master01 named[5608]: zone example.com/IN: sending notifies (serial 2009091904)
Я проверил с помощью telnet
, что я могу подключиться к ведомым серверам с главного сервера через порт 53.
ИЗМЕНЕНИЕ 2
Одно, что я сделал, – это убедиться, что у всех ведомых серверов одинаковая конфигурация, а также исправить систему логирования, которая была неправильно настроена. Примерно через три часа после изменения файла зоны передача произошла. Я все еще не могу понять, почему это не происходит сразу.
Ниже приведен файл named.conf
главного сервера. Есть несколько других записей зон, но они все идентичны, за исключением домена.
// generated by named-bootconf.pl
//
// конфигурация кэшированного DNS-сервера
acl trusted_nets {
10.201.96.0/20;
10.202.96.0/20;
10.201.215.0/24;
10.202.215.0/24;
12.130.200.0/24;
174.47.15.0/24;
199.108.193.0/24;
199.108.195.0/24;
72.165.204.0/24;
};
//
options {
directory "/var/named";
allow-recursion { trusted_nets; };
notify yes;
allow-transfer { 10.202.215.10; 10.202.215.11; 10.201.215.14; 199.108.193.20; 209.67.192.20; 10.201.215.10; };
};
logging {
channel dns_log {
file "/var/log/named.log" versions 3 size 5m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
category default {
dns_log;
};
};
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." {
type hint;
file "named.ca";
};
zone "localhost" {
allow-update { none; };
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" {
allow-update { none; };
type master;
file "named.local";
};
zone "example.com" {
type master;
file "example.com.zone";
allow-update { 10.202.215.10; 10.202.215.11; 10.201.215.14; };
};
include "/etc/rndc.key";
Каждый из IP-адресов в настройке allow-update
является одним из ведомых серверов.
Пример ведомого сервера. Снова, есть несколько других зон, но они идентичны, кроме домена.
// generated by named-bootconf.pl
//
// конфигурация кэшированного DNS-сервера
acl trusted_nets {
10.201.96.0/20;
10.202.96.0/20;
10.202.92.0/20;
10.201.215.0/24;
10.202.215.0/24;
12.130.200.0/24;
174.47.15.0/24;
199.108.193.0/24;
199.108.195.0/24;
72.165.204.0/24;
};
//
options {
directory "/var/named";
allow-recursion { trusted_nets; };
allow-transfer { 10.202.215.10; 10.202.215.11; 10.201.215.11; 199.108.193.20; 209.67.192.20; };
};
logging {
channel mtg_log {
file "/var/log/named.log" versions 3 size 5m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
category default {
mtg_log;
};
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { rndckey; };
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" {
allow-update { none; };
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" {
allow-update { none; };
type master;
file "named.local";
};
zone "example.com" {
type slave;
file "slaves/example.com.zone";
masters { 10.201.215.11; };
};
include "/etc/rndc.key";
За исключением опции type
, они идентичны. Я не знаю, должны ли они быть настроены таким образом.
ИЗМЕНЕНИЕ 3
Уведомление NOTIFY, похоже, отправляется только когда я перезапускаю named
. Я пробовал rndc reload
и service named reload
, но ничего не произошло. Только service named restart
отправило объявление.
С вашей конфигурацией у вас есть несколько серверов-мастеров. Ведомые серверы могут запрашивать любые из мастеров для получения обновлений. Убедитесь, что все мастера обновлены, прежде чем пытаться обновить ведомые серверы. Я подозреваю, что у вас должен быть только один IPv4 и/или один IPv6 адрес в списке.
Вам, вероятно, следует добавить также список also-notify
, содержащий IP-адреса ваших ведомых серверов. Обычно это должны быть единственные хосты, которые могут выполнять передачу зоны. Вам также стоит рассмотреть возможность включения уведомления для вашего главного сервера.
Я бы предложил вам удалить файлы зон на ведомых серверах и выполнить новую передачу зоны с главного сервера.
Ответ или решение
Решение проблемы отсутствия репликации между мастер и слейв BIND серверами
Если у вас возникли проблемы с репликацией зон между мастер и слейв серверами BIND, важно провести комплексный анализ конфигурации и настроек. Давайте разберемся с вашим случаем и выявим возможные причины, а также пути их устранения.
1. Проверка конфигурации мастер-сервера
На мастер-сервере у вас настроена зона "example.com"
следующим образом:
zone "example.com" {
type master;
file "example.com.zone";
allow-update { 10.202.215.10; 10.202.215.11; 10.201.215.14; };
};
- Проверка
allow-transfer
: Убедитесь, что в настройкахoptions
вашего мастер-сервера указаны IP-адреса всех слейвов в директивеallow-transfer
. В вашем случае это:
allow-transfer { 10.202.215.10; 10.202.215.11; 10.201.215.14; };
2. Проверка конфигурации слейв-серверов
Ваши слейв-серверы настроены следующим образом:
zone "example.com" {
type slave;
file "slaves/example.com.zone";
masters { 10.201.215.11; };
};
- Проверка IP-адресов мастера: Убедитесь, что IP-адрес, указанный в
masters
, соответствует IP вашего мастер-сервера (10.201.215.11).
3. Проблемы с уведомлениями и передачей зон
Вы указывали, что уведомления (NOTIFY) отправляются только после перезагрузки мастер-сервера. Это может быть связано с настройками кэширования. Проверьте следующие моменты:
- Настройка
notify
: Убедитесь, что на мастер-сервере включены уведомления:
notify yes;
- Директива
also-notify
: Рассмотрите возможность добавления директивыalso-notify
, чтобы явно указать IP-адреса слейв-серверов, уведомляемых о изменениях:
also-notify { 10.201.215.14; 10.202.215.10; };
4. Проверка журналов и вывода команд
Обратите внимание на следующие действия:
- Проверьте логи на мастер и слейв серверах (
/var/log/named.log
) на предмет ошибок или предупреждений. - Используйте команду
rndc refresh
на слейв-серверах для ручного обновления и проверьте, обновится ли серийный номер.
5. Удаление старых файлов зон на слейв-серверах
Если старые файлы зон всё ещё присутствуют на слейв-серверах, это может препятствовать корректной репликации. Удалите файлы зон и выполните полную передачу от мастера:
# Удалите старые файлы
rm /var/named/slaves/example.com.zone
# Обновите слейв
rndc refresh
6. Настройки безопасности и сети
Убедитесь:
- Файрволлы: Проверьте, что правила брандмауэра на всех серверах позволяют передачу данных через порт 53.
- iptables или другие системы контроля доступа: Конфиги этих систем также могут блокировать необходимый трафик.
Заключение
Следуя приведенным рекомендациям, вы сможете выявить и устранить недочеты в настройках репликации между BIND мастер и слейв серверами. Важно внимательно проверять логи и конфигурации, чтобы обеспечить бесперебойную работу DNS. Если после всех проверок проблема не будет решена, рекомендуется обратиться к официальной документации BIND или на специализированные форумы для получения более детальной помощи.