У меня простая установка с Debian в качестве гостя в Virtualbox. Я установил пакет resolvconf
. Файл resolv.conf такой:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
nameserver 10.3.x.x
nameserver 10.219.x.x
Я добавил серверы имен через графический интерфейс (Приложения/Системные инструменты/Сетевые инструменты).
8.8.8.8 — это DNS Google, и я хочу использовать его для разрешения интернет-адресов. 10.3.xx и 10.219.xx нужны для разрешения внутренних доменов, таких как teleportal.company.intra.
Когда у меня есть эти серверы имен в resolv.conf (и 8.8.8.8 является первым), я получаю ошибку при запросе внутреннего адреса:
> host teleportal.company.intra
Host teleportal.company.intra not found: 3(NXDOMAIN)
Однако если я явно укажу nameserver
адрес второго в качестве сервера имен для nslookup, то это сработает:
» nslookup teleportal.company.intra 10.3.x.x
Server: 10.3.x.x
Address: 10.3.x.x#53
teleportal.company.intra canonical name = proxy.dummy1.dummy2.private.
Name: proxy.dummy1.dummy2.private
Address: 172.27.x.x
Name: proxy.dummy1.dummy2.private
Address: 172.27.x.x
В документации resolv.conf указано, что nameserver
записи будут опробованы по порядку, если одна из них не может разрешить запрос. Однако если я включаю отладку при использовании, nslookup
я вижу, что nslookup
она даже не пробует другие записи, только первую.
Если я изменю порядок nameservers
, то внутренние адреса будут разрешены правильно (nslookup по-прежнему будет использовать только первую запись).
Как настроить 3 сервера имен, чтобы утилиты использовали их все по порядку?
решение1
Список resolv.conf
серверов имен подключается один за другим только в случае тайм-аута. Не тогда, когда один сервер имен авторитетно заявляет "такого домена нет" ( NXDOMAIN
). В вашем случае DNS, 8.8.8.8
по-видимому, не знает об этом, teleportal.company.intra
и резолвер остановился, когда получил NXDOMAIN
.
Если возможно, вам следует настроить один DNS-сервер и использовать его для всех ваших разрешений, а DNS-серверу следует решить, как разрешить имя. Если 10.3.x.x
это ваш интрасетевой DNS-сервер, он, скорее всего, сможет разрешать и имена хостов в Интернете.
Тем не менее, если вы действительно хотите ретранслировать запросы на разные DNS-серверы на основе имен, вы можете попробоватьпднсд. Это кэширующая программа DNS-прокси, которую можно запустить локально. Установите ее ( apt-get install pdnsd
) и добавьте свой localhost ( 127.0.0.1
) в resolv.conf. В pdnsd.conf
файле конфигурации вы можете указать, к каким DNS-серверам следует обращаться на основе сопоставления имен. Пример абзаца для вашего /etc/pdnsd.conf
:
server {
label= "google";
exclude = ".company.intra";
ip = 8.8.8.8;
}
server {
label= "intra";
include = ".company.intra";
ip = 10.3.x.x;
}
Я вырезал много других параметров из файла выше. Вам следует следовать документации и примеру файла конфигурации, который поставляется с пакетом Debian, чтобы настроить ваш pdnsd.conf
.
решение2
ядуматьчто резолвер возвращается к вторичному (или третичному или ...) DNSтолько если первое (или второе или ...) не удается.
В этом случае запросне подводит, он правильно возвращает NXDOMAIN
, т.е. доменное имя не существует.
Если вы действительно хотите использовать DNS Google (или любой другой DNS) для разрешения внешних доменов (вместо ваших внутренних серверов имен), вы можете настроить свои серверы 10.3.x.x
так, 10.219.x.x
чтобы они были authoritative
только для ваших внутренних имен и перенаправляли все остальные запросы на внешний DNS, а затем использовать ваши внутренние серверы имен в качестветолькосерверы имен на ваших внутренних компьютерах.