Я пытаюсь настроить, так или иначе, "лежачий" DNS-сервер.

Я имею в виду: DNS-сервер, который действует как DNS-кэш (ведомый) для существующего сервера, но имеет свое собственное подмножество регистров для нескольких доменных имен.

Желаемое поведение, например:

  • Когда запрашивается "host.domain.com". Если у него есть запись для него в его собственной базе данных, тогда ответьте с этим.

  • Если его нет в базе данных, то спросите его у мастера (и при желании кешируйте этот ответ).

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

Конечно, это сложная настройка, я знаю, но она имеет полезную цель:

Представьте, что у вас есть сложные сервисы (например, конфигурация резервного копирования Bacula и сценарии в моем случае), и вы хотите протестировать их на реальных производственных серверах, прежде чем запускать их в реальное производство.

Если бы я мог просто временно перенаправить DNS на этот "лежачий" DNS таким образом, чтобы все имена были разрешены как обычно, за исключением нескольких подмножеств "маскированных" хостов, он будет вести себя просто как "настоящая" установка, но без реального испорчения реального резервного копирования хранение серверов с тестированием резервных копий.

Конечно, я мог бы использовать список записей в /etc/hosts, но он требует больше настроек и более подвержен ошибкам (у меня есть полностью автоматизированные среды тестирования с Vagrant, но IP-адреса могут меняться несколько раз).

Клонирование сервера и использование его для выполнения теста также требует больше работы и ресурсов и, опять же, более подвержено ошибкам, потому что после тестов мне нужно будет перенастроить реальный сервер вручную, в то время как при подходе "лежачий днс" Мне просто нужно восстановить оригинальный файл resolv.conf.

Я успешно настроил главный DNS-сервер для нашего домена, и он правильно разрешает свои собственные записи и запросы к другим доменам, но не знает о данных реальных серверов домена.

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

2 ответа2

1

Bind, и несколько других реализаций DNS-сервера поддерживают так называемую зону политики ответа. Эта зона позволяет вам переопределять определенные записи.

Вот пример того, как вы используете эту функцию, чтобы включить безопасный поиск Google. Это переопределяет записи google.com, www.google.com и google.ca.

named.conf

options {
    ...
    response-policy { zone "rpz"; };
};

zone "rpz" IN {
        type master;
        file "rpdb.zone";
        allow-query {none;};
};

rpdb.zone

$TTL 10800
@ IN SOA localhost. hostmaster.example.org. (
        2014110500;
        10800;
        3600;
        604800;
        10800 )

        IN      NS      localhost.

; Google forced Safe Search
google.com      IN CNAME forcesafesearch.google.com.
www.google.com  IN CNAME forcesafesearch.google.com.
google.ca       IN CNAME forcesafesearch.google.com.

Зоны политики реагирования довольно гибки в своих возможностях. Их можно использовать для создания брандмауэра DNS и других вещей.

0

Частичный ответ (он работает для моей установки, но он не такой общий, как мой первоначальный вопрос):

В моем случае мне просто нужно переопределить адреса определенного субдомена, в частности bacula.ourDomain.com.

Как я уже сказал, я успешно настроил bind как master для bacula.ourDomain.com, но я не смог разрешить другой хост нашегоDomain.com.

Теперь я просто добавил это:

options {
  [...]
  forwarders {<real_ns_ip>;};
  [...]
}

Таким образом, мой сервер разрешает для bacula.ourDomain.com, но для остальной части нашегоDomain.com просит <real_ns_ip>.

Как я уже сказал, это не универсальное решение, потому что оно не позволяет выбирать только определенные адреса домена, но в настоящее время этого достаточно для моих целей.

@Zoredache, вероятно, было бы лучшим решением, но мне пока не удалось применить его на практике.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .