Login
Newsletter
Werbung

Do, 5. April 2012, 15:00

Dynamisches DNS-Update im lokalen IPv4/IPv6-Netzwerk

Dynamische DNS-Updates in einem lokalen Netzwerk, in dem IPv4 und IPv6 parallel eingesetzt werden, sind mit verschiedenen Nameservern und in verschiedenen Szenarien möglich. Dabei kommen einige einfache Daemonen zu Hilfe.

Im Artikel »IPv6-basiertes Heim-Netzwerk« ging es um den Einsatz von IPv6 im Heim-Netzwerk, wobei eine einfache Lösung zur automatischen Namensauflösung vorgestellt wurde. In diesem ausführlicheren Artikel soll das Thema vertieft werden. Vor allem soll das dynamische DNS-Update betrachtet werden, und zwar mit verschiedenen Nameservern und in verschiedenen Szenarien, in denen IPv4 und IPv6 parallel eingesetzt werden.

Bei der Verwendung von IPv4-Adressen ist das Ansprechen der verschiedene Geräte im heimischen Netzwerk kein Problem, sofern ein Nameserver, welcher DDNS unterstützt, und DHCP verwendet werden, oder die Konfiguration der Rechner mit z.B. Avahi geschieht. Bei einem IPv6-basierten Netzwerk sieht es leider nicht mehr so rosig aus. Das Gespann DHCP und named (BIND) erlaubt es leider nicht ohne weiteres, unter gängigen Distributionen ein dynamisches Update vorzunehmen. Wenn sowohl für IPv4 als auch für IPv6 DHCP verwendet wird, sind zudem weitere Probleme vorprogrammiert. Avahi sollte die DNS-Frage lösen. Es versteht zwar IPv6, aber die zugrunde liegenden Normen basieren auf IPv4, und die Umsetzung für IPv6 ist unausgegoren.

Wenn die verschiedenen Geräte des Netzwerks sowohl miteinander als auch mit der Außenwelt kommunizieren, müssen einige Vorkehrungen getroffen werden.

DNS mit ICMPv6

Das Internet Control Message Protocol in der Version v6 (ICMPv6) sieht unter anderem eine Erweiterung zur Behandlung von Node-Informationen vor (RFC 4620). Unter Verwendung des Protokolls ist es möglich, Name und IP-Adresse der verschiedenen Systeme im Netzwerk abzufragen.

Unglücklicherweise wird dies durch den Linux-Kernel nicht unterstützt. Ein Programm, das Node-Informationen liefern kann, ist ist aber erhältlich (ninfod). Als Gegenstück konnte ich nur das Tool Ping6 finden. Damit ist es möglich, per Skript für ein Update des DNS-Servers zu sorgen. Diese Lösung ist aber nicht elegant.

Auf Basis dieser Erkenntnisse habe ich einen kleinen Daemon (ninsd) geschrieben, der in der Lage ist, sämtliche Daten, die zum Update des Nameservers notwendig sind, zu ermitteln. Als Nameserver wurde named genommen. Seine Updates erhält er über das Tool nsupdate, das bei verschiedenen Linux-Distributionen zum Lieferumfang gehört. Wenn ein anderer Nameserver Verwendung findet, kann das Update der DNS-Informationen über ein Skript geschehen.

Aus der Sicht des Clients sind praktisch keine Konfigurationsarbeiten notwendig. Ein ähnliches Verhalten wie bei IPv4 bei der Adressenvergabe per DHCP wird erreicht. Einige Informationen, die vom DHCP-Server lieferbar sind, wie z.B. der Zeitserver ntp, können den Clients zwar nicht übermittelt werden. Dies dürfte aber kein Problem darstellen. Distributionen sehen meist das Holen der Zeit von einem öffentlichen Zeitserver vor.

Im Rahmen der Tests stellte sich heraus, dass ein Update des Nameservers zwecklos ist, wenn auf diese Daten nicht zurückgegriffen werden kann, weil manche Informationen in der Datei /etc/resolv.conf des Clients, zum Beispiel wegen eines Verbindungsabbruchs, nicht (mehr) vorhanden sind, oder nur weil das Setzen des Eintrages »search« oder »domain« nicht erfolgt.

Daraus resultierte ein weiteres kleines Programm, radvc, welches die Router Advertisement-Nachrichten des Daemons radvd auswertet und die Datei /etc/resolv.conf ergänzt oder neu erstellt. Radvd erlaubt eine automatische Konfiguration der IPv6-Adresse des Gerätes ohne Zutun eines DHCP-Servers. Die Einträge für die Datei /etc/resolv.conf können von radvd übermittelt werden (Adressen der Nameserver und Domain-Suchliste).

Bei der Entwicklung der Daemons wurde auf eine leichte Konfigurierbarkeit geachtet. Radvc benötigt weder eine Konfigurationsdatei noch spezielle Parameter. Ninsd benötigt lediglich die Angabe der Netzwerkschnittstelle (z.B. eth0), an der die weiteren Geräte angeschlossen sind.

DHCP ist natürlich weiter einsetzbar, aber damit die Namensauflösung funktioniert, ist es zwingend notwendig, Server-seitig radvd laufen zu lassen. Es soll nicht verschwiegen werden, dass eine anonymisierte Adresse unter Zuhilfenahme von DHCP nicht wirklich gegeben ist. Bei DHCP wird normalerweise immer die gleiche Adresse verwendet, wenn eine zustandslose Konfiguration vorgenommen wird.

Durch eine sehr einfache Umkonfiguration des Systems wird nach jedem Hochfahren der Schnittstelle eine per Zufallsgenerator gebildete Adresse (untere 64 Bit) generiert. Ein Eintrag net.ipv6.conf.all.use_tempaddr=2 in der Datei /etc/sysctl.conf ist hierfür ausreichend. Diese Anpassung sollte auf jedem System, welches Verbindung mit dem Internet hat, vorgenommen werden. Anstelle von all kann auch ein schnittstellenspezifischer Eintrag wie net.ipv6.conf.eth0.use_tempaddr=2 vorgenommen werden.

Kommentare (Insgesamt: 3 || Alle anzeigen )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung