Wenn man den Wunsch hat, den gesamten Daten­verkehr vom eigenen Computer ins Internet durch ein VPN zu schicken, wird man DNS Leaks oder IPv6 Leaks als Probleme ansehen. Bei DNS Leaks oder IPv6 Leks handelt es sich nicht um Bugs (im Sinne einer Fehlfunktion des VPN) sondern um Features im Traffic Routing, die man durch geeigente Konfiguration vermeiden kann.

Um das Problem zu verstehen, wird das Routing im Innern des PC bei aktiviertem VPN an einem Beispiel erläutert. Ein PC oder Laptop wird zuhause (oder im Hotel) mit dem WLAN verbunden. Der Router ist eine Fritz!Box (andere Router funktionieren ähnlich) und ein OpenVPN wird aktiviert.

  1. Beim Herstellen der WLAN-Verbindung wird das Netzwerkinterface "wlan0" konfiguriert.

    • Via DHCP wird dem Interface "wlan0" eine IPv4 Adresse 192.168.178.x/24 zugewiesen.

      Der Netzbereich /24 hinter der IP-Adresse besagt, dass die Adressen 192.168.178.1…255 (andere PCs im LAN) direkt von dieser Schnittstelle erreichbar sind ohne Routing.

    • Außerdem wird dem WLAN Interface eine IPv6 Adresse via DHCP zugewiesen.
    • Als Gateway ins Internet wird die Fritz!Box mit der Adresse 192.168.0.1 definiert.
    • Als DNS-Server ist 192.168.178.1 zu verwenden (sagt die Fritz!Box via DHCP).
  2. Beim Aktivieren von OpenVPN wird das virtuelle Netzwerkinterface "tun0" konfiguriert.
    • Dem Interface "tun0" wird vom VPN-Server eine IP-Adresse a.b.c.d/32 zugewiesen. Der Netzbereich /32 besagt, dass es sich nur um einen einzelnen Rechner handelt.
    • In der OpenVPN Config ist ein weiterer DNS-Server definiert, der via VPN erreichbar ist. Wenn man eine moderne Linux Distribution mit systemd-resolved verwendet. kann man sich die konfigurierten DNS-Server mit dem Kommando "resolvectl" anschauen: > resolvectl dns
      Glabal: 10.20.0.1 192.168.178.1
      Link 2 (wls6): 192.168.178.1
      Link 3 (tun0): 10.20.0.1
    • Die IP-Adresse des VPN-Servers wird als Gateway für einen IPv4(!) Adressbereich gesetzt.
      • Dabei kann es sich um die Adressen in einem Firmennetz handeln (z.B. 10.1.0.0/16). Als Road Warrior oder im Homeoffice könnte man so einerseits via VPN mit den Servern in der Firma arbeiten und gleichzeitig ganz normal ohne VPN im Internet surfen.

      • VPN-Provider definieren 0.0.0.0/0 (alle IPv4 Adressen) als Adressbereich, für den der VPN-Server zuständig ist, um (fast) den gesamten IPv4 Traffic durch das VPN zu leiten.
Das reguläre Routing funktioniert bei dieser Konfiguration folgendermaßen:
  1. Wenn eine Internetanwendung (Browser, E-Mail Client, Daemon) einen Server mit einer IP aus dem Netzbereich des lokalen Netzes (IPs 192.168.178.1…255) kontaktiert, dann geht der Traffic sofort zur WLAN Schnittstelle, da direkte Verbindungsmöglichkeiten bevorzugt werden.

    Als allgemeine Routing Regel gilt: es wird immer die "most specific rule" verwendet.

    Das ist praktisch, weil so die Dienste im heimischen LAN trotz VPN erreichbar bleiben.

  2. Bevor der Browser einen Server kontaktieren kann, muss er einen DNS-Server nach der IP-Adresse fragen. In der Beispielkonfiguration sind zwei DNS-Server bekannt. Die Fritz!Box hat sich bei der Einrichtung der WLAN Schnittstelle als DNS-Server konfiguriert und leitet Anfragen an den Provider weiter. Außerdem wurde für das VPN ein weiterer DNS-Server eingerichtet.

    DNS Anfragen werden an alle bekannten DNS-Server gesendet und die Fritz!Box anwortet zuerst, da sie direkt im lokalen Netz erreichbar ist (siehe 1.) und nicht durch Verschlüsselung gebremst wird. Daraus ergibt sich, dass der DNS Verkehr nicht über das VPN läuft. Nur wenn die Fritz!Box keine Antwort weiß, hat der DNS-Server des VPN-Providers eine Chance.

    Wenn man DNS-Server im lokalen Netz immer sperren würde, dann könnte Namen von Diensten im lokalen Netz wie http://www.fritz.box nicht aufgelösen und WiFi-Hotspots Login Seiten würden nicht funktionieren. Die Konf. muss also dynamisch angepasst werden.

  3. Wenn eine Internetanwendung einen Server mit einer IPv6 Adresse kontaktieren möchte, dann geht der Traffic immer am VPN vorbei direkt über WLAN Schnittstelle und die Fritz!Box ins Internet, weil nur das Interface "wlan0" eine IPv6 Adresse hat und VPNs IPv6 ignorieren.

    Moderne Internetanwendungen bevorzugen IPv6. Sie fragen den DNS-Server zuerst nach einem AAAA-Record (IPv6 Adresse) und erst bei negativen Ergebnis nach einem A-Record (IPv4 Adresse). Wenn der gewünschte Server also via IPv6 erreichabr ist, läuft weder der DNS Datenverkehr über das aktive VPN (siehe 2.) noch der Nutztraffic zum Server.

  4. Nur wenn eine Internetanwendung einen Server kontaktiert, der ausschließlich via IPv4 Adresse und nicht im lokalen Netz erreichbar ist und außerdem in dem Adressbereich liegt, für den der VPN-Server als Gateway agiert, dann wird der Datenverkehr durch das VPN geschickt.
Wenn man den gesamten Datenverkehr durch das VPN schicken möchte, muss man nicht nur ein VPN konfigurieren sondern auch Maßnahmen, um Daten­verkehr am VPN vorbei zu unterbinden. IPv6 kann man abschalten und eine Firewall kann DNS Leaks u.ä. verhindern.