У меня есть два сервера Bind в конфигурации главный / подчиненный. Когда серийный номер увеличивается на главном файле зоны, обновление зоны на подчиненном устройстве занимает больше времени, чем ожидалось. Я воспроизвел проблему на двух тестовых серверах. При ttl, равном 5 секундам, ведомому устройству требуется несколько минут для обновления. Я использую Bind 9.8 и Ubuntu 12.04.
Вот моя конфигурация для главного тестового сервера:
named.conf.local
zone "example.com" {
type master;
file "/var/lib/bind/db.example.com.zone";
//forwarders {};
// If we do not comment the ''forwarders'' "empty" clients of the local subnet in my case don't have access to the upstream DNS ?
//allow-update { key ns-example-com_rndc-key; };
allow-update { key rndc-key; };
//confusion between the file name to import (ns-example-com_rndc-key) and the key label (rndc-key) ?
};
zone "0.168.192.in-addr.arpa" {
type master;
file "/var/lib/bind/db.example.com.inv.zone";
//see comment below (zone "example.com")
//forwarders {};
//allow-update { key ns-example-com_rndc-key; };
allow-update { key rndc-key; };
};
db.root.example.com
$TTL 5
@ IN SOA sid.example.com. root.example.com. (
2007010416 ; Serial
5 ; Refresh [1m]
5 ; Retry [10m]
5 ; Expire [1d]
5 ) ; Negative Cache TTL [1h]
;
@ IN NS sid.example.com.
@ IN MX 10 sid.example.com.
sid IN A 192.168.0.3
etch IN A 192.168.0.3
pop IN CNAME sid
www IN CNAME sid
mail IN CNAME sid
db.example.com.inv.zone
@ IN SOA sid.example.com. root.example.com. (
2007010401 ; Serial
3600 ; Refresh [1h]
600 ; Retry [10m]
86400 ; Expire [1d]
600 ) ; Negative Cache TTL [1h]
;
@ IN NS sid.example.com.
1 IN PTR sid.example.com.
2 IN PTR etch.example.com.
Вот конфигурация ведомого устройства:
zone "example.com" {
type slave;
file "/var/cache/bind/db.example.com.zone";
masters { 192.168.0.2; };
//forwarders {};
// If we do not comment the ''forwarders'' "empty" clients of the local subnet in my case don't have access to the upstream DNS ?
//allow-update { key ns-example-com_rndc-key; };
allow-update { key rndc-key; };
//confusion between the file name to import (ns-example-com_rndc-key) and the key label (rndc-key) ?
};
zone "0.168.192.in-addr.arpa" {
type slave;
file "/var/cache/bind/db.example.com.inv.zone";
masters { 192.168.0.2; };
//see comment below (zone "example.com")
//forwarders {};
//allow-update { key ns-example-com_rndc-key; };
allow-update { key rndc-key; };
};
Из руководства для левой копии DNS для ученых-ракетчиков:
По умолчанию BIND9 отправляет сообщения NOTIFY всем целевым именам (правые имена), которые появляются в NS RR для зоны.
Итак, вам нужно добавить свой подчиненный сервер как запись NS в db.example.com.inv.zone
.
Дополнительно может потребоваться добавить настройки:
notify yes;
и allow-transfer { SLAVE_IP; };
allow-notify { MASTER_IP; };
Когда серийный номер на главном устройстве изменяется, он немедленно уведомляет подчиненное. Другими словами, notify
по умолчанию включен. НО, как работает notify, мастер смотрит на NS records
этого конкретного домена в файле зоны и уведомляет серверы, перечисленные в записи NS, за исключением себя. В вашем случае я не вижу, чтобы имя хоста подчиненного сервера было указано как запись NS в файле зоны db.root.example.com. Следовательно, ведомое устройство связывается с мастером, указанным в файле конфигурации ведомого устройства - masters { 192.168.0.2; };
с интервалом обновления 1 час. Поэтому обновление занимает много времени.
Решение - добавьте запись NS для ведомого устройства, а также укажите его IP-адрес как запись A. Типичная настройка выглядит следующим образом -
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
ns1 IN A 192.168.1.1
ns2 IN A 192.168.1.2
Первая и третья строки - для мастера. Вторая и четвертая строки для ведомого.