[dnsmasq] Reverse lookup mit privaten DNS Servern - Den Mod modden...

wengi

Mitglied
Mitglied seit
3 Okt 2006
Beiträge
340
Punkte für Reaktionen
1
Punkte
18
Hallo Allerseits,
ich habe hier eine recht knifflige Konfigurationsanfrage zu dnsmasq.

Folgende Situation: 3 Netze sind mit OpenVPN verbunden.
Netz1: 192.168.201.0/24 Domain: netz1
Netz2: 192.168.202.0/24 Domain: netz2
Netz3: 192.168.203.0/24 Domain: Netz3
Auf jeder der drei Fritzboxen (jeweils die .1 des lokalen Netzes) läuft dnsmasq.

Jeder dnsmasq soll wie folgt konfiguriert werden:

1. DHCP im lokalen Netz (LAN + WLAN) inkl. statischer Leases aus hosts.
2. DNS (forward und reverse) für lokale Adressen.
3. Weiterleitung (forward und reverse) innerhalb der VPN Netze an den entsprechenden dnsmasq.
4. Reverse Anfragen für private Netze sollen innerhalb der 3 VPN Netze bleiben.
5. Alle anderen Anfragen sollen an den DNS des jeweiligen Providers gehen.


Zu 1.:
Ist eigentlich klar und nichts Spezielles. Mit der Option '-s netz1' übergebe ich im Netz1 den domain name.
Die hosts kann ich über das Webinterface erstellen.

Zu 2.:
Funktioniert ohne Probleme. Client1.netz1 sieht Client2.netz1 und so weiter.

Zu 3.:
Mit '-S /netz2/192.168.202.1 -S /netz3/192.168.203.1' übergebe ich z.B. dnsmasq des Netz1 die nötigen VPN-DNS Server.

Zu 4.:
Hier habe ich keine Ahnung, wie ich dnsmasq den richtigen Server für reverse DNS beibringe.
So etwas wie "Alle192.168.203.x nach 192.168.203.1 weiterleiten".
Gibt das ein Problem mit 'bogus-priv', das vom Webinterface automatisch eingefügt wird?
bogus-priv würde ja sämtliche Weiterleitungen von reverse lookups verhindern.

Zu 5.:
das ist wieder einfach...


Jede hilfe zu Punkt 4 ist sehr willkommen.

wengi
 
Zuletzt bearbeitet:

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0
Ein Reverse Lookup für die Adresse a.b.c.d ist im Prinzip eine normale Anfrage für den Namen d.c.b.a.in-addr.arpa (Reihenfolge beachten).
Versuch mal
Code:
-S /202.168.192.in-addr.arpa/192.168.202.1
 

wengi

Mitglied
Mitglied seit
3 Okt 2006
Beiträge
340
Punkte für Reaktionen
1
Punkte
18
Hallo,

Danke für die Info.
Ich habe das jetzt dementsprechend eingetragen.
Allerdings scheint das noch nicht ganz zu laufen...
Im 201er Netz erhalte ich
Code:
/var/mod/root $ nslookup 192.168.201.20
Server:    192.168.180.1
Address 1: 192.168.180.1

Name:      192.168.201.20
Address 1: 192.168.201.20 pc2.fritz.box
/var/mod/root $
Im 203er Netz dagegen erhalte ich
Code:
/var/mod/root $ nslookup 192.168.201.20
Server:    192.168.180.1
Address 1: 192.168.180.1

Name:      192.168.201.20
Address 1: 192.168.201.20
/var/mod/root $
Ich vermute, dass der 'bogus-priv' Eintrag die Abfrage verhindert.

Frage: Kann ich dnsmasq mitteilen an welche DNS Server private Adressen weitergeleitet werden und an welche nicht?
In der Manpage habe ich nichts hilfreiches dazu gefunden.

EDIT: Beim manuellen start mit .conf ohne 'bogus-priv' erhalte ich eine Fehlermeldung:
/var/tmp $ dnsmasq -C /var/tmp/dnsmasq.conf -s netz3 -S /netz1/192.168.201.1 -S /201.168.192.in-addr.arpa/192.168.201.1 -S /netz2/192.168.202.1 -S /202.168.192.in-addr.arpa/192.168.202.1
dnsmasq: failed to create listening socket: Address already in use
/var/tmp $
Das liegt an einem anderen DNS Server (mit netstat überprüft). Welcher AVM daemon macht DNS? Kann ich den bedenkenlos beenden?

wengi
 
