Назад | Перейти на главную страницу

Внутренний и внешний DNS с разных серверов в одной зоне

У меня либо возникли проблемы с пониманием того, как работает DNS, либо у меня возникли проблемы с правильной настройкой DNS (либо один из них не подходит). Я сейчас работаю с доменом, назову его webdomain.com, и мне нужно разрешить всем нашим внутренним пользователям выйти в точку доступа, чтобы получить наши общедоступные записи DNS, как и остальной мир. Затем, вдобавок ко всему, я хочу иметь возможность предоставить всего несколько записей переопределения DNS для тестирования серверов и оборудования, которые не доступны публично. Например:

Проблема, с которой я сталкиваюсь на каждом шагу, заключается в том, что если у меня есть внутренний DNS-контроллер, содержащий зону для webdomain.com, тогда я жестяная банка получить мои указанные внутренние записи, но никогда получить что-нибудь с общедоступного DNS-сервера. Это справедливо независимо от типа DNS-сервера, который я также использую - я пробовал и Linux Bind9, и контроллер домена Windows 2008.

Думаю, мой большой вопрос: неразумно ли я думать, что система должна иметь возможность проверять мой указанный внутренний DNS, и в случае, когда запрошенная запись не существует, она должна переключиться на указанный общедоступный DNS-сервер -ИЛИ- разве это не так, как работает DNS, и я потерялся в соусе?

Похоже, это должно быть так же просто, как указать моему внутреннему DNS-серверу пересылать любые запросы, которые он не может выполнить, на dotster, но это, похоже, не работает. Может быть, проблема в брандмауэре?

заранее спасибо

РАСШИРЕННЫЙ

Итак, я провел кучу исследований и занимался этим несколько часов. У меня это есть в моем named.conf, и я все еще вижу тот же результат. Внутренние вызовы подаются, но все внешние (в домене, контролируемом зоной) просто сбрасываются. Любая помощь была бы замечательной! Кроме того, это ОС Ubuntu 9.04, с которой я работаю.

Code removed because it was wrong.

ПРАВИЛЬНЫЙ СПОСОБ - ДОБАВЛЯЕТСЯ ПОСЛЕ ЗАКРЫТИЯ ВОПРОСА

Что ж, спасибо ребятам из serverfault, теперь у меня это отлично работает на моем сервере и в гораздо более сжатой форме. Вот как это сделать. При базовой установке bind9 отредактируйте файл named.conf.local и добавьте зону для КАЖДОГО поддомена, который вы хотите перенаправить:

/etc/bind/ named.conf

// WEBDOMAIN.COM ENTRIES
    zone "test.webdomain.com" {
            type master;
            file "/etc/bind/zones/test.webdomain.com";
    };

    zone "alpha.webdomain.com" {
            type master;
            file "/etc/bind/zones/alpha.webdomain.com";
    };

    zone "beta.webdomain.com" {
            type master;
            file "/etc/bind/zones/beta.webdomain.com";
    };

// INTERNETSITE.COM ENTRIES
    zone "internal.internetsite.com" {
            type master;
            file "/etc/bind/zones/internal.internetsite.com";
    };

    zone "dev.internetsite.com" {
            type master;
            file "/etc/bind/zones/dev.internetsite.com";
    };

Отредактируйте файл /etc/bind/ named.conf.options и добавьте в нужное место всех серверов пересылки, которые вы хотите использовать:

/etc/bind/ named.conf.options

options {
        directory "/var/cache/bind";

        forwarders {
                208.67.222.222;
                208.67.220.220;
                8.8.8.8;
                8.8.4.4;
        };

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

Создайте новую папку с именем зоны в / etc / bind / zone / и добавьте новый файл для КАЖДОЙ из зон, которые вы создали выше, которые соответствуют атрибуту «файл» выше. На примере test.webdomain.com:

/etc/bind/zones/test.webdomain.com

$TTL    604800
@       IN      SOA     test.webdomain.com. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@                       IN      NS      test.webdomain.com.
test.webdomain.com.    IN      A       10.0.1.20

Где 10.0.1.20 - это IP-адрес записи A, на который вы хотите пересылать этот (под) домен. Таким образом, запись для test.webdomain.com является авторитетной только для субдомена, а глобальный DNS будет предоставлять любые другие субдомены или корневые домены, как обычно.

Что вам нужно сделать, так это создать зону DNS для test.webdomain.com на вашем внутреннем DNS-сервере. Таким образом, DNS webdomain.com не размещается на вашем внутреннем сервере, а размещается на dotster.

Когда кто-то запрашивает www.webdomain.com, запрос будет перенаправлен на dotster для поиска (поскольку ваш локальный DNS-сервер не является авторитетным для этой зоны), а запросы для testing.webdomain.com будут обрабатываться вашим внутренним DNS-сервером. .

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

Другие записи SF, которые могут быть интересны:


У меня есть время только сегодня просмотреть ваш расширенный пост, так что вот первый взгляд:

options {                                       
    directory "/etc/bind";                   
    listen-on {          // why are these lines needed?
            10.0.1.5;    // the way it is set up, only your loopback
            127.0.0.1;   // and your LAN clients will be able to
                         // get answers; the outside world can't see boo
                         // because there's no interface/port pair
                         // to contact. I would just get rid of this and
              };         // not worry about what interfaces are being bound to
    // BTW, that listen-on line is why your outside queries are failing.
    auth-nxdomain no;                      
    allow-query { any; };                   
    recursion no;                          
    version "0";                           
};

Кроме того, заявление внешних совпадений-клиентов

view "external" {
    match-clients { !localnets; any; };

можно превратить в

view "external" {
    match-clients { any; };

потому что когда вы добавляете в match-clients, уже предполагается, что для начала не с чем сопоставить; отрицание ACL действительно мало что добавит (потому что он никогда не «существовал» в этом представлении с самого начала, поэтому нет причин отменять его).

Я уверен, что, наверное, кое-что упустил, но это самые очевидные виновники.

Кажется, ваше определение зоны неверно. Он пропускает IP-адрес для сервера имен, объявленного как «webdomain.com».

Предлагаю вам изменить определение зоны как

$TTL    604800
@       IN      SOA     webdomain.com. email.webdomain.com. (
                              4         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      webdomain.com.
webdomain.com.  IN A 10.0.1.5
test    IN      A       10.0.1.20

затем перезапустите сервер (например, /etc/init.d/bind9 restart).

Так как зона не может быть загружена, из-за ошибки не удалось разрешить домен.

На вашем DNS-сервере Windows настройте новый ЗОНА для test.webdomain.com. Когда вы добавляете первый хост, оставьте поле имени пустым и введите IP-адрес, который вы хотите разрешить внутренним пользователям.

Этот сервер будет авторитетным для этой зоны, поэтому любые запросы будут направляться на этот IP-адрес, поэтому он не будет конфликтовать с вашим внешним разрешением.

Я использую это на всех своих сайтах для mail.corpdns.com (потому что пользователи никогда не забывают использовать внутреннее имя сервера при попытке доступа к веб-почте и т. Д.).

Я подозреваю, что это можно сделать и в Linux / Bind, но я не знаю шагов.