Могу ли я настроить dnsmasq для использования / etc / hosts для разрешения цели CNAME?

432
Nick

Есть ли способ настроить 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в / и т.д. / хостов, когда он выдает аренду 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-адрес моего маршрутизатора исходному клиенту за маршрутизатором, а не host1частному IP-адресу из / 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, чтобы получить его?

1

0 ответов на вопрос