Zuletzt bearbeitet:

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0
multid verwendet den DNS-Port. Zu Testzwecken kann man ihn bedenkenlos beenden (so wie jedes andere Programm auch, notfalls danach Neustart machen, wenn nichts mehr geht).
 

wengi

Mitglied
Mitglied seit
3 Okt 2006
Beiträge
340
Punkte für Reaktionen
1
Punkte
18
Ich habe mir gerade die erste Box abgeschossen.
Multid einfach beenden scheint nicht so einfach zu funktionieren.
Leider steht im Wiki nicht, was multid alles macht (nur ddns).
Ich habe ddns und openvpn im Einsatz. Wenn multid dafür notwendig ist habe ich wohl ein Problem...

Kann ich multid DNS mäßig auf einen anderen Port umbiegen?

wengi
 

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,779
Punkte für Reaktionen
10
Punkte
38
Nein das geht nicht. Du mußt dnsmasq vor multid starten.

MfG Oliver
 

wengi

Mitglied
Mitglied seit
3 Okt 2006
Beiträge
340
Punkte für Reaktionen
1
Punkte
18
Mal ne blöde Frage: Wie stelle ich das denn sicher?

In der debug multid beenden, dnsmasq starten und dann multid starten?
Oder gibt es eine elegantere Lösung?

wengi
 

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,779
Punkte für Reaktionen
10
Punkte
38
Der dnsmasq wird im dsmod mit einem Wrapper (/usr/lib/dnsmasq/bin/multid) gestartet. Damit wird sichergestellt, dass er immer vor dem multid gestartet wird.

MfG Oliver
 

wengi

Mitglied
Mitglied seit
3 Okt 2006
Beiträge
340
Punkte für Reaktionen
1
Punkte
18
Das heißt im Umkehrschluß:
Wenn man bei dnsmasq die Startart von manuell auf automatisch umstellt muss man die Fritzbox neu starten, damit dnsmasq auch NDS Server ist.
Lediglich starten bedeutet, dass multid noch DNS macht.

Dann kann ich das jetzt testen.

Vielen Dank für die Info.

wengi
 

wengi

Mitglied
Mitglied seit
3 Okt 2006
Beiträge
340
Punkte für Reaktionen
1
Punkte
18
Nächste Frage: Wie kann ich den hostname der Fritzbox dauerhaft ändern?
Über ein hostname in der debug bleibt die /etc/hosts leider unberührt.

Ich würde die Boxen gerne von fritz.box auf fritz.netzx umbenennen.

wengi
 

wengi

Mitglied
Mitglied seit
3 Okt 2006
Beiträge
340
Punkte für Reaktionen
1
Punkte
18
Bisher noch nicht.
Ich erhalte beim Reverse Lookup nur die IP zurück, keinen Namen.
Ab und an mal das hier:
/var/mod/root $ nslookup fritz.netz3
Server: 192.168.180.1
Address 1: 192.168.180.1

nslookup: can't resolve 'fritz.netz3'
/var/mod/root $
Ich bin mir noch nicht so im Klaren, was hier passiert...
Wenn ich die conf von dnsmasq kopiere, anschließend bogus-priv entferne und mit -C starte kommt das leider auf das Gleiche raus.

Daher wollte ich es erst mal mit den Fritzboxen selbst probieren, nicht mit Clients im Netz (sollte zwar keinen Unterschied machen, muss aber so oder so erledigt werden). Macht nur keinen Sinn, wenn alle Boxen fritz.box heissen.

wengi
 

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0
Du kannst nicht erwarten, daß hostname die /etc/hosts ändert, daß mußt Du schon selbst machen.

Ich weiß nicht, wo sich dnsmasq die Informationen herholt, aber vermutlich aus der /etc/hosts.
 

derheimi

Mitglied
Mitglied seit
4 Jul 2006
Beiträge
347
Punkte für Reaktionen
0
Punkte
0
wengi schrieb:
Daher wollte ich es erst mal mit den Fritzboxen selbst probieren, nicht mit Clients im Netz (sollte zwar keinen Unterschied machen, muss aber so oder so erledigt werden).
Auf der Box selber wird der dnsmasq aber nur für die Auflösung verwendet, wenn Du die /etc/resolv.conf anpasst! Wenn dort (wie standardmäßig)
Code:
nameserver 192.168.180.1
nameserver 192.168.180.2
drinne steht, wird das an die Upstream(Provider)-Nameserver hochgereicht, die die Anfragen natürlich mit ihrem Wissen beantworten.

