У меня есть приложение на Linux, которое использует обратный поиск для разрешения имен хостов. Проблема в том, что у меня в файле resolve.conf есть два набора DNS-серверов (всего 4 сервера), каждый из которых соответствует разному диапазону IP-адресов. Он отлично работает для одного диапазона IP-адресов, в зависимости от того, какой из них находится на первом сервере в списке, но если я попытаюсь выполнить nslookup для другого диапазона, он сообщает, что не найдено: 3 (NXDOMAIN). Если он просто попробует следующий сервер в списке, все будет успешно ... есть ли способ заставить его это сделать? DNS-серверы являются полномочными только для своих соответствующих диапазонов.
Я бы установил dnsmasq, сделал его (127.0.0.1) единственным сервером имен и настроил его для запроса того или иного сервера для того или иного домена с помощью директивы «server» dnsmasq.conf.
Если есть способ попробовать другой сервер на NXDOMAIN с DNS-сервера, это будет использование локального DNS-сервера с этой функцией. Решатель Linux этого не позволяет. PowerDNS можно настроить для выполнения команд для каждого запроса, так что в крайнем случае вы всегда можете это сделать.
Ответ на @cstamas, просто чтобы прояснить, как решить проблему VPN с dnsmasq.
Допустим, ваш компьютер находится в домене homenetwork.test с IP-адресами 10.1.0.0/16 и DNS-сервером 10.1.0.1. Этот DNS-сервер может запрашивать только «внешние» доменные имена для домена worknetwork.test. Он является официальным (внутренним) для homenetwork.test и 1.10.in-addr.arp.
Теперь вы подключаетесь к VPN для присоединения к рабочей сети, и теперь у вас есть новый маршрут к 10.2.0.0/16 через этот интерфейс и новый DNS-сервер 10.2.0.1, который является полномочным для worknetwork.test и 2.10.in-addr.arpa . Если вы используете один или другой из этих серверов имен, вы сможете разрешить только один или другой из доменов worknetwork.test и homenetwork.test.
Если вы используете оба DNS-сервера (и RES_ROTATE), это не лучше, так как иногда вы сможете решить один или другой.
Теперь, если вы используете
dnsmasq --no-resolv --no-negcache --no-host --conf-file= \
--server=/worknetwork.test/10.2.0.1 \
--server=/2.10.in-addr.arpa/10.2.0.1 \
--server=10.1.0.1
И укажите «nameserver 127.0.0.1» в resolv.conf, вы будете использовать 10.2.0.1 для разрешения IP-адресов worknetwork.test и 10.2.x.x и ваш домашний DNS-сервер для остальных.
Вы рассказываете мало информации, поэтому трудно начать, но я постараюсь ...
Прежде всего, серверы, о которых вы говорите, являются авторитетными DNS-серверами (которые предоставляют информацию о зонах, которые вы настроили), верно? В таком случае вы должны настроить сервер в вашем resolv.conf, который является только рекурсивным (только разрешающее DNS-имя для вас, а не предоставление информации). Вы можете установить его для прослушивания на локальном хосте как щ сказал.
С другой стороны, если сервер возвращает nxdomain, это означает: «Я знаю это имя, я являюсь официальным сервером для него, и это имя не существует». На этом стандартный алгоритм разрешения DNS останавливается. Вот и все, пути нет. Вам следует настроить авторитетные DNS-серверы так, чтобы они не были авторитетными для этого имени.