У меня либо возникли проблемы с пониманием того, как работает DNS, либо у меня возникли проблемы с правильной настройкой DNS (либо один из них не подходит). Я сейчас работаю с доменом, назову его webdomain.com, и мне нужно разрешить всем нашим внутренним пользователям выйти в точку доступа, чтобы получить наши общедоступные записи DNS, как и остальной мир. Затем, вдобавок ко всему, я хочу иметь возможность предоставить всего несколько записей переопределения DNS для тестирования серверов и оборудования, которые не доступны публично. Например:
external.webdomain.com - также должен получить это от dotster
test.webdomain.com - должен получить это от моего внутреннего контроллера 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, но я не знаю шагов.