Kann ich dnsmasq so konfigurieren, dass / etc / hosts verwendet wird, um das Ziel eines CNAME aufzulösen?

668
Nick

Gibt es eine Möglichkeit, dnsmasq so zu konfigurieren, dass beim Empfang eines CNAME-Datensatzes, wenn sich das Ziel in / etc / hosts befindet, das überschrieben wird, was der öffentliche DNS-Server sonst über dieses Ziel sagt, und stattdessen / etc / hosts verwendet?

Das ist die Frage, aber wenn Sie sich für den gesamten Hintergrund und die Details interessieren, lesen Sie weiter.

Einzelheiten

Ich habe einen Domainnamen, nennen wir ihn example.com. Ich habe die Domäne für mein Heimnetzwerk auf gesetzt philadelphia.example.comund daher könnten Hosts in host1.philadelphia.example.comund sein host2.philadelphia.example.com. Ich habe Split-Horizon-DNS eingerichtet, damit diese Namen sowohl hinter der NAT als auch im öffentlichen Internet funktionieren.

Der Einfachheit halber möchte ich auf einige davon einfach zugreifen host1.example.com(ohne den Namen der Stadt). Ich habe für diese öffentliche CNAME-Datensätze erstellt. Das funktioniert gut im Internet, aber nicht hinter meinem Router.

Mein Router (ein EdgeRouter Lite, für die Aufzeichnung) verwendet dnsmasq als DNS-Server. Es fügt automatisch die Datensätze für host1und host1.philadelphia.example.comzu / etc / hosts hinzu, wenn es die DCHP-Lease ausgibt, aber nicht, host1.example.comda example.comes nicht seine Domäne ist. Dementsprechend host1.example.comleitet es eine Anfrage an den öffentlichen DNS weiter.

Der öffentliche DNS-Server sucht die folgenden Datensätze und gibt sie zurück:

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

Eigentlich bin ich nicht sicher, ob der öffentliche DNS-Server den A-Datensatz automatisch sendet oder ob dnsmasq eine zweite Anforderung dafür ausgibt. In jedem Fall nimmt dnsmasq das Wort des öffentlichen DNS-Servers und gibt die öffentliche IP-Adresse meines Routers gewissenhaft an den ursprünglichen Client hinter dem Router zurück, nicht an host1die private IP-Adresse von / etc / hosts.

Als zusätzlichen Test habe ich versucht, einen CNAME-Datensatz für privatehost.example.com-> privatehost.philadelphia.example.comzu erstellen, ohne dafür einen öffentlichen A-Datensatz zu erstellen. Mein Router hat jedoch einen Eintrag privatehost.philadelphia.example.comin / etc / hosts. In diesem Fall antwortet der öffentliche DNS-Server mit dem CNAME-Eintrag und NXDOMAIN, wenn er nichts finden kann privatehost.philadelphia.example.com. Sogar noch, nimmt dnsmasq das Wort des Servers und gibt NXDOMAIN an den Kunden, auch wenn es nicht für einen Eintrag hat privatehost.philadelphia.example.com.

Gibt es eine Möglichkeit, dnsmasq anzuweisen, seine eigenen / etc / hosts nach dem Abrufen des CNAME erneut zu versuchen, selbst wenn es zu einem öffentlichen DNS musste, um es zu erhalten?

1

0 Antworten auf die Frage