1

Есть ли способ настроить dnsmasq так, чтобы при получении записи CNAME, если цель находилась в /etc /hosts, она переопределяла все, что публичный DNS-сервер говорил об этой цели, и вместо этого использовала /etc /hosts?

Это вопрос, но если вы заинтересованы в полной информации и подробностях, читайте дальше.

подробности

У меня есть доменное имя, назовем его example.com . Я установил домен для моей домашней сети на philadelphia.example.com , и, таким образом, хостами внутри могут быть host1.philadelphia.example.com и host2.philadelphia.example.com . Я настроил разделенный DNS, чтобы эти имена работали как за NAT, так и в общедоступном Интернете.

Для удобства я хочу получить доступ к некоторым из них, например просто host1.example.com и т.д. (Без названия города). Я создал общедоступные записи CNAME для них. Это отлично работает через Интернет, но не за моим маршрутизатором.

Мой маршрутизатор (EdgeRouter Lite, для записи) использует dnsmasq в качестве своего DNS-сервера. Он автоматически добавляет записи для host1 и host1.philadelphia.example.com в /etc /hosts, когда выдает аренду DCHP, но не host1.example.com поскольку example.com не является его доменом. Соответственно, когда он получает запрос на host1.example.com , он перенаправляет его на общедоступный DNS.

Публичный DNS-сервер находит следующие записи и возвращает их:

host1.example.com.              3600    IN  CNAME   host1.philadelphia.example.com.
host1.philadelphia.example.com. 3600    IN  A       <Router's external IP>

На самом деле я не уверен, что общедоступный DNS-сервер отправляет запись A автоматически или dnsmasq выдает второй запрос. В любом случае dnsmasq берет слово общедоступного DNS-сервера и старательно возвращает общедоступный IP-адрес моего маршрутизатора исходному клиенту за маршрутизатором, а не частному IP-адресу host1 из /etc /hosts.

В качестве дополнительного теста я попытался создать запись CNAME для privatehost.example.com -> privatehost.philadelphia.example.com не создавая для него публичную запись A, но в моем маршрутизаторе есть запись для privatehost.philadelphia.example.com в /etc /hosts. В этом случае общедоступный DNS-сервер отвечает записью CNAME, а затем NXDOMAIN, когда не может найти ничего для privatehost.philadelphia.example.com . Даже до сих пор, Dnsmasq берет слово сервера и возвращает NXDOMAIN к клиенту, даже если у него есть запись для privatehost.philadelphia.example.com

Есть ли способ сказать dnsmasq, чтобы он снова попробовал свои собственные /etc /hosts после загрузки CNAME, даже если он должен был перейти к общедоступному DNS, чтобы получить его?

0