Exkurs: JDNS


[_HOME_] ... [Übergeordnete Seite]  ... [Vorherige Seite] ... [Nächste Seite] 


Übersicht:


Vorbemerkung

Im Folgenden findet im Rahmen eines "Exkurses" eine kurze Beschreibung eines auf Java basierenden, erweiterbaren Secure Domain Name Service Systems (DNS) statt. Das System wurde auf der RSA Data Security Conference im Januar 1998 von Ashar Aziz vorgestellt, der auch maßgeblich an der Entwicklung dieses Systems beteiligt ist. Quelle der hier dargestellten Informationen ist ein für diese Konferenz erstellter Artikel von Ashar Aziz (SUN Microsystem, Inc.).

Während der Fokus der RSA Data Security Conference näturlich auf Verschlüsselungs- und Datenschutzaspekten lag, auf die hier nicht näher eingegangen werden soll, ist das JDNS System ein gutes Beispiel für die Erweiterbarkeit eines auf Java basierenden Server Systems und für die Motivation, Server-Systeme in Java zu implementieren.

Leider konnte das System nicht in Form installierbarer Software im Internet gefunden werden. Lediglich ein anderer auf Java basierender DNS konnte gefunden werden: Java DNS.

Die traditionelle Aufgabe eines  DNS Servers ist die Auflösung von Hostnamen (wie z.B. www.fh-wedel.de) in die entsprechende IP-Nummer. Des weiteren unterstützt DNS auch verschiedene Verzeichnislisten der elektronischen Post (Mail Exchange) und IP-Adressen.

[Seitenanfang]


Allgemeine Eigenschaften von JDNS

JDNS ist ein auf Java basierendes, skalierbares und dynamisch erweiterbares Domain Name Service (DNS) System. Das System ist in der Lage, neben herkömmlichen DNS Resource Records (RR) - z.B. IP-Nummern für Host-Namen - öffenliche Schlüssel und anderweitige Authentifizierungsdaten zu verteilen. Die dynamische Erweiterbarkeit wird durch den Einsatz der Java-Technologie, die Sicherheit durch die Implementierung des Secure DNS Protokolls erreicht.

Weitere Einsatzbereiche des Systems, liegen in der möglichen Erweiterbarkeit der Verschlüsselungsmöglichkeiten bei der Datenübertragung, sowie die Verteilung von beliebigen Informationen durch die Einführung von neuen Resource Records (RR). Als besonderer Vorteil des Systems ist die Erweiterung der Funktionaltät des Systems während der Laufzeit zu nennen. Dies wird insbesondere durch den Einsatz von Java-Servlets erreicht. Servlets ermöglichen das System für benutzerspezifische Abfrage Verarbeitung, Verarbeitung neuer DNS RR-Typen, Anpassung an DBMS zur Speicherung der DNS-RR und weitere Funktionalitäten anzupassen.

JDNS implementiert einen DNS-Server, -Resolver und Client-Dienst, wobei traditionelle Clients ohne Anpassung auf das JDNS System zugreifen können.

[Seitenanfang]


Motivation

Die derzeitige und wohl auch zukünftige Allgegenwärtigkeit des DNS-Systems im Internet soll zur Verteilung von weiteren Informationen ausgenutzt und erweitert werden. Da zukünftige Erweiterungen heute noch ungewiss bzw. nicht standardisiert sind, setzt dies eine dynamische Erweiterbarkeit des Systems voraus. (Zum Beispiel: für den Aufbau einer sicheren Verbindung zu einem Server wird dessen öffentlicher Schlüssel benötigt.)

Die Implementierung von Sicherheitsmechanismen und die Verwaltung von öffentlichen Schlüsseln ist derzeit ein bedeutendes Problem in großen Netzwerden (inkl. dem Internet). Zwar sind schon jetzt die derzeitigen DNS-Protokolle prinzipiell erweiterbar und neue RR-Typen können eingeführt werden, doch die traditionellen DNS-Systeme können für die Funktionalität neuer Protokolle nur auf umständlichen Wege angepasst werden. Im Allgemeinen müssen diese Systeme um neue Softwarekomponenten ergänzt, compiliert und neu installiert werden - dies jeweils in Abhängigkeit von der benutzten Betriebssystemplattform.

[Seitenanfang]


Architektur, Design und Implementation

JDNS ist als ein dynamisch erweiterbares System entworfen, das die Protokolle Standard DNS, Secure DNS, DNS Update, Secure Update, IXFR und Notify unterstützt.

Analog zum HotJava Webbrowser kennt das System keine Arten von DNS Record Typen. Der Server ist lediglich als eine Art Container Shell anzusehen, der verfeinerte Java Klassen lädt, um die verschiedenen Resource Typen und deren spezifischen Algorithmen verarbeiten zu können.

