Auflösen der Anfrage einer Schnittstelle (wlan0) mittels DNS im Netzwerk einer anderen Schnittstelle (VPN)

Auflösen der Anfrage einer Schnittstelle (wlan0) mittels DNS im Netzwerk einer anderen Schnittstelle (VPN)

Was ich erreichen möchte:

Ich habe ein WireGuard-Reverse-VPN-Setup, das meinen Datenverkehr nicht umleitet, mir aber ermöglicht, über einen öffentlichen Server als „Brücke“ vom Internet aus eine Verbindung zu meinem Raspberry Pi herzustellen.

Ich habe Pihole auf dem Raspberry Pi installiert. Jetzt möchte ich den Pi als DNS (über WireGuard) verwenden, während ich die eigentliche HTTP-Anfrage von meinem eigentlichen Gerät sende.

Im Grunde möchte ich, dass es so funktioniert:

192.168.0.x (wlan0@localhost) fordert eine URL an. Der DNS @192.168.66.z (pihole) löst die URL auf und sendet die IP zurück an 192.168.66.y (wg0@localhost). Diese Antwort wird dann verwendet, um die HTTP-Anforderung von 192.168.0.x (wlan0@localhost) zu senden.

Was ich versucht habe:

Natürlich habe ich versucht, die VPN-IP des Pi in NetworkManager einzugeben. Das hat mir einige Kopfschmerzen bereitet, da mein Ubuntu ( 5.4.0-42-generic #46~18.04.1-Ubuntu) immer auf seinen Standard-DNS zurückfiel (was ich nicht wollte, auch wenn der VPN-DNS funktionierte). Ich habe einen Workaround gefunden, der user2427436auf einerSO-Thread hier.

Worum es geht:

Obwohl ich die Verwendung des DNS erzwingen kann (ohne auf die Router/den Standard-DNS zurückzugreifen), gelingt es mir nicht, den Pihole als DNS zu verwenden. Ich kann mich über einen Tunnel mit dem Pi verbinden (z. B. HTTP, SSH, …) und Port 53 (für DNS) ist in der Firewall geöffnet. Ich kann trotzdem keine Domänennamen auflösen. Außerdem journalctl -xezeigt die Überprüfung auf dem Pi keinen Hinweis darauf, dass das Gerät versucht hat, eine Verbindung herzustellen/aufzulösen.

Ich würde wirklich gerne verstehen, warum das nicht funktioniert und wie es funktionieren soll. Ich habe das Gefühl, dass mir etwas darüber entgeht, wie DNS funktioniert.

Welches wäre die richtige Protokolldatei, die hier überprüft werden sollte? Haben Sie Vorschläge, was ich als nächstes versuchen sollte?

BEARBEITEN:

DNS wird pro Netzwerkgerät eingerichtet. Kennt mein wlan0-Gerät @192.168.0.0\24 das wg0-Gerät und seinen Adressraum @192.168.66.0\24? Kann dies die Ursache des Problems sein, dass ich versuche, eine Anfrage von wlan0 mithilfe eines DNS über wg0 aufzulösen? Wenn ja, wie würde ich das lösen?

Antwort1

Zur Behebung dieses Problems sind verschiedene Aspekte zu berücksichtigen.

  1. Hinzufügen von IP-Regeln für korrektes Routing
  2. Testen der Namensauflösung
  3. Deaktivieren / Optimieren behoben

Schritt für Schritt:

Als erstes muss geprüft werden, ob der Pi erreichbar ist. Dazu muss geprüft werden, über welche Schnittstelle das Routing geht. Folgende Tests können dazu genutzt werden:

traceroute -i <interface name> -p 53 192.168.66.z

Ersetzen Sie es durch die im System verfügbaren Schnittstellen. Erwartetes Ergebnis: Traceroute funktioniert über die Schnittstelle wg0, aber vermutlich nicht über die anderen.

Derselbe Test kann mit der Quell-IP durchgeführt werden:

traceroute -s <sourceIP> -p 53 192.168.66.z

Ersetzen Sie es durch eine lokale IP auf Ihrem lokalen Host. Erwartetes Ergebnis: Traceroute funktioniert vermutlich mit der IP-Adresse von wg0, aber nicht mit der IP-Adresse einer anderen Schnittstelle.

Wenn die beiden oben genannten Punkte mit keiner Schnittstelle oder Adresse funktionieren, ist der Routing-Teil auf Ihrer öffentlichen „Brücke“ fehlerhaft.

Vorausgesetzt, der erste Schritt funktioniert wie erwartet, besteht der nächste Schritt darin, dem Betriebssystem mitzuteilen, dass der Datenverkehr für DNS-Anfragen über die richtige Schnittstelle geleitet werden soll. Ersetzen Sie durch den Namen der Schnittstelle, die im vorherigen Schritt eine funktionierende Route zu Ihrem Pihole bereitgestellt hat.

Erstellen Sie eine neue Routing-Tabelle für DNS-Anfragen, z. B. „dns“, und weisen Sie das Betriebssystem an, alle DNS-Anfragen (Zielport 53) über eine andere Schnittstelle umzuleiten

echo "10 dns" >>/etc/iproute2/rt_tables
ip rule add pref 10 dport 53 table dns
ip route add default via 192.168.66.z dev <DNSInterface> table dns
ip route flush cache

Prüfen Sie zunächst, ob die DNS-Auflösung funktioniert, indem Sie die Pihole-Adresse explizit angeben:

nslookup www.serverfault.com 192.168.66.z

Erwartetes Ergebnis: Die DNS-Abfrage funktioniert einwandfrei. Wenn nicht, müssen Sie die oben genannten Schnittstellen und IP-Adressen sowie Ihre Routing-Regeln auf dem VPS noch einmal überprüfen.

Zuletzt müssen wir uns um die Auflösung kümmern. Mein Vorschlag ist, die Auflösung auszuschalten und direkt den Pihole-DNS zu verwenden:

systemctl stop systemd-resolved
systemctl disable systemd-resolved.service
mv /etc/resolv.conf /etc/resolv.conf.securitycopy

hinzufügen

dns=default

unter [main]in/etc/NetworkManager/NetworkManager.conf

systemctl restart NetworkManager

Ändern Sie die DNS-Server-IP in Ihrer Netzwerkschnittstelleneigenschaft in die Pihole-Adresse

DNS-Auflösung testen:

nslookup www.serverfault.com

An Ihrem System wurden nun folgende Änderungen vorgenommen:

  1. DNS-Anfragen (Zielport 53) werden über eine andere Schnittstelle geroutet
  2. Aufgelöst ist deaktiviert, die DNS-Auflösung geht direkt an einen DNS-Server
  3. Der DNS-Server ist auf die IP des PiHole eingestellt

Lass mich wissen ob es funktioniert.

verwandte Informationen