Kleiner Forti-Tipp: Wie funktioniert die Namensauflösung bei Split-Tunneling und dem integrierten Android/iOS VPN Client?

von Magnus Witzik

Damit es auch mit dem VPN aus iOS und Android ordentlich klappt!

Immer wieder werde ich zu den Themen Fortinet(gate) und VPN konsultiert. Eine durchaus wiederkehrende Thematik ist dabei, wenn "Split-Tunneling" in Verbindung mit "Split-DNS" kombiniert auftritt. Und während dies grundsätzlich wenig Probleme bereiten sollte, so kann es ganz speziell mit den integrierten Clients der mobilen Betriebssysteme Android und iOS einige Schwierigkeiten bereiten.

Daher sollten wir uns zuerst vielleicht - für den einen oder anderen eine interessante Grundlage - die Mechanismen ansehen, die in solchen Konfigurationen zum Einsatz kommen und warum man sich benötigt.

Die notwendigen Begriffe erklärt

Split-Tunneling

Einer der häufigsten Mechanismen in der Steuerung des Datenverkehrs in VPN Verbindungen ist das sogenannte "Split Tunneling". Was verbirgt sich dahinter? Man möchte einfach nicht sämtlichen Datenverkehr in den VPN Tunnel packen, der nicht von den VPN Endpunkten verarbeitet werden soll. Einfaches Beispiel:

Normal würde ein VPN Client sich als Default Route für alle Datenpakete einrichten, egal in welche Netze sie gehen. Sprich, würde man ein herkömmliche Internetseite aufrufen, wird der Aufruf an die Firewall / VPN Endpunkt der VPN Verbindung geschickt, die diesen Verkehr dann abarbeiten muss - sofern konfiguriert. Dies kann erwünscht sein, wenn man man z.B. die Filterfunktionen der Firewall nutzen möchte. Bedeutet aber auch, dass im Endeffekt die Firewall - und vor allem die Internetverbindung dahinter - nicht nur mit dem "normalen" Aufkommen aus dem internen Netzwerk fertig werden muss, sondern auch sämtlichen, aggregierten Verkehr aus allen VPN Verbindungen.

Abhilfe schafft hier eben das sogenannte Split-Tunneling. Hierbei wird vom VPN Client eine Route in die benötigten Zielnetze (also die Netzsegmente am anderen Ende des Tunnels) gesetzt. So wird "nur" der Verkehr in den Tunnel gepackt, welcher auch wirklich für die entsprechenden Netze bestimmt ist. Der restliche Datenverkehr benutzt das sogenannte "Default Gateway" um verschickt zu werden.

Wie funktioniert Split-Tunneling? Was ist der Anwendungszweck?

Split-DNS

Damit Split-Tunneling aber so richtig effektiv funktioniert, ist ein weiterer Baustein notwendig: Split-DNS.

Doch warum Split DNS? Das ist recht einfach erklärt: in internen (nicht öffentlichen) Netzwerken, werden natürlich ebensolche IP Adressen verwendet. Wenn man sich nun von extern über einen VPN Tunnel verbindet, so haben wir gerade die Möglichkeit besprochen, dass wir mit Split Tunneling nur den für die interne Netzwerkumgebung relevanten (bestimmten) Verkehr in den Tunnel packen. Ohne einer akkuraten Namensauflösung, also einer, die zwischen internen und öffentlichen Adressen unterscheidet, ist der Tunnel dann aber noch nicht komfortable benutzbar. So sind zwar durch das Split Tunneling an nur die internen Bereiche durch den Tunnel erreichbar - während eben alle anderen IP Adressen außerhalb am Tunnel vorbei ins Internet gehen - allerdings wird dc.fqdn.intern nicht zu einer gewünschten Auflösung führen. Daher wird nicht der "normale" DNS benutzt, sondern die Auflösung des hinter dem Tunnel angebundenen Netzwerks für bestimmte Domänen Namen. Somit sind dann alle Bereiche per Namensauflösung entsprechend erreichbar.

Warum braucht man "Split-DNS"?

Die Problemstellung

Und während das Split-Tunneling selbst bereits einfach nach Durchführen des entsprechenden Assistenten zur Einrichtung eines VPN Tunnels funktioniert, birgt Split DNS ein paar Probleme mit sich, wenn vor allem um die integrierten VPN Clients von Android und iOS geht: Die Namensauflösung über die zuständigen DNS funktioniert einfach nicht. Dies ist natürlich extrem ärgerlich und gibt im ersten Moment ein Rätsel auf: der Traffic scheint einfach nicht korrekt auf der Firewall zu landen, obwohl scheinbar alles richtig konfiguriert worden ist.

Symptome:

  • Der Traffic wird prinzipiell richtig geroutet - ein Ping auf die betroffenen IP Adressen bringt ans Licht, dass diese erreichbar sind.
  • Allerdings geht kein Service.
  • Die Firewall Policies für den Tunnel weisen keinen Traffic und keine Logs auf.

Die Lösung?

Nachdem wir uns jetzt recht einfach die Aufgabenstellung und das Problem angesehen haben, liegt die Problematik ja bereits auf der Hand: der notwendige DNS wird nicht benutzt. Doch warum?

Die GUI der Fortigate erlaubt es nicht, die notwendigen Settings zu definieren, die aber grundsätzlich vorhanden sind. Man muss sich daher (via SSH oder dem CLI Tool des Webinterfaces) auf die CLI der Fortigate verbinden. Dort findet man auf einfache Art und Weise die Lösung (kann im Laufenden Betrieb implementiert werden).

Lösung SSL VPN:

config vpn ssl settings
    set dns-suffix example.com
end

Lösung IPSec Tunnel (Built-in Android / iOS):

config vpn ipsec phase1-interface
    edit <tunnel_name>
        set mode-cfg enable
        set type dynamic
        set ipv4-dns-server1
        set ipv6-dns-server1
        set unity-support enable
        set domain <domain>,<domain1>,<domain2>
    next
end
 

Kommentare

zurück zum opti-Blog

Kommentare

Einen Kommentar schreiben

Bitte addieren Sie 3 und 5.