Есть ли способ настроить 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, чтобы получить его?