bind9: как запросить внешние серверы имен в конфигурации локальной зоны

bind9: как запросить внешние серверы имен в конфигурации локальной зоны

Я настроил зону в своей bind9установке. Предполагается, что это будет публичный сервер имен, которым я управляю через скрипт python для поддоменов dyndns. Но мой основной веб-сайт размещен третьей стороной где-то в другом месте, и в ближайшем будущем я хочу разместить их локально. Сейчас я хочу, чтобы bind9 искал в локальной базе данных разрешение имен и в случае сбоя перенаправлял на внешний DNS (или извлекал с него). Вот моя конфигурация, но она не работает для внешних запросов (example.com и www.example.com).

$ cat /etc/bind/named.conf.local
include "/etc/bind/zones.rfc1918";
zone "example.com" {
    type master;
    file "/etc/bind/zones/db.example.com";
    allow-transfer { any; };
    update-policy local;
};

$ cat /etc/bind/zones/db.example.com
$ORIGIN .
$TTL 172800     ; 2 days
example.com               IN SOA  ns1.example.com. hostmaster.example.com. (
                          116        ; serial
                          7200       ; refresh (2 hours)
                          900        ; retry (15 minutes)
                          1857600    ; expire (3 weeks 12 hours)
                          8400       ; minimum (2 hours 20 minutes)
                          )
                    NS      ns1.example.com.
                    NS      ns1.external-host.com.
                    NS      ns2.external-host.com.
ns1.external-host.com      A       1.2.3.1
ns2.external-host.com      A       1.2.3.2

$ORIGIN example.com.
ns1                     A       1.1.1.1
@            IN         NS      ns1.external-host.com.
@            IN         NS      ns2.external-host.com.
www            IN         NS      ns1.external-host.com.
www           IN         NS      ns2.external-host.com.
clients                 A       1.1.1.1
$ORIGIN clients.example.com.
$TTL 3600       ; 1 hour
test                    A       2.2.2.2

решение1

Я думаю, это невозможно, потому что один из ваших серверов имен локальный (недоступен с другого). Технически, вы можете попробовать пересылку или вариант с несколькими мастерами. Но это не лучший способ для небольшой установки, даже если он работает.

DNS основан на информации о том, какой сервер является мастером зоны — это устанавливается по типу. Зона masterотвечает за текущую информацию, и поэтому должна быть только одна (так как могут быть различия между экземплярами). Зоны slaveзнают мастера и могут напрямую запрашивать у него всю зону. Если мастер знает также своих подчиненных, он также может передать всю зону. Вот что вам следует сделать.

Оставьте публичный сервер имен там, где он есть, и сделайте его главным. В локальной среде установите вторую привязку и добавьте зону как подчиненную. Также добавьте подчиненную к главному, чтобы работало автоматическое обновление. Для доказательства посмотрите в логи обоих, там должны быть сделаны запросы AXFR или IXFR.

Таким образом, определения ваших зон могут выглядеть следующим образом, предполагая, что главный — 1.2.3.4, а подчиненный — 5.6.7.8:

владелец:

zone "example.com" {
    type master;
    file "/etc/bind/zones/db.example.com";
    also-notify { 5.6.7.8; };
    notify yes;
};

раб:

zone "example.com" {
    type slave;
    file "/etc/bind/zones/db.example.com"; // this is the file updated.
    allow-notify { 1.2.3.4; };
    allow-transfer { 1.2.3.4; };
};

Как видите, подчиненное устройство должно быть доступно главному устройству, поскольку его адрес настроен статически.

Связанный контент