Разделение домена между частным и публичным DNS-сервером BIND

Вопрос или проблема

У меня есть домен (foo.com в этом примере), который в настоящее время имеет публичный DNS-сервер (namecheap), на котором есть записи для www.foo.com и связанных с ним MX-записей.

Я хотел бы иметь частный DNS, который будет обрабатывать мои внутренние серверы для внутренних пользователей (wiki.foo.com, postgres.foo.com и т.д.) и перенаправлять любые другие запросы на публичный DNS. Внешние пользователи в интернете не будут взаимодействовать с частным DNS и будут продолжать работать как обычно.

На данный момент мой внутренний DNS разрешает частные подсети (wiki и т.д.), но не разрешает публичные (www). Похоже, что bind не любит делить зону между двумя серверами, если я не упускаю что-то важное.

У меня есть конфигурация named.conf и файлы зон ниже, а также рисунок того, что я хотел бы достичь, если я не описал свои цели достаточно ясно.

Есть ли способ сделать то, что я хочу, или я смотрю на это под неправильным углом?

введите описание изображения здесь

named.conf

options {

        listen-on port 53 {
                127.0.0.1;
                10.0.2.81;
        };

        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";

        allow-query { localhost; 10.0.1.0/24; 10.0.2.0/24; };
        allow-query-cache { localhost; 10.0.1.0/24; 10.0.2.0/24; };  

        recursion yes;

        dnssec-validation auto;

        forwarders {
            1.1.1.1; // Cloudflare    
            1.0.0.1; // Cloudflare  
            8.8.8.8; // Google     
            8.8.4.4; // Google 
        };
        forward first;

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";

        /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
        include "/etc/crypto-policies/back-ends/bind.config";

};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
 channel query_log {
        file "data/named_query.log" versions 3 size 5m;
        severity info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
    category queries { query_log; };

};

zone "foo.com" IN {
    type master;
    file "/var/named/foo.com.zone";

};
zone "." IN {
       type hint;
       file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Файл зоны

$TTL 86400
@    IN    SOA   ns1.foo.com. admin.foo.com. (
            2023122001 ; Серийный номер (ГГГГММДДNN)
            3600       ; Обновление
            1800       ; Повторная попытка
            1209600    ; Истечение
            86400 )    ; Минимальное TTL

     IN    NS    ns1.foo.com.

; Определите запись A для внутреннего DNS-сервера
ns1      IN    A     10.0.2.81

; Внутренние записи A для разрешения внутреннего DNS
system    IN    A     10.0.1.32
xmpp      IN    A     10.0.1.24

Внутренний сервер имен считает себя авторитетным для example.com, что приводит к тому, что он не выполняет рекурсию для этого домена. Рекомендуется использовать поддомен (например, internal.example.com или int.example.com) для внутренних ресурсов. Если внутренний сервер имен является авторитетным только для поддомена, это не будет мешать другим записям в родительской зоне.

Если вы не используете поддомен, вам придется добавить все внешние записи в внутреннюю зону и поддерживать их в актуальном состоянии.

Ответ или решение

Разделение домена между частным и публичным DNS-сервером BIND: детальный анализ и решение

Ваша цель — эффективно управлять DNS-запросами для домена foo.com, разделив управление записями на частный и публичный DNS-сервера. В результате вы хотите, чтобы внутренние пользователи могли обращаться к внутренним ресурсам (таким как wiki.foo.com, postgres.foo.com) через частный DNS-сервер, при этом внешние пользователи продолжали пользоваться существующими записями публичного DNS-сервера, обеспечивающего доступ к www.foo.com и связанным MX-записям.

Основные Проблемы

Ваша текущее решение вызывает некоторые сложности, поскольку внутренний сервер считает себя авторитетным для foo.com, что мешает ему выполнять рекурсивные запросы для публичного DNS. Это часто приводит к путанице в конфигурации и требует переосмысления.

Рекомендации по Решению

1. Создание Поддомена для Внутренних Ресурсов

Вместо того чтобы использовать домен foo.com для внутренних ресурсов, рекомендуется создать отдельный поддомен, например internal.foo.com или int.foo.com. Это обеспечит разделение между внутренними и внешними ресурсами, избавляя вас от необходимости поддерживать полную запись всех внешних ресурсов на вашем частном DNS:

  • Преимущества:
    • Облегчает администрирование, поскольку вам не нужно обновлять внутренние записи при изменениях во внешних.
    • Исключает конфликты имен и гарантирует, что внутренний DNS может выполнять рекурсивные запросы для foo.com.

2. Настройка Конфигурации BIND

a. Измените файл named.conf

Вы можете настроить ваш конфигурационный файл, добавив поддомен, чтобы различать внутренние и внешние ресурсы:

zone "internal.foo.com" IN {
    type master;
    file "/var/named/internal.foo.com.zone";
};

b. Создание нового файла зоны для поддомена

Создайте новый файл зоны /var/named/internal.foo.com.zone, добавив необходимые записи:

$TTL 86400
@    IN    SOA   ns1.internal.foo.com. admin.internal.foo.com. (
            2023122001 ; Serial (YYYYMMDDNN)
            3600       ; Refresh
            1800       ; Retry
            1209600    ; Expire
            86400 )    ; Minimum TTL

     IN    NS    ns1.internal.foo.com.

; Записи для внутренних ресурсов
system    IN    A     10.0.1.32
xmpp      IN    A     10.0.1.24

3. Конфигурация Рекурсии и Пересылки

Вам также нужно убедиться, что ваш внутренний DNS-сервер настроен на использование рекурсии для всех запросов к основному домену foo.com. Убедитесь, что ваш параметр forward настроен на first, чтобы он сначала проверял локальные записи, а затем перенаправлял запросы к публичным DNS-серверам:

forward first;

4. Примеры и Тестирование

После настройки введите примеры запросов в вашем командном терминале:

nslookup wiki.internal.foo.com
nslookup www.foo.com

Проверьте, что запросы к wiki.internal.foo.com разрешаются через частный DNS, в то время как запросы к www.foo.com успешно обрабатываются через публичные DNS.

Заключение

Следуя этим рекомендациям, вы сможете успешно разделить управление доменами между частным и публичным DNS-серверами. Это решение облегчит вашу администрирование и повысит гибкость управления DNS-записями. Вы получите качество и надежность, необходимые как для внутреннего, так и для внешнего разрешения имен.

Если у вас возникнут вопросы или вам потребуется помощь с реализацией, не стесняйтесь обращаться за дополнительной информацией.

Оцените материал
Добавить комментарий

Капча загружается...