Benutzer:Apc00-tony/Dynamisches DNS: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
Zeile 43: Zeile 43:
== Kommunikationsprotokoll Client<=>Server ==
== Kommunikationsprotokoll Client<=>Server ==


Ein einziges Nachrichtenpaar von Anfrage und Antwort genügt, um einen dynamischen DNS-Eintrag einzurichten. In der Beispielimplementierung erfolgt die Kommunikation über HTTP, und die Anfrage des Clients könnte so aussehen:
Ein einziges Nachrichtenpaar von Anfrage und Antwort genügt, um einen dynamischen DNS-Eintrag einzurichten: Der Client teilt die IP-Adresse und den Domainnamen mit, die in einem DNS-Eintrag verbunden werden sollen; der Server bestätigt den Auftrag.


GET /cgi-bin/ddns?hostname=einwahl.example.com&myip=87.65.43.21 HTTP/1.1
In der Beispielimplementierung erfolgt die Kommunikation über HTTP, und die Anfrage des Clients könnte so aussehen:
Host: ddns.beispiel.de
 
GET /cgi-bin/ddns?hostname=einwahl.example.com&myip=87.65.43.21 HTTP/1.1
Host: ddns.beispiel.de


Bei Erhalt dieser Anfrage ruft Apache das CGI-Programm .../doms/ddns.beispiel.de/cgi-ssl/ddns auf. Das Fragezeichen trennt den Programmnamen von einem "Query-String", in dem zwei Metavariablen definiert und übergeben werden. Die erste Metavariable, hostname, hat den Wert "einwahl.example.com"; die zweite, myip, hat den Wert "87.65.43.21".
Bei Erhalt dieser Anfrage ruft Apache das CGI-Programm .../doms/ddns.beispiel.de/cgi-ssl/ddns auf. Das Fragezeichen trennt den Programmnamen von einem "Query-String", in dem zwei Metavariablen definiert und übergeben werden. Die erste Metavariable, hostname, hat den Wert "einwahl.example.com"; die zweite, myip, hat den Wert "87.65.43.21".
Zeile 54: Zeile 56:
Im Falle unserer Beispielimplementierung sieht die Antwort bei Erfolg so aus:  
Im Falle unserer Beispielimplementierung sieht die Antwort bei Erfolg so aus:  


HTTP/1.1 200 OK
  HTTP/1.1 200 OK
Server: Apache/2.0.49
  Date: Wed, 22 Apr 2020 08:35:15 GMT
Content-Language: de
  Server: Apache
Content-Type: text/html
  Content-Length: 17
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/312.8
  Content-Type: text/plain; charset=ISO-8859-1
  good 87.65.43.21
 
=== Das DDNS-Protokoll von DynDNS.org ===
 
In den 90er Jahren, bevor das Internet so durchgehend vergeschäftlicht wurde, boten einige Organisationen kostenlose Dynamisches-DNS-Dienste an. Ein sehr beliebtes Angebot war das von DynDNS.org. Das DDNS-Protokoll von diesem Dienst wurde sogar in Einwahl-Routern einprogrammiert und der Dienst wurde von ISPs und Router-Herstellern als Leistungsmerkmal beworben.
 
DynDNS.org gehört inzwischen Oracle und bietet keine kostenlose Dienste mehr. Dennoch wird das DDNS-Protokoll von DynDNS.org in der vorliegenden Beispielimplementierung übernommen in der Hoffnung, daß die Kompatibilität mit einigen gängigen Einwahl-Routern von Vorteil sein kann.
 
Das gesammte Protokoll sieht einen einzigen Nachrichtenaustausch aus Anfrage und Antwort vor. Die Anfrage kann mehrere Argumente enthalten; die Antwort kann verschiedene Code-Wörtern enthalten. Übrigens können in einer einzigen Anfrage mehrere DNS-Einträge gewünscht werden. In diesem Fall kann die Antwort mehrzeilig ausfallen.
 
====Anfrage====
 
ölkjölkj
 
====Antwort====
 
lkjhlkjh