Macht nur keinen Sinn, wenn alle Boxen fritz.box heissen.
Hm, würde ich so nicht sagen: wenn Du z.B. in jeden Netz mal mit dem Notebook unterwegs bist, kannst Du via "fritz.box" immer die lokale Box erreichen. Auch verlassen sich IMHO einige (AVM-)Tools (z.B. Fritzbox-Monitor...) darauf, dass die Box unter "fritz.box" erreichbar ist.

Ich habe bei mir eine nahezu identische Konfig und habe das so gelöst, dass ich im Dsmod-WebIf in der "Hosts"-Konfiguration der jeweiligen Box eine Zeile eingefügt habe, mit der ich der Box einen zusätzlichen Namen gebe. Z.B. auf Deine Vorstellungen zugeschnitten:
Code:
192.168.201.1 *                 * fritz.netz1.
Dann kannst Du aus den anderen Netzen via "fritz.netz1" und aus dem jeweils lokalen Netz zusätzlich via "fritz.box" auf die Box zugreifen.

HTH
Michael
 

wengi

Mitglied
Mitglied seit
3 Okt 2006
Beiträge
340
Punkte für Reaktionen
1
Punkte
18
Das mit dem zusätzlichen Host-Eintrag ist eine sehr gute Idee. Warum bin ich da nicht selbst drauf gekommen? :noidea:

Zum Reverse Lookup: Es funktioniert nicht.

Abrfage auf der fritzbox.netz1:
Code:
/var/tmp $ nslookup 192.168.203.1 192.168.201.1
Server:    192.168.201.1
Address 1: 192.168.201.1 fritz.netz1

Name:      192.168.203.1
Address 1: 192.168.203.1
/var/tmp $ killall -9 dnsmasq
/var/tmp $ dnsmasq -C /var/tmp/dnsmasq.conf -s netz1 -S .....
/var/tmp $ nslookup 192.168.203.1 192.168.201.1
Server:    192.168.201.1
Address 1: 192.168.201.1 fritz.netz1

Name:      192.168.203.1
Address 1: 192.168.203.1
Hier habe ich zunächst mit der standard dnsmasq.conf gearbeitet. Danach mit einer conf ohne bogus-priv. Eigentlich müsste als Ergebnis ein "Address 1: 192.168.203.1 fritz.netz3" kommen.

Funktioniert Reverse Lookup bei Dir, derheimi? Und wenn ja, mit welcher Config?

Was ich nicht verstehe:

Hier eine Abfrage auf der fritz.netz3 nach dem eigenen Namen (hier ist alles ok):
Code:
/var/tmp $ nslookup 192.168.203.1 192.168.203.1
Server:    192.168.203.1
Address 1: 192.168.203.1 fritz.netz3

Name:      192.168.203.1
Address 1: 192.168.203.1 fritz.netz3
und hier genau die gleiche Abfrage, allerdings auf der fritz.netz1 (Auch hier DNS Server fritz.netz3):
Code:
/var/tmp $ nslookup 192.168.203.1 192.168.203.1
Server:    192.168.203.1
Address 1: 192.168.203.1

Name:      192.168.203.1
Address 1: 192.168.203.1
Da ja in beiden Fällen der gleiche DNS Server angegeben wird würde ich auch die gleiche Antwort erwarten. Zumal ich für die zweite Abfrage auf fritz.netz1 extra das bogus-priv entfernt habe. Leider funktioniert es nicht.

wengi
 
Zuletzt bearbeitet:

derheimi

Mitglied
Mitglied seit
4 Jul 2006
Beiträge
347
Punkte für Reaktionen
0
Punkte
0
Also auf den Clients funktioniert der Reverse-Lookup, auf der FB selbst nicht (Ursache: siehe voheriges Posting von mir), wobei ich das auf der FB selbst auch nicht brauche. Meine Konfiguration:
Code:
/ $ cat /etc/default.dnsmasq/dnsmasq_conf
#!/bin/sh

cat << EOF
no-poll
domain-needed
localise-queries
no-negcache
domain=mhei.heimpold.itr
expand-hosts
server=/[COLOR="Orange"]mhei.heimpold.itr[/COLOR]/fritz.box/[COLOR="RoyalBlue"]18.168.192.in-addr.arpa[/COLOR]/    [COLOR="Red"]<-- lokales Netz ([COLOR="Orange"]Forward[/COLOR]/[COLOR="RoyalBlue"]Reverse[/color])[/COLOR]
server=/shei.heimpold.itr/14.168.192.in-addr.arpa/192.168.14.254 [COLOR="SeaGreen"]<-- ein Remote-Netz[/COLOR]
server=/heimpold.itr/12.168.192.in-addr.arpa/192.168.12.254
EOF
if [ "$DNSMASQ_DHCP" = "yes" ]; then
        echo "$DNSMASQ_DHCP_RANGE" | grep -v "^#" | while read -r range; do
                [ -n "$range" ] && echo "dhcp-range=$range"
        done
