Linuxer können die Apps der VPN-Provider nutzen, wenn sie den gesamten Datenverkehr über einen VPN-Server leiten wollen. Das ist die einfachste Variante, bei der man Konfigurationsfehler vermeidet. Außerdem hat man in dem GUI einfachen Zugriff auf alle Server des Providers und kann mit einem Klick wechseln, um ein Land als Exit zu wählen und Geo-IP Sperren zu umgehen.
Die VPN Apps der VPN-Provider leiten rigoros den gesamten Traffic durch das VPN – PUNKT.
Linux bietet für Interessierte auch die Möglichkeit, mit Boardmitteln ein VPN oder mehrere VPNS zu konfigurieren (IPsec/IKEv2, Wireguard, OpenVPN). Damit ist man flexibler und kann sich viele interessante Konfigurationen bauen. Ein paar Beispielanwendungen:
Wenn der gesamte Datenverkehr zu einem VPN-Provider gehen soll, muss man sich auch um DNS- oder IPv6-Leaks kümmern. Dabei handelt es sich nicht um Bugs (im Sinne einer Fehlfunktion des VPN) sondern um Features im 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 sei eine Fritz!Box (andere Router funktionieren ähnlich) und ein OpenVPN wird aktiviert.
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 (Drucker oder Server im LAN) direkt von dieser Schnittstelle erreichbar sind ohne Routing.
Es kann sich auch um die Adressen in einem Firmennetz handeln (z.B. 10.10.0.0/16) oder das eigene Heimnetz zuhause (z.B. 172.22.22.0/24). Als Road Warrior oder im Homeoffice könnte man so einerseits via VPN mit den Servern arbeiten, die in der Firma bzw. zuhause stehen, und gleichzeitig ganz normal ohne VPN im Internet surfen.
In der OpenVPN Config wird ein weiterer DNS-Server definiert, der via VPN erreichbar ist.
Außerdem könnte man noch ein zweites VPN starten, wenn man beispielsweise als Road Warrior unterwegs den Internet Traffic zu einem VPN-Provider schicken möchte und gleichzeitig auf private Ressourcen im privaten Netzwerk zuhause oder in der Firma zugreifen möchte.
In diesem Fall werden in der Regel die Netzwerkschnittstellen tun1 und tun2 verwendet.
Im folgenden wird beschrieben, wie das Routing am Ende funktionieren sollte und mit welchen Tools man es verifizieren kann. Die Konfiguration der VPNs wird hier nicht beschrieben.
DNS: 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 bei der Einrichtung der WLAN Schnittstelle einen DNS-Server via DHCP konfiguriert und außerdem wurde für das bzw. die VPN(s) mindestens ein weiterer DNS-Server eingerichtet.
Wenn der DNS Daemon kein Split-DNS unterstützt, dann hat man ein Problem!!!
Die DNS-Anfrage werden parallel an alle bekannten DNS-Server gesendet (Fritz!Box und DNS-Server der VPNs) und das Ergebnis sind DNS-Leaks. Um DNS-Leaks zu vermeiden, muss man die unerwünschten DNS-Server aus der Konfiguration entfernen!
Man sollte deshalb einen modernen DNS Daemon zu verwenden, der Split-DNS kann.
Wenn der DNS Daemon Split-DNS unterstützt (z.B. systemd-resolved), dann ist alles ok. Mit den Kommandos "resolvectl" oder "systemd-resolve --status" kann man es sich anschauen.
Variante A: Wenn man einen VPN-Provider verwendet, der sich um den gesamten Traffic kümmern soll mit Ausnahme des heimischen Netzwerkes, dann sollte der DNS-Server des VPN-Providers der Server mit +DefaultRoute sein und der DNS-Server der Fritz!Box soll nur noch für die heimische Domain (z.B. fritz.box) verwendet werden (-DefaultRoute).
> systemd-resolve --statusVariante B: Wenn man das VPN als Road Warrior nutzt und neben dem normalen Internet Zugang zusätzlich Zugriff auf das internen Netz einer Firma oder das eigene Heimnetz haben möchte, dann sind DefaultRoute und DNS Domain umgekehrt zu konfigurieren.
Wenn man beispw. von unterwegs zusätzlich auf ein privates Netz 172.22.22.0/24 mit dem DNS-Server 172.22.22.3 und dem DNS Suffix grotta.del.cane zugreifen möchte, dann muss das Split-DNS Routing nach dem Aktivieren des VPNs wie folgt aussehen:
> systemd-resolve --statusVariante C: Wenn man mit zwei VPNs arbeitet und den Internet Traffic zu einem VPN-Provider schicken und gleichzeitig über ein zweites VPN auf heimische Ressourcen zugreifen will, dann müsste die Split-DNS Konfiguration am Ende so aussehen;
> systemd-resolve --statusIPv4: Das Routing des IPv4 Traffic kann man sich mit dem Befehl "ip route" anschauen:
> ip routeAls allgemeine Routing Regel gilt: es wird immer die "most specific rule" verwendet.
Die erste Zeile mit default legt fest, wo der Traffic hinfließen soll, der im weiteren nicht näher spezifiziert wird. Weitere default Zeilen werden ignoriert. Im Beispiel werden diese Daten zum VPN-Interface tun0 geschickt.
Traffic in das Netz des VPN Providers, in ein Firmennetz oder ein privaten Netz wie die grotta.del.cane wird zum VPN-Interface tun0 geschickt. Im Beispiel ist es 10.18.0.0/16.
Der Server mit der IP-Addr. 37.58.58.230 ist der VPN-Server. Der (verschlüsselte) Datenverkehr zu diesem Server muss zum Router über das WLAN Interface geschickt werden.
Wenn ein Server mit einer IP-Adresse aus dem Netzbereich des lokalen Netzes (IPs 192.168.178.1…255) kontaktiert wird, dann geht der Traffic sofort zur WLAN Schnittstelle. Das ist praktisch, weil so die Dienste im heimischen LAN trotz VPN erreichbar bleiben.
Außerdem ist die IP-Addr. 192.168.178.1 der Fritz!Box via WLAN Interface ereichbar.
Das Beispiel sollte genügen, um auch andere Konfiguration verifizieren zu können.
IPv6: Wenn eine Internetanwendung einen Server mit einer IPv6 Adresse kontaktieren möchte, dann geht der Traffic im Beispiel immer am VPN vorbei direkt über WLAN Schnittstelle und die Fritz!Box ins Internet, weil nur das Interface "wlan0" eine aktive IPv6 Adresse hat.
Moderne Internetanwendungen bevorzugen IPv6. Sie fragen den DNS-Server zuerst nach einem AAAA-Record (IPv6 Adresse) und erst dann nach einem A-Record (IPv4 Adresse). Wenn der Server also via IPv6 erreichbar ist, läuft der Datenverkehr NIE über ein VPN!
Das kann zum Problem werden, wenn man den gesamten Datenverkehr durch das VPN schicken möchte. In diesem Fall muss man Maßnahmen ergreifen, um Datenverkehr am VPN vorbei zu unterbinden. IPv6 muss man abschalten (oder mit einer Firewall blockieren).