JDNS Server Implementation

JDNS_Abb_2.gif (13675 Byte)

Auf oberster Ebene initialisiert JdnsServerMain den sogenannten Zonen-Katalog (Klasse ZoneCatalog) und die darin enthaltenen Zonen-Objekte (Klasse: Zone). Über 2 verschiedene Threads (ServerUDP-Listener und ServerTCP-Listener) wartet das System auf eingehende DNS-Anfragen. Beide Threads implementieren das Java Runnable Interface und haben Zugriff auf den Zonen-Katalog, um Anfragen beantworten zu können.

Beide Listener-Threads spannen einen weiteren Thread, den DNSEventHandler auf. Der DNSEventHandler untersucht die eingehende DNS-Anfrage und erzeugt ein DNSQuestion-Objekt, welches als Eingabe für die Suche im Zonen-Katalog dient. Die vom Zonen-Katalog erhaltene Antwort (DnsAnswer-Objekt) wird duch den DnsEventHandler zu einer DNS-Anwort aufbereitet und an das anfragende System zugerückgesendet.

Die Klasse Zone im Zonen-Katalog ist von der generischen Tree-Klasse abgeleitet und implementiert eine hierarchisch organisierte Datenbank Jeder Knoten des Baumes repräsentiert JdnsRR Objekte. JdnsRR Objekte stellen hierbei die Resource-Record Einträge des Zonen-Master-File dar.

Der Zonenkatalog bzw. die Zonen-Objekte werden über den RRInputStream initialisiert. Als Eingabe dient hierbei entweder ein Zonen Master File (z.B. einfache Textdatei mit den jeweiligen Einträgen) oder aber der Austausch von Zonen-Daten über das Netzwerk (DNS-Server tauschen ihre Daten in bestimmten Abständen in sogenannten Zonen-Transfers aus).

Unterstützung von verschiedenen RR-Typen durch verfeinerte Java-Klassen

Wie zuvor beschrieben,  beinhaltet der  Zonen-Katalog die verschiedenen RR-Einträge. Die dynamische Erweiterung von RR-Einträgen findet durch die Implementation von jeweiligen Klassen statt, die die Eigenschaften und die Funktionalität der Einträge charakterisieren.

Die Elternklasse aller JDNS-RR-Klassen ist dabei die generische Klasse JdnsRR, die allgemeine Eigenschaften und Methoden deklariert (Z.B. das decodieren und codieren von RR-Einträgen des Master-Files in die jeweiligen Java-Instanzen und zurück).

Ein spezieller RR-Typ wird durch Vererbung der Elternklasse implementiert. Die Zuordnung zu der jeweiligen Java-Klasse wird über eine Namenskonvention vorgenommen. Ein RR vom Typ A ist bspw. ein Eintrag für die Zuordnung Hostname zu IP-Nummer. Die Klasse, die diesen RR repräsentiert, ist die die Klasse Jdns_A_RR. Das allgemeine Namensschema ist hierbei: Jdns_<Typenkürzel>_RR. Durch diese Namenskonvention ist der DNS-Server in der Lage, die jeweils zuständige Klasse zur Bearbeitung anzuwenden, bzw. auch die Klasse, sofern sie nicht lokal vorhanden ist über das Netz zu laden.

Wird nun an einer Stelle ein neuer RR-Typ definiert (z.B. ein RR-Typ für einen öffentlichen Schlüssel eines Servers) werden die RR-Einträge, wie gewohnt beim Zonen-Transfer an weitere Server weitergereicht. Der Empfänger-Server kennt dabei den neuen RR-Typ noch nicht, und erhält den RR-Eintrag in Form eines Objektes, das von der Klasse JdnsRR abgeleitet ist. Die Klasse JdnsRR enthält ein Attribut, das eine zum RR-Eintrag gehörende Typennummer enthält, und über eine weitere Klassen findet eine Zuordnung von Typennummer zu dem Namen der Java-Klasse statt, die die Funktionalität des RR-Eintrages repräsentiert. Der Empfänger-Server, weiß also nun welche Java-Klasse er über das Netzwerk laden muß, um den neuen RR-Eintrag verarbeiten zu können.

Administration über GUI

Die Administration von JDNS findet über ein komfortables "Graphical User Interface" (GUI) statt, das in jedem Java-fähigen Web-Browser ablaufen kann.

Das GUI erlaubt sowohl die textuelle wie auch die grafische Repräsentation und das Editieren der Zonen Daten. Neue RR's überschreiben dabei eine Methode ihrer Elternklasse JdnsRR, die für die Darstellung der Informationen im GUI verantwortlich ist.

[Seitenanfang]


[_HOME_] ... [Übergeordnete Seite]  ... [Vorherige Seite] ... [Nächste Seite]