== Bedingungen ==
== Bedingungen ==

Version vom 22. April 2020, 09:00 Uhr

((Provisorischer Vorspann: Auf Grund einer Mailing-Listen-Diskussion habe ich angefangen, Dynamisches DNS über einen CGI-Skript bei Hostsharing zu realisieren. Meine Lösung habe ich dann vorgestellt; sie wurde für nicht ausreichend selbsterklärend befunden und fand wenig Akzeptanz. Hier also der Versuch, die Sache zu dokumentieren.))

Mit der regelmäßigen Aufnahme von benutzerspezifischen Zonefiles in seiner DNS-Konfiguration bietet Hostsharing alles, was man braucht, um "dynamisches DNS" in Eigenregie zu realisieren.

Das heißt, wenn ich mindestens eine Domain bei Hostsharing habe, und mindestens eine Einwahlverbindung ins Internet über irgendeinen ISP für meinen Arbeitsplatzrechner zu Hause, dann kann ich dem Arbeitsplatzrechner über die DNS-Server von Hostsharing einen vollqualifizieren Domainnamen zuweisen, der der jeweiligen IP-Adresse meiner Einwahlleitung zugeordnet ist.


(ASCII-Art-Diagramm der beschriebenen Konstellation)

Im Folgenden wird eine real existierende Implementierung von Dynamischem DNS beschrieben. Die verschiedenen Elemente könnten durchaus anders realisiert werden; die beschriebene Implementierung könnte durchaus verbessert werden. Sie dient hier der Illustration.

In der folgenden Beschreibung werden diese Beispielwerte benutzt:

  • Ein Hostsharing-Mitglied hat ein Account als Paket-Admin mit Kennung xyz00.
  • Im Paket xyz00 gibt es einen Domain-Admin namens xyz00-benutzername.
  • Dieser Domain-Admin hat bei Hostsharing eine Domain namens example.com und
  • zu Hause (oder im Büro) einen Arbeitsplatzrechner hinter der marktüblichen DSL-Leitung, die von seinem ISP bereitgestellt wird.
  • Der Domain-Admin möchte seinen Arbeitsplatzrechner aus dem Internet unter dem Hostnamen einwahl.example.com ansprechen.

Aufgaben des Servers

Um einem Einwahlrechner einen dynamischen DNS-Eintrag zu bieten, muß der Hostsharing-Server folgendes leisten (in ungefährer Reihenfolge der Ereignisse):

  1. Eine Anfrage entgegennehmen, beispielsweise über HTTPS, von einem entfernten Rechner, der einen DNS-Eintrag für seine momentane IP-Adresse wünscht.
  2. Prüfen, ob die Anfrage einen berechtigten Dynamisches-DNS-Usernamen mit zugehörigem Paßwort enthält.
  3. Prüfen, ob die Anfrage einen gültigen Domainnamen betrifft, den der Server bieten darf.
  4. Prüfen, ob die Domain example.com demselben Benutzer gehört, unter dessen Namen der Dynamisches-DNS-Server läuft.
  5. Eine gültige Zonefile mit – neben dem bisherigen Inhalt – einem A-Eintrag für einwahl.example.com in /home/pacs/xyz00/users/benutzername/doms/example.com/pri.example.com schreiben.
  6. Dem Client eine Bestätigung oder ggf. eine Fehlermeldung als Antwort senden.
  7. In einer Logdatei protokollieren, daß obiges getan wurde, oder ggf. welche Fehler traten auf.

Aufgaben des Clients

Bevor ich anfange, meinen Arbeitsplatzrechner so zu konfigurieren, daß er bei welchem Server auch immer einen dynamischen DNS-Eintrag anfordert, muß ich mich als verantwortlicher Benutzer dieses Rechners und der dazugehörigen Internetverbindung – das heißt, als Mensch – mit dem Betreiber des dynamisches-DNS-Servers vereinbaren, daß ich das darf und welchen Eintrag ich bekommen kann. Im Folgenden wird vorausgesetzt, daß solche Vereinbarungen getroffen und die Parameter geklärt wurden.

