Сейчас у меня есть следующая строка в 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-адресов некоторых (указанных) доменных имен?
решение1
Вы можете сделать это, используя 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=[/[<домен>]/[домен/]][<ipaddr>[#<порт>][@<источник>[#<порт>]]]
Укажите 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 с повторением частей домена или ipaddr по мере необходимости.
Также разрешен флаг -S, который указывает домен, но не IP-адрес; это сообщает dnsmasq, что домен является локальным и может отвечать на запросы из /etc/hosts или DHCP, но никогда не должен пересылать запросы в этом домене на какие-либо вышестоящие серверы. local — это синоним server, что делает файлы конфигурации более понятными в этом случае.
Необязательный второй IP-адрес после символа @ сообщает dnsmasq, как задать исходный адрес запросов к этому серверу имен. Это должен быть адрес, принадлежащий машине, на которой запущен dnsmasq, в противном случае эта строка сервера будет зарегистрирована и проигнорирована. Флаг query-port игнорируется для любых серверов, у которых указан исходный адрес, но порт может быть указан непосредственно как часть исходного адреса.