Dnsmasq указывает несуществующие поддомены на локальный IP

Да, проблема (по крайней мере, в моем случае), казалось, заключалась в двух вещах:

  • ведущий ./ нужно было удалить; rsync ожидает, что исключаемые объекты будут указаны либо в абсолютном порядке, либо относительно исходного каталога.
  • буквальные имена файлов должны быть экранированы в соответствии с синтаксисом регулярных выражений, чтобы rsync не пытался интерпретировать их как выражение.

И да, я получил кучу пустых каталогов, но сценарий для удаления пустых каталогов - это приключение для другого времени.

1
17.07.2016, 23:01
3 ответа

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

Обычно этому можно противодействовать, используя различные восходящие DNS-серверы, такие как OpenDNS ( server = 208.67.222.222 и server = 208.67.220.220 ) или Google ( сервер = 8.8.8.8 и сервер = 8.8.4.4 ). Если вам нужны серверы вашего интернет-провайдера для обслуживания клиентов, вы можете использовать их только в определенном домене ( server = / myisp.com / 203.0.113.1 ).

При этом в вашем случае проблема в том, что ваша конфигурация не выполняет то, что вы хотите.

Как я могу запретить DNSMasq преобразовывать несуществующие поддомены в локальный IP-адрес.

Не заявляя, что домен существует. Dnsmasq не заменяет IP-адрес несуществующими доменами.

Как я могу указать DNSMasq всегда использовать внешний DNS для определенной записи.

Не объявляя значение для этого имени хоста или подстановочный знак, включающий это имя хоста.

Проблема в вашей конфигурации - строка

 address = / home.com / 192.168.1.210 
 

Это подстановочный знак: он объявляет, что 192.168.1.210 является адрес home.com и все имена хостов в этом домене. Вам не нужен этот подстановочный знак, поэтому удалите его.

Вместо этого объявите home.com и любой отдельный домен home.com как имена хостов , а не как подстановочные знаки, указав их в / etc / hosts . Удалите строку no-hosts - вы хотите объявить определенные хосты, значит, она вам нужна! Или, если вы предпочитаете не использовать / etc / hosts , оставьте эту строку и добавьте строку, указывающую на другой файл, объявленный с помощью addn-hosts = / path / to / hosts-file . Или, если вы хотите сохранить все это внутри dnsmasq.conf , замените эту строку на host-record = home.com, 192.168.1.210

Если вы хотите иметь подстановочный знак с исключениями (вернуть 192.168.1.210 для всех xxx.home.com , кроме mymachine.home.com , или всегда запрашивать вышестоящие серверы и заменять 192.168.1.210 только на отрицательные ответы), я не думаю, что dnsmasq может это сделать.

3
27.01.2020, 23:19

У меня была запись для моего домена

address = / domain.com / 192.168.1.7 (мой обратный прокси-сервер NginX)

Из-за этого все несуществующие поддомены, такие как acoimasdin.domain.com, преобразовывались в 192.169.1.7.

Поскольку у меня уже есть все настройки для перенаправления domain.com на www.domain.com в apache, я сделал запись

address=/www.domain.com/192.168.1.7

Теперь мой удаленный DNS субдомена перенаправляется на Google DNS, как и должно, а не -существующий DNS возвращается как «хост не существует», что именно то, что я хотел!

По сути, у меня не может быть запись нижнего / верхнего (не уверен, что это правильный термин) уровня, которая является domain.com, или все несуществующие записи DNS будут использовать эту запись DNS.

0
27.01.2020, 23:19

Просто чтобы подробнее рассказать о правильном ответе Жиля:

Из справочной страницы TheKelleys.org DNSMasq

-A, --address=/<domain>/[domain/][<ipaddr>]

Укажите возвращаемый IP-адрес для любого хоста в данные домены. Запросы в доменах никогда не пересылаются и всегда отвечают с указанным IP-адресом, который может быть IPv4 или IPv6. Чтобы указать для домена адреса IPv4 и IPv6, используйте повторяющиеся флаги -A. Обратите внимание, что / etc / hosts и аренда DHCP переопределяют это для отдельных имен. Обычно это используется для перенаправления всего домена doubleclick.net на некоторый дружественный локальный веб-сервер, чтобы избежать рекламных баннеров. Спецификация домена работает так же, как и для --server, с дополнительной возможностью, что / # / соответствует любому домену. Таким образом, --address = / # / 1.2.3.4 всегда будет возвращать 1.2.3.4 для любого запроса, на который не был дан ответ от / etc / hosts или DHCP и который не был отправлен на вышестоящий сервер имен более конкретной директивой --server. . Что касается --server, один или несколько доменов без адреса возвращают ответ без такого домена, поэтому --address = / example.com / эквивалентен --server = / example.com / и возвращает, например, NXDOMAIN. com и все его поддомены.

--host-record=<name>[,<name>....],[<IPv4-address>],[<IPv6-address>][,<TTL>]

Добавить записи A, AAAA и PTR в DNS. Это добавляет одно или несколько имен в DNS с соответствующими записями IPv4 (A) и IPv6 (AAAA). Имя может появиться более чем в одной записи хоста, и поэтому ему может быть назначено более одного адреса. Только первый адрес создает запись PTR, связывающую адрес с именем. Это то же правило, что и при чтении hosts-файлов. Параметры host-record считаются считанными до host-файлов, поэтому появившееся там имя запрещает создание PTR-записи, если оно также присутствует в hosts-файле. В отличие от файлов-хостов, имена не раскрываются, даже если действует расширение-хосты. Короткие и длинные имена могут появляться в одной и той же записи хоста, например. --host-record = laptop, laptop.thekelleys.org, 192.168.0.1,1234 :: 100 Если задано время жизни, оно отменяет значение по умолчанию, равное нулю или значению - -local-ttl. Значение представляет собой положительное целое число и дает время жизни в секундах.

1
27.01.2020, 23:19

Теги

Похожие вопросы