Wie erzwinge ich, dass dnsmasq einen Upstream-DNS-Server nur für bestimmte Domänennamen verwendet?

15

Im Moment habe ich die folgende Zeile in der Datei dnsmasq.conf, die alle Anforderungen gut verarbeitet ( /#/entspricht jeder Domain; dies ist erforderlich):

address=/#/127.0.0.1

Es gibt jedoch einige Domänen, die in andere IP-Adressen als aufgelöst werden müssen 127.0.0.1.

Als vorübergehende Lösung wurden sie hinzugefügt zu /etc/hosts:

209.85.148.95   ajax.googleapis.com
207.97.227.245  underscorejs.org
72.21.194.31    s3.amazonaws.com

Leider ist dies eine sehr vorübergehende Lösung: Sie funktioniert nicht mehr, sobald sich die IP-Adresse einer Zieldomäne ändert.

Meine Frage ist: Wie erzwinge ich, dass dnsmasq einen Upstream-DNS-Server zum Auflösen der IP-Adressen einiger (angegebener) Domänennamen verwendet?

nrph
quelle

Antworten:

28

Sie können dies tun, indem Sie die server=Direktive verwenden, z

server=/ajax.googleapis.com/8.8.8.8

Ähnlich würde der öffentliche DNS-Server von Google nach der Domain ajax.googleapis.com fragen

server=/amazonaws.com/209.244.0.3

würde den öffentlichen DNS-Server von Level3 nach der amazonaws.com-Domain abfragen.

Sie können mehrere Domänen zusammen gruppieren

server=/co.uk/com/8.8.4.4

Senden der .co.uk- und .com-Domains an den DNS-Server unter 8.8.4.4

Sie können auch mehrere server=Direktiven haben

−S, --server = [/ [<domain>] / [domain /]] [<ipaddr> [# <port>] [@ <source> [# <port>]]

Geben Sie die IP-Adresse der Upstream-Server direkt an. Durch Setzen dieses Flags wird das Lesen von /etc/resolv.conf nicht unterdrückt. Verwenden Sie dazu -R. Wenn eine oder mehrere optionale Domänen angegeben sind, wird dieser Server nur für diese Domänen verwendet und sie werden nur unter Verwendung des angegebenen Servers abgefragt. Dies ist für private Nameserver gedacht: Wenn Sie einen Nameserver in Ihrem Netzwerk haben, der sich mit Namen der Form xxx.internal.thekelleys.org.uk unter 192.168.1.1 befasst, geben Sie -S /internal.thekelleys.org.uk/ an. 192.168.1.1 sendet alle Anfragen für interne Maschinen an diesen Nameserver, alles andere geht an die Server in /etc/resolv.conf. Eine leere Domain-Angabe, // hat die spezielle Bedeutung von "nur nicht qualifizierten Namen", dh Namen ohne darin enthaltene Punkte. Ein nicht standardmäßiger Port kann als Teil der IP-Adresse mit einem # -Zeichen angegeben werden.

Ebenfalls erlaubt ist ein -S-Flag, das eine Domain ohne IP-Adresse angibt. Dies teilt dnsmasq mit, dass eine Domäne lokal ist und möglicherweise Fragen von / etc / hosts oder DHCP beantwortet, jedoch niemals Anfragen zu dieser Domäne an Upstream-Server weiterleiten sollte. local ist ein Synonym für server, um in diesem Fall die Konfigurationsdateien übersichtlicher zu gestalten.

Die optionale zweite IP-Adresse nach dem Zeichen @ teilt dnsmasq mit, wie die Quelladresse der Abfragen für diesen Nameserver festgelegt werden soll. Es sollte eine Adresse sein, die zu dem Computer gehört, auf dem dnsmasq ausgeführt wird. Andernfalls wird diese Serverzeile protokolliert und dann ignoriert. Das Abfrage-Port-Flag wird für alle Server ignoriert, für die eine Quelladresse angegeben wurde, der Port kann jedoch direkt als Teil der Quelladresse angegeben werden.

user9517 supportedGoFundMonica
quelle
Ich glaube nicht, dass er mehrere serverZeilen benötigt: Welche Adressen auch immer er nicht auflösen möchte (127.0.0.1), er kann sie mit addressZeilen hinzufügen ; Alles andere wird von DNSMasq abgefragt server. Ich bin mir ziemlich sicher, dass mein Setup so ist.
Gravyface
1
@gravyace: Ich habe die Frage so gelesen, dass alles in 127.0.0.1 aufgelöst werden soll, mit einigen Ausnahmen, die er mithilfe von DNS auflösen möchte, falls sich die Adresse ändert. Ich sehe, dass dies durch die Verwendung von Serverdirektiven erreicht wird.
User9517 unterstützt GoFundMonica
Oh vielleicht Wer weiß. So oder so, das sollte ihn zum Laufen bringen.
Gravyface
Klappt wunderbar!
Nr. 24.08.12