fi
[ "$DNSMASQ_ETHERS" = "yes" ] && echo "read-ethers"
/ $ cat /etc/hosts
127.0.0.1       localhost
192.168.18.1     kerker
...
192.168.18.254   fritzbox
192.168.18.254   fritz.box
/ $ cat /var/tmp/flash/exhosts
192.168.18.1   * * kerker
...
192.168.18.254 * * fritzbox
(Ich mach's halt ein wenig anders als Du und ersetze die /etc/default.dnsmasq/dnsmasq_conf beim Dsmod-bauen durch meine eigene, erweiterte Variante.)
So auf nem WinXP-Client:
Code:
[b]nslookup 192.168.12.2[/b]
Server:  fritzbox.mhei.heimpold.itr
Address:  192.168.18.254

Name:    brother.heimpold.itr
Address:  192.168.12.2

[b]nslookup 192.168.18.1[/b]
Server:  fritzbox.mhei.heimpold.itr
Address:  192.168.18.254

Name:    kerker.mhei.heimpold.itr
Address:  192.168.18.1
Das bogus-priv musst Du wirklich weglassen, steht ja eigentlich ziemlich gut erklärt in der Doku zu dnsmasq.
 

wengi

Mitglied
Mitglied seit
3 Okt 2006
Beiträge
340
Punkte für Reaktionen
1
Punkte
18
Hi,

von den Clients funktioniert sowohl forward als auch reverse lookup.
Genau wie Du geschrieben hast: Reverse Einträge rein und bogus-priv raus.

Allerdings habe ich eine Verständnisfrage:

Waurm genau funktioniert es lokal aif der fritzbox nicht, obwohl ich die lokale IP als Server angeben. Ich müsste doch bei lokalen nslookups eine Server-IP angeben können, die den dnsmasq benutzt...?

Und eine generelle Frage:
Wo/Wie passe ich vor dem Kompilieren die _conf / .cgi Dateien an. Ich habe das Ganze nämlich auch bei OpenVPN.
Im Moment arbeite ich da mit "übermounten". Aber das ist dann irgendwie zuviel...

Danke
wengi
 

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
1
Punkte
36
Schieb die Dateien nach dem ersten make in die entsprechenden Verzeichnisse unter package/openvpn-lzo-2.1_rc4/root/ nach etc, init.d usw. (und ersetze damit die vorhandenen).
Zur Sicherheit kannst du dann kontrollieren, ob nach dem erneuten make in build/modified/filesystem auch wirklich die veränderten Dateien sind.

Jörg
 

derheimi

Mitglied
Mitglied seit
4 Jul 2006
Beiträge
347
Punkte für Reaktionen
0
Punkte
0
Alternative: Lege Dir im dsmod-Ordner einen zusätzlichen Ordner an, nennen wir ihn "root-overlay". Modifiziere die Datei fwmod_custom und füge dort dann ein:
Code:
...
all() {
        dummy=0
        cp -av ../../root-overlay/* ./filesystem
}
...
Unter root-overlay kannst Du dann beliebige Dateien und Ordner anlegen, die 1:1 vor dem Zusammenbauen ins Image kopiert werden. Also z.B. root-overlay/etc/default.dnsmasq/dnsmasq_conf.
So ähnlich mach ich das auch (hab bei mir die Verzeichnisse noch eine Ebene höher und ein zusätzliches "shared-root-overlay" weil ich für mehrere Boxen Images baue).

Edit:
Waurm genau funktioniert es lokal aif der fritzbox nicht, obwohl ich die lokale IP als Server angeben. Ich müsste doch bei lokalen nslookups eine Server-IP angeben können, die den dnsmasq benutzt...?
nslookup mit expliziter Server-IP auf der FB geht bei mir auch nicht wirklich - die Konfig ist aber definitiv richtig. Hab gerade mal mit tcpdump versucht zu checken, ob da was über die Leitung geht, aber da kam nix. Ist der Parameter vielleicht nur ein Dummy?
 
Zuletzt bearbeitet:

wengi

Mitglied
Mitglied seit
3 Okt 2006
Beiträge
340
Punkte für Reaktionen
1
Punkte
18
Der Parameter funktioniert. Ich habe damit getestet, ob ich dnsmasq auf einer anderen Box durch den Tunnel ansprechen kann und das hat funktioniert.

wengi