Unbound durch OpenVPN Client tunneln, sofern verfügbar
-
Moin moin,
ich bräuchte einmal einen schlauen Tipp, da ich dem Problem irgendwie nicht auf die Sprünge komme oder ggf. an irgendeinem Cachen hänge und das Problem nicht sehe.
Aufgabenstellung:
Unbound läuft auf pfsense (2.4.5-RELEASE-p1) als Resolver für das lokale Netzwerk. Zusätzlich existiert ein OpenVPN Client (Interface: OPT2). Ziel ist es, dass Unbound seinen Traffic durch OPT2 schickt, sofern dieses verbunden ist. Ist OPT2 down, soll Unbound über WAN raus gehen.Hintergrund:
Per Firewall-Regeln werden einige lokale Geräte anhand ihrer IP-Adresse schon über OPT2 geschickt, so dass diese korrekt das VPN nutzen. Lösen diese jedoch DNS-Anfragen aus, werden diese von Unbound direkt über WAN abgesetzt. Das ist nicht gewünscht.Die optimale Lösung wäre, dass nur DNS-Anfragen von Geräten, welche durch das VPN gehen, auch durch das VPN geschickt werden, jedoch würde es auch reichen wenn alle DNS-Anfragen pauschal durchs VPN gehen - sofern dieses verfügbar ist. Ich denke nämlich nicht, dass ich diese Geräte an/durch Unbound trennen kann, sofern diese nicht unterschiedliche DNS-Resolver nutzen (z.B. zweiten Resolver in einer extra VM extra für VPN Geräte).
Da der VPN-Tunnel keine Hochverfügbarkeit garantiert sollten im Notfall jedoch DNS-Anfragen auch über WAN raus gehen, sofern OPT2 down ist. Die Geräte selbst werden per Floating-Rule vorzeitig abgefangen, so dass bei VPN-Ausfall diese nicht über WAN raus gehen.
DNS-Auflösung dürfte aber nicht komplett ausfallen, da dadurch viele weitere Geräte betroffen sind, was nicht gut wäre. Zusätzlich muss ich Unbound als Resolver laufen lassen, da für LAN einige Domains bzw. Subdomains anders aufgelöst werden müssen, damit der Traffic im LAN bleibt und nicht durch die Subdomains im öffentlichen DNS aufgelöst werden (Traffic würde dann erst durch WAN raus und dann wieder rein kommen, das soll vermieden werden). Eine Umstellung auf Forwarding fällt somit meines Wissens raus.
Pauschal möchte ich nicht Port 53 von LAN->WAN durch OPT2 schicken, da ich nicht ausschließen kann, dass ein Gerät nicht mal einen anderen DNS wie z.B. 8.8.8.8 nutzen muss. Daher soll nur Unbound selbst umgeleitet werden.
Aktueller Stand:
Derzeit bekomme ich es nicht hin Unbound durch den OpenVPN Client zu leiten. Als "Outgoing Network Interfaces" sind bei Unbound nur WAN eingestellt. OPT2 kann ich hier nicht wählen, da bei VPN-Ausfall der Resolver nicht funktioniert.Ich habe schon mit Firewall-Regeln versucht hier 127.0.0.1:53 irgendwie durch OPT2 zu schicken, jedoch scheitert dann die DNS-Auflösung sofort (getestet mit Diagnostics - DNS Lookup in pfsense). Daher bin ich nun am überlegen, ob das was ich vorhabe überhaupt mit pfsense und dem eingebauten Unbound funktioniert.
Wenn ich einen Linux-Client, welcher durch das VPN geht, mit "dig @8.8.8.8 heise.de" eine Domain durchs VPN anfragen lasse, dann erhalte ich hier eine valide Antwort. Ich würde somit ausschließen, dass der VPN Client Port 53 oder ähnliches blockiert/verhindert.
Jedoch stehe ich langsam nur noch mit Fragezeichen überm Kopf da und weiß nicht, was ich falsch mache oder ob dies überhaupt möglich ist.
Für jeden Hinweis und eure investierte Zeit bin ich sehr dankbar!
Notlösung:
Sollte sich keine Lösung finden lassen, bin ich geneigt in einer Mini-VM oder Container einen eigenen Resolver aufzusetzen, welchen ich dann ähnlich den anderen Geräten anhand seiner IP durchs VPN schicken kann. pfsense würde als Forwarder dann diesen Resolver nutzen. Jedoch würde ich gerne diese zusätzliche VM/Container vermeiden, sofern möglich. -
Eine Möglichkeit, die bei mir ganz gut zu funktionieren scheint, ist, den "VPN-Nutzern" per DHCP zu erst den Resolver und danach weitere DNS-Server, wie google, Quad9 oder eines VPN-Providers, vorzugeben und gleichzeitig im Resolver diesen VPN-Nutzern nicht-lokale Anfragen zu verbieten.
Es ist zwar nicht wie in der Überschrift gefordert, aber für mich zumindest eine praktikable Lösung, keine bösen DNS-Leaks mehr.
Finde das Thema auch interessant, wer noch andere Lösungen kennt, nur her damit.
-
@bob-dig Vielleicht verstehe ich deine Antwort nicht (sehr wahrscheinlich sogar) aber wie soll es bei meinem Problem helfen?
Ziel bzw. Problem ist ja, dass ich den lokalen Resolver ebenfalls durchs VPN schicken möchte, dies aber nicht hinbekomme.
In wie weit soll die von dir vorgestellte Lösung da hilfreich sein? Vielleicht magst du mir es kurz einmal erklären, da ich - wie gesagt - vermutlich den springenden Punkt noch nicht sehen kann.
-
@logic Mir ging es um das Thema DNS-Leaks, vielleicht habe ich dich auch falsch verstanden.
-
@bob-dig Bei deiner Variante hat man aber doch dennoch Leaks oder sehe ich das falsch?
Also ja, mir geht es grundsätzlich auch um die Leaks. Aber um diese zu Verhindern müssten die DNS-Anfragen ja über den gleichen VPN-Tunnel wie die VPN-Nutzer.
Das ist praktisch mein Kernproblem, was ich angehen möchte.
-
@logic Genau auf DNS-Leaks geht meine Lösung ein.
Und ich habe es jetzt mal ein Stück weit verifiziert. In Unbound landen die Anfragen wirklich nicht, wenn es nach dem Log geht.
-
-
@viragomann So, kam leider erst jetzt darum mich weiter mit dem Thema zu beschäftigen.
Grundsätzlich habe ich den Beitrag zusätzlich eingestellt um einfach eine zweite Meinung bzw. weitere Vorschläge zu bekommen. Es kann ja gut sein, dass irgendwer noch eine andere Lösung hat, welche aufgrund von anderen Vor-/Nachteilen mir mehr zusagt.
Hab die Lösung von @Bob-Dig noch nicht verifizieren können, jedoch habe ich bislang aus seinen Antworten noch nicht erfassen können, wie er/sie sicherstellt, dass der Unbound-Traffic durch den VPN-Tunnel geht. Aber ich werds mal ausprobieren.
-
@logic said in Unbound durch OpenVPN Client tunneln, sofern verfügbar:
Hab die Lösung von @Bob-Dig noch nicht verifizieren können, jedoch habe ich bislang aus seinen Antworten noch nicht erfassen können, wie er sicherstellt, dass der Unbound-Traffic durch den VPN-Tunnel geht.
Tut er nicht. Die Clients müssen selbst öffentliche DNS-Server abfragen, wenn es um nicht-lokale Domains geht. Und diese Abfragen werden über die VPN geroutet. Damit hat er kein DNS-Leak.
Und für lokale Domains können sie den Resolver nutzen.
-
@viragomann Ergo ist es keine Lösung für mein Problem ;)
-
Musste leider feststellen, dass "meine" Lösung wohl nur eine gewisse Zeit funktioniert. Irgendwann scheint es so, dass Windows den "ersten" DNS-Server nicht mehr nutzt und daher interne Namen nicht mehr auflöst.
Habe daher vorerst auf IPs umgestellt.