Назад | Перейти на главную страницу

Привязать ведомого медленно к обновлению зон

У меня есть два сервера 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

Первая и третья строки - для мастера. Вторая и четвертая строки для ведомого.