
Я настроил зону в своей 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; };
};
Как видите, подчиненное устройство должно быть доступно главному устройству, поскольку его адрес настроен статически.