Externe Domainnamen im internen Netz verwenden

Dieser Blog-Eintrag beschreibt ein paar kleine Problem, die man haben kann, wenn man mit dem Handy oder Tablet auf die Inhalte eines Servers im lokalen Netzwerk zugreifen und dabei den externen Hostnamen verwenden will.

Wenn man ein Webserver zu hause hat, dann hat man für diesen in der Regel auch einen externen Hostnamen, damit dieser aus dem Internet über diesen Hostnamen erreichbar ist (z.B. meinserver.example.com). So kann man dann von unterwegs zum Beispiel auf OwnCloud, NextCloud, E-Mails oder was auch immer zugreifen. Dafür gibt es ja diverse Möglichkeiten, z.B. über DynDNS Service oder für Besitzer einer FritzBox über MyFritz. Wenn man zu hause ist (also im eignen LAN/WLAN) sollte dieser Zugriff natürlich auch einwandfrei funktionieren. Damit meine ich, dass man den Server auch intern über seinen Hostnamen erreicht und diese Verbindung ausschließlich über das interne Netz erfolgt. Das hat dann diverse Vorteile:

  • SSL-Zertifikate für verschlüsselte Verbindungen (z.B. von Let’s Encrypt), können auch im eigenen Netz verwendet werden. Diese Zertifikate sind für den externen Hostname ausgestellt, also z.B. meinserver.example.com. Würde man intern über einen anderen Hostnamen oder die lokale IP-Adresse zugreifen, würde der Browser eine Fehlermeldung wegen dem ungültigen Hostnamen anzeigen (Firefox: SSL_ERROR_BAD_CERT_DOMAIN).
  • Man braucht am Mobilgeräte keine zwei Konfigurationen für interne und externe Zugriffe, z.B. für Datei-Synchronisation oder automatische Backups.
  • Man kann Dienste nutzen, die nur im lokalen Netz zur Verfügung gestellt werden und die extern nicht erreichbar sein sollen (z.B. die Smart-Home-Steuerung).
  • Lokale Zugriffe sind deutlich schneller, dazu gleich mehr.

Mir sind dabei ein paar Probleme aufgefallen, deren Lösung ich hier kurz beschreiben möchte.

Das erste Problem ist mir bei OwnCloud aufgefallen. Über die App „FolderSync“ wollte ich von meinem Handy Backups auf OwnCoud sichern (über WebDav). Das war allerdings unglaublich langsam. Bei NextCloud war es das gleiche Problem. Auch andere Sync-Apps hatten das Problem. Wenn ich von meinem PC über WebDav Dateien auf OwnCloud oder NextCloud kopiert habe, war es schnell. Es musste also etwas mit der Verbindung von Handy zum Server zu tun haben. Die Logfiles vom Webserver haben mich dann auf die Ursache gebracht: Die Android-Geräte haben sich mit einer externen IP-Adresse zum Server verbunden. Wie kommt es dazu?

  1. Das Mobilgerät erhält seine IP-Adresse, Gateway und DNS-Server über DHCP vom Router (in meinem Fall eine Fritzbox). DNS-Server ist der Router.
  2. Beim Verbindungsaufbau zu meinserver.example.com fragt das Mobilgerät seinen DNS-Server (den Router) nach der IP-Adresse.
  3. Der Router kennt nur den internen Namen des Servers und fragt daher bei einem externen DNS-Servern nach.
  4. Dieser liefert die externe IP-Adresse zurück, die man momentan hat.
  5. Das Mobilgerät macht den Verbindungaufbau über die externe IP-Adresse. Damit verlässt sämtlicher Netzwerktraffic erst das lokale Netz, geht zum ersten Router des Providers und geht dann wieder zurück über den eigenen Router ins lokale Netz.

Ich musste also den Mobilgeräten irgendwie beibringen, dass der externe Hostname über die interne IP-Adresse viel schneller erreichbar ist als über die externe IP. Die einfachste Möglichkeit wäre eigentlich, wenn man den Hostname des Servers direkt am Router einstellen könnte. Dann könnte der die Frage nach der IP direkt beantworten. Zumindest die FritzBox kann das aber nicht, weil im Hostname keine Punkte erlaubt sind. Die Lösung war für mich DNSMASQ, ein kleiner DNS-Server, der am Server installiert wird und der die Frage nach seinem Hostname direkt mit seiner lokalen IP beantwortet (Testen unter Linux z.B. mit dig @meinserver meinserver.example.com, die Antwort sollte die lokale IP-Adresse sein, z.B. 192.168.0.2). Über die FritzBox kann man festlegen, dass alle Geräte, die ihre Netzwerkeinstellungen per DHCP erhalten, einen bestimmten DNS-Server nutzen sollen. Dort einfach die lokale IP-Adresse des Servers eintragen, auf dem DNSMASQ läuft (zweiter DNS-Server wird die FritzBox selbst).

Das zweite Problem hatte ich nach der Umstellung auf VDSL: Mit der neuen FritzBox 7560 hat das alles nicht mehr funktioniert, obwohl es noch so konfiguriert war, wie zuvor. Zumindest dachte ich das. Sämtliche Android-Mobilgeräte nutzten wieder die externe IP-Adresse. Mit den Apps „Ping & DNS“ und „DNS Debugger“ hab ich dann auch den Grund dafür gefunden: Über die neue FritzBox haben die Mobilgeräte IPv6-Netzwerkadressen erhalten und damit auch den eignen DNS-Server ignoriert. Die Lösung war in diesem Fall ganz einfach: IPv6 in der FritzBox abschalten und schon funktioniert es wieder wie zuvor.