Конфигурация с разделенным DNS: невозможно обновить внешнюю зону из внутренней системы с помощью nsupdate
Я настроил один DNS-сервер с bind9 и конфигурацией split dns, чтобы все внутренние запросы для моего доменного имени получали внутренний IP-адрес, а все запросы извне моей сети получали официальный адрес (которые маршрутизируются через брандмауэр Cisco ASA). но в итоге дойдет до тех же систем).
Когда я использую nsupdate из своей внутренней сети, внутренняя зона обновляется. Аналогично, когда я запускаю nsupdate на внешней системе (с TSIG), внешняя зона обновляется.
Однако я бы предпочел обновить все данные DNS из внутренней сети. Кажется, проблема в том, что я могу определить несколько представлений для моего доменного имени, но bind9 идентифицирует зону для использования по IP-адресу клиента, согласно моему views.conf. Поэтому, когда это внутренний IP-адрес, внутренняя зона извлекается или обновляется, но невозможно обновить внешнюю зону из внутренней системы.
Я также попытался использовать два разных ключа TSIG в надежде, что bind9 сможет идентифицировать внешнюю зону по ключу, который тоже не работает:
Aug 26 11:04:22 s1006 named[13444]: client 10.1.1.6#39841: view internal: signer "external" denied
Aug 26 11:04:22 s1006 named[13444]: client 10.1.1.6#39841: view internal: update 'example.org/IN' denied
Вот соответствующие параметры конфигурации bind9:
view "internal" {
match-clients {
10.1.1.6;
};
recursion yes;
include "/etc/bind/named.conf.default-zones";
include "/etc/bind/zones/example.org-internal.conf";
};
view "external" {
match-clients {
10.1.1.3;
};
recursion no;
include "/etc/bind/named.conf.default-zones";
include "/etc/bind/zones/example.org-external.conf";
};
key internal {
algorithm hmac-md5;
secret "x2ZKW4SxbeySMK7PmV1Nng==";
};
key external {
algorithm hmac-md5;
secret "kiHB9BR6IeSmUUnp1QMCcA==";
};
zone "example.org" {
type master;
file "/var/cache/bind/example.org-internal/example.org";
notify yes;
allow-update {
key internal;
};
};
zone "example.org" {
type master;
file "/var/cache/bind/example.org-external/example.org";
notify yes;
allow-update {
key external;
};
};
Примечание: в целях тестирования представления настраиваются таким образом, чтобы все запросы из 10.1.1.3 были "внешними" и из 10.1.1.6 считались "внутренними".
Посоветуйте, пожалуйста, как настроить это так, чтобы я мог обновить внешнюю зону, запустив nsupdate на 10.1.1.6 вместо 10.1.1.3. Также, если вы думаете, что эта конкретная установка - действительно глупая идея, пожалуйста, дайте мне знать.
1 ответ
Я думаю, что лучшим решением будет просто использовать специальные ключи TSIG для доступа к различным представлениям.
Я знаю, что в вопросе упоминается об этом и говорится, что это не сработало, но это должно быть потому, что директивы сопоставления клиентов двух представлений не были обновлены должным образом.
Если предположить, что есть два ключа TSIG с именем
internal
и
external
для этой цели (похоже, в вопросе) представления должны быть обновлены в соответствии с этими строками:
view "internal" {
match-clients {
key "internal";
!key "external";
... # existing IP-based matching as it was
};
... # all the other stuff from the view as it was
};
и
view "external" {
match-clients {
key "external";
!key "internal";
... # existing IP-based matching as it was
};
... # all the other stuff from the view as it was
};
Таким образом, любые входящие сообщения (запросы / обновления), подписанные одним из этих двух ключей, всегда будут попадать в соответствующее представление, поскольку новые записи сопоставления на основе ключей перечисляются перед любым сопоставлением на основе IP и исчерпывают все возможные комбинации представлений / клавиш в отношении этих ключи.
(Технически в моем предлагаемом решении есть некоторая избыточность, поскольку порядок представлений также является фактором, который можно использовать для исключения некоторых комбинаций представления / клавиш, но я бы рекомендовал явно перечислить все комбинации независимо. Если бы вы переупорядочили представления, я бы не развалился, и я лично также нахожу более ясным, какова реальная цель.)
nsupdate
имеет local
подкоманда, которая позволяет вам выбрать адрес источника. Теоретически это позволит вам инициировать обновление внешнего представления из внутренней сети с использованием адреса внешнего источника. На практике ваша политика брандмауэра может предотвратить это.