Как заставить dnsmasq использовать вышестоящий DNS-сервер только для некоторых указанных доменных имен?

16

Прямо сейчас у меня есть следующая строка в dnsmasq.conf, которая хорошо обрабатывает все запросы ( /#/соответствует любому домену; это необходимо):

address=/#/127.0.0.1

Тем не менее, есть некоторые домены, которые необходимо разрешить в IP-адреса, отличные от 127.0.0.1.

В качестве временного решения они были добавлены в /etc/hosts:

209.85.148.95   ajax.googleapis.com
207.97.227.245  underscorejs.org
72.21.194.31    s3.amazonaws.com

К сожалению, это очень временное решение: оно перестанет работать, как только изменится IP-адрес любого целевого домена.

Мой вопрос: как заставить dnsmasq использовать вышестоящий DNS-сервер для разрешения IP-адресов некоторых (указанных) доменных имен?

nrph
источник

Ответы:

29

Вы можете сделать это с помощью server=директивы, например:

server=/ajax.googleapis.com/8.8.8.8

будет запрашивать публичный DNS-сервер Google для домена ajax.googleapis.com, аналогично

server=/amazonaws.com/209.244.0.3

будет запрашивать общедоступный DNS-сервер Level3 для домена amazonaws.com.

Вы можете сгруппировать несколько доменов вместе

server=/co.uk/com/8.8.4.4

Отправил бы домены .co.uk и .com на DNS-сервер в 8.8.4.4

Вы также можете иметь несколько server=директив

−S, --server = [/ [<domain>] / [domain /]] [<ipaddr> [# <порт>] [@ <source> [# <порт>]]]

Укажите IP-адрес вышестоящих серверов напрямую. Установка этого флага не запрещает чтение /etc/resolv.conf, используйте -R для этого. Если указан один или несколько необязательных доменов, этот сервер используется только для этих доменов, и они запрашиваются только с использованием указанного сервера. Это предназначено для частных серверов имен: если в вашей сети есть сервер имен, который работает с именами в форме xxx.internal.thekelleys.org.uk по адресу 192.168.1.1, то с флагом -S /internal.thekelleys.org.uk/ 192.168.1.1 отправит все запросы на внутренние машины этому серверу имен, все остальное отправится на серверы в /etc/resolv.conf. Пустая спецификация домена, // имеет специальное значение «только неквалифицированные имена», то есть имена без каких-либо точек в них. Нестандартный порт может быть указан как часть IP-адреса с помощью символа #.

Также разрешен флаг -S, который дает домен, но не имеет IP-адреса; это говорит dnsmasq, что домен является локальным, и он может отвечать на запросы из / etc / hosts или DHCP, но никогда не должен пересылать запросы этого домена на любые вышестоящие серверы. local - это синоним сервера, чтобы в этом случае файлы конфигурации были более понятными.

Необязательный второй IP-адрес после символа @ указывает dnsmasq, как установить исходный адрес запросов для этого сервера имен. Это должен быть адрес, принадлежащий машине, на которой работает dnsmasq, в противном случае эта строка сервера будет зарегистрирована, а затем проигнорирована. Флаг порта запроса игнорируется для любых серверов, для которых указан адрес источника, но порт может быть указан непосредственно как часть адреса источника.

user9517
источник
Я не думаю, что ему нужно несколько serverстрок: независимо от того, какие адреса он хочет решить (127.0.0.1), он может добавить их в виде addressстрок; что-нибудь еще, DNSMasq будет запрашивать server. Уверен, что так настроена моя.
gravyface
1
@gravyace: я прочитал вопрос как желающий разрешить все до 127.0.0.1 с некоторыми исключениями, которые он хочет использовать для разрешения DNS в случае изменения адреса. Как мне кажется, способ сделать это - использовать директивы сервера.
user9517
Ох, может быть. Кто знает. В любом случае, это должно его заставить.
gravyface
Работает как шарм!
nrph