DNS-queries via VPN-clientverbinding

Ik heb mijn oplossing gepost hier.

----------------------------------

Ik heb pfSense op gezet met een openvpn client. Ik routeer al het LAN-verkeer via de VPN op basis van regels en laat mijn standaard gateway op mijn ISP staan, geen probleem en het werkt perfect.

Ik wil dat al het DNS-verkeer ook via de VPN gaat. Er moet een uitzondering zijn: queries van pfsense zelf om pool.somevpnprovider.com op te lossen, moeten via een directe internetverbinding gaan, om de volgende reden:

Ik wil dat mijn VPN-client een FQDN gebruikt dat naar een pool van VPN-servers van mijn provider verwijst, zodat ik de beste server heb op het moment dat ik verbind. Wanneer de client wordt gereset of opnieuw opgestart, wordt er opnieuw gedi DNS en kan het verbinden met een andere server uit de pool. Ik kies voor deze strategie boven een vast IP-adres van één VPN-server, zodat ik niet het risico loop te proberen verbinding te maken met een server die down is of te druk bezet.

Oke? Dus al het DNS-verkeer, van eender welke client in mijn netwerk, moet worden afgevangen door en gerouteerd worden naar pfSense om via VPN te worden verzonden. Daarom heb ik een NAT-configuratie gemaakt:

source prot: tcp/udp

source addr: LAN-netwerk

dest addr: niet LAN-netwerk

dest port: 53

NAT IP en poort: pfsense:53

Het probleem is dat ik, om een FQDN te gebruiken in mijn VPN-client, mijn DNS-server van mijn VPN-provider (10.4.0.1) niet kan gebruiken, omdat ik DNS nodig heb om verbinding te maken, maar daarvoor moet VPN al actief zijn. Dit lijkt de meest veilige optie, maar ik kan dat niet gebruiken om de bovenstaande reden.

Momenteel is DNS onder Algemene Instellingen in pfsense ingesteld met 2 servers van dns.watch. Gateway staat op geen.

Dit betekent dat alle DNS-queries via de standaard gateway gaan. Als ik een DNS-test doe vanaf de diagnostiek van pfsense, krijg ik dit (fictieve IP-adressen):

127.0.0.1 - 0 ms

21.22.23.24 - 20 ms

21.22.24.25 - 24 ms

Hier is mijn probleem. Ik wil de gateway wijzigen op de pagina voor algemene instellingen voor de DNS-servers van geen naar de VPN-gateway. Als ik dat doe, blijft localhost goed werken, maar krijgen de 2 DNS-servers geen antwoord wanneer ik de DNS-test van pfsense uitvoer. Ik weet niet wat er gebeurt en hoe localhost wordt opgelost.

Ik weet niet hoe ik dit moet configureren voor wat ik wil. Ipleak.net ziet de dns.watch servers en ik lek niets. 127.0.0.1 blijft werken op de DNS-testpagina van pfsense, maar wat ik niet begrijp is dat de DNS-resolver is geconfigureerd om forward DNS te gebruiken, dus alles wat onder algemene instellingen staat, wordt door localhost gebruikt. Zou localhost daarom niet de dns.watch servers moeten gebruiken, die de VPN-gateway hebben? Maar wanneer ik de VPN uitzet, ligt het internet voor mijn clients plat, maar de DNS-controle van pfsense blijft voor localhost werken. Dit zegt mij dat deze queries rechtstreeks mijn ISP moeten gebruiken.

Ik heb tcpdumps gedaan op de console van pfsense zoals volgt:

tcpdump -i ovpnc1 -nnn -vvv poort 53

Ik heb dat gedaan voor re0 (verbinding met de internetrouter), re1, verbinding met mijn LAN en voor lo0.

Op alle interfaces zie ik verzoeken naar de servers van dns.watch met antwoorden. Ik heb geen idee wat er aan de hand is, sorry.

Dus wie gaat de uitdaging aan om me te helpen en dit correct in te stellen? :P.

Alvast heel erg bedankt jongens!

Ik heb in deze situatie gezeten. Ik heb het uiteindelijk toegestaan dat DNS-verkeer via mijn WAN ging, wetende dat het via de VPN zou gaan zodra er een verbinding was.

Mijn setup is anders dan die van jou, omdat ik Pi-hole gebruik voor DNS in plaats van pfSense. Ik denk dat je floating rules moet gebruiken om verkeer dat afkomstig is van pfSense te blokkeren. Je zou een uitgaande floating rule kunnen maken die zegt dat als DNS-verkeer niet gaat naar een alias met je VPN-servers, verkeer wordt geblokkeerd.

Zoals ik zei, is jouw situatie anders dan die van mij, maar hopelijk wijst dit je de goede kant op.

Mobiel, maar er is een optie in unbound om de uitgaande gateway voor DNS-vragen in te stellen. Geen firewallregel nodig.

Hoe zit het met het instellen van de GW op ‘WAN’ voor een publiek bereikbare DNS-server onder Algemene Instellingen en vervolgens je DNS-server IP van je VPN aan je clients via DHCP toewijzen?

Zo zou pfSense in staat moeten zijn om de FQDN van je VPN op te lossen en je clients lekken geen DNS-verzoeken omdat 10.4.0.1 niet bereikbaar is tenzij de tunnel actief is…

Oké, ik heb het opgelost!

Ik heb alle DNS-servers verwijderd uit Algemene Instellingen en alleen de gateway van de Client VPN als DNS-server toegevoegd. Dit is een IP uit het privé 10.x-bereik. In mijn geval, 10.4.0.1. Ik weet niet of dat werkt met alle VPN-providers.

Vervolgens heb ik NAT/Poortforward gemaakt, voor TCP/UDP, LAN-netwerk bron naar niet-LAN-netwerk bestemming, bestemmingspoort 53, NAT IP 127.0.0.1. Dit maakt ook een firewallregel aan onder LAN. Hiermee wordt al het DNS-verkeer van het LAN-netwerk gevangen en doorgestuurd naar de DNS-resolver van pfsense 127.0.0.1.

De DNS-resolver is ingesteld om alleen te luisteren op LAN en localhost, uitgaand alleen via de VPN-interface (niet via de WAN).

In de DNS-resolver, domeinoverrides, heb ik het FQDN voor het VPN-opdrachadres, met een IP van de lookup-server naar de DSL-router.

Ik heb het uitgebreid getest met tcpdumps op de terminal van pfsense. Wanneer VPN actief is, is al het DNS-verkeer onzichtbaar omdat het direct wordt doorgestuurd naar de VPN-tunnel.

Wanneer VPN uitgaat, wordt al het DNS-verkeer zichtbaar in tcpdump naar 10.4.0.1, maar mislukt omdat het niet bereikbaar is. Wanneer ik mijn client naar 8.8.8.8 (Google publieke DNS) wijs, worden die queries gezien met tcpdump naar 10.4.0.1 en falen (dit bewijst dat de NAT/Port-forward correct werkt).

Bij uitgeschakelde VPN, wanneer ik het FQDN van mijn VPN-opdrachadres vanuit een client of pfsense-terminal vraag, zie ik in de tcpdump dat het wordt gestuurd naar het IP-adres van de DSL-router, en er wordt een resultaat teruggegeven.

Reacties, vragen, suggesties zijn welkom!

Dank aan iedereen die heeft gereageerd!