Der Dynamisches-DNS-Client muß aus Server-Sicht nur wenig leisten:

  1. Eine Anfrage senden, beispielsweise über HTTPS, an einen entfernten Rechner, der einen Eintrag ins DNS für die momentane IP-Adresse des Clients vornehmen kann.
    Diese Anfrage muß einem festgelegten Format entsprechen und muß gültige Werte für die Authorisation des Clients, den gewünschten Domainnamen, und eventuell andere Parameter enthalten.
  2. Eine Antwort des Servers entgegennehmen und als Erfolgs- oder Fehlermeldung auswerten.
  3. Von überflüssigen Anfragen absehen: das heißt bei Erfolg, nicht wiederholt den gleichen Eintrag erneut wünschen; bei Fehlern, nicht die gleiche fehlerhafte Anfrage erneut schicken.

Kommunikationsprotokoll Client<=>Server

Ein einziges Nachrichtenpaar von Anfrage und Antwort genügt, um einen dynamischen DNS-Eintrag einzurichten: Der Client teilt die IP-Adresse und den Domainnamen mit, die in einem DNS-Eintrag verbunden werden sollen; der Server bestätigt den Auftrag.

In der Beispielimplementierung erfolgt die Kommunikation über HTTP, und die Anfrage des Clients könnte so aussehen:

GET /cgi-bin/ddns?hostname=einwahl.example.com&myip=87.65.43.21 HTTP/1.1
Host: ddns.beispiel.de

Bei Erhalt dieser Anfrage ruft Apache das CGI-Programm .../doms/ddns.beispiel.de/cgi-ssl/ddns auf. Das Fragezeichen trennt den Programmnamen von einem "Query-String", in dem zwei Metavariablen definiert und übergeben werden. Die erste Metavariable, hostname, hat den Wert "einwahl.example.com"; die zweite, myip, hat den Wert "87.65.43.21".

Das Programm ddns prüft diese Informationen auf Form und Berechtigung, und schreibt gegebenenfalls einen entsprechenden Eintrag in einer Zonefile. Es schreibt auch verschiedene Informationen in die Standardausgabe. Wenn es die Standardausgabe geschlossen wird – also spätestens bei Programmende – schickt Apache diese Informationen als Antwort an den anfragenden Rechner zurück.

Im Falle unserer Beispielimplementierung sieht die Antwort bei Erfolg so aus:

 HTTP/1.1 200 OK
 Date: Wed, 22 Apr 2020 08:35:15 GMT
 Server: Apache
 Content-Length: 17
 Content-Type: text/plain; charset=ISO-8859-1

 good 87.65.43.21

Das DDNS-Protokoll von DynDNS.org

In den 90er Jahren, bevor das Internet so durchgehend vergeschäftlicht wurde, boten einige Organisationen kostenlose Dynamisches-DNS-Dienste an. Ein sehr beliebtes Angebot war das von DynDNS.org. Das DDNS-Protokoll von diesem Dienst wurde sogar in Einwahl-Routern einprogrammiert und der Dienst wurde von ISPs und Router-Herstellern als Leistungsmerkmal beworben.

DynDNS.org gehört inzwischen Oracle und bietet keine kostenlose Dienste mehr. Dennoch wird das DDNS-Protokoll von DynDNS.org in der vorliegenden Beispielimplementierung übernommen in der Hoffnung, daß die Kompatibilität mit einigen gängigen Einwahl-Routern von Vorteil sein kann.

Das gesammte Protokoll sieht einen einzigen Nachrichtenaustausch aus Anfrage und Antwort vor. Die Anfrage kann mehrere Argumente enthalten; die Antwort kann verschiedene Code-Wörtern enthalten. Übrigens können in einer einzigen Anfrage mehrere DNS-Einträge gewünscht werden. In diesem Fall kann die Antwort mehrzeilig ausfallen.

Anfrage

ölkjölkj

Antwort

lkjhlkjh

Bedingungen

yxcv

Administration

hjkl