DynDNS in Eigenbau



  • Hallo zusammen!

    Ich habe einen Server im Netz stehen. Nun würde ich gerne über eine Domain, die auf diesen Server zeigt, auf meinen lokal zu Hause stehenden (via DSL ans Internet angebundenden) Rechner zugreifen, also so eine Art dynamische IP. Im Prinzip würde mir für den Anfang auch reichen, erstmal eine Datei auf dem Webserver, in der immer die aktuelle IP steht.

    Da hier verschiedene Probleme auftreten, schreib ich auch in Rund um die Programmierung. Ich brauche ja ein Programm, welches die IP des Rechners ausliest (der nicht hinter nem Router steht, ich hab die also im Zugriff). Diese muss dann an meinen Linux Server irgendwie übermittelt werden. Der muss die dann speichern.

    Die Frage ist, gibts schon sowas in fertig? Wenn nicht, würd ich auch selber Hand anlegen, ich beherrsche C, kenn mich nur nicht so gut mit der Netzwerkprogrammierung aus. Ich kann auch PHP, hab mir schon ein bisschen überlegt, wie ich das selber machen würde, bin aber für Verbesserungsvorschläge (oder völlig neue) offen: Ich ermittle meine IP (wobei ihr mir da Helfen müsstet, wie krieg ich die raus) und ruf dann einfach ne PHP Datei auf meinem Server auf (ungefähr so http://soundso.de/dyn.php?ip=xxx.xxx.xxx.xxx), diese speichert dann die IP (den Teil in PHP kann ich, nur den Aufruf der Seite aus C weiß ich nicht, hab mit Sockets noch nix gemacht).

    Mit dem Vorgehen wär ich ja quasi schonmal am Ziel.

    Also, ein paar Tipps, in welche Richtung ich gehen soll, oder vielleicht lohnt die Mühe ja nicht, weils das schon gibt. Wobei ich mit schon geben nicht meine, dyndns.org oder so. Ich hab halt ne Domain, der Anbieter bietet aber keine dynamische IP Auflösung an, sondern die zeigt fest auf meinen Server. Und von da aus würd ich die dann gerne weiterleiten.

    Viel Grüße,

    Dirk



  • Ich bin mir nicht sicher, ob ich deine Beschreibung vollständig verstanden habe, aber ich würde es einfach so machen:

    Ich würde per Cron-Job oder Taskplaner regelmäßig "wget http://server.invalid/update_ip.php > /dev/null" oder so ähnlich aufrufen. Im PHP-Skript hast du die IP sowieso verfügbar (siehe Doku, ich meine irgendwas mit REMOTE_ADDR o.ä.).



  • Hi,

    ich gehe mal davon aus, dass Du eine Subdomain auf Deine IP (@home) umleiten möchtest, die TLD aber weiterhin auf Deinen Server verweisen soll. Wenn das so ist, dann brauchst Du soweit ich weiß auf jeden Fall Zugriff auf den Nameserver, der die TLD verwaltet und dort müsstest Du dann bei einem Update das Zonefile entsprechend für die Subdomain ändern und auf Deine IP verweisen lassen. Anschließend muss dann der Nameserver neu gestartet werden.
    Wie cd9000 schon schrieb hast Du im PHP-Script eigentlich alles, was Du brauchst, wenn PHP aber als Apachemodul kompiliert ist, dann läuft dies als gleicher User, wie auch der Apache läuft, d.h. Du musst dafür sorgen, dass das Script das Zonefile ändern und den Nameserver neu starten darf. Hier wäre dann aber besser PHP als CGI oder aber Perl geeignet, denke ich, da Du dann das Script z.B. root geben kannst und es auch als root ausgeführt wird (besser wäre hier wahrscheinlich ein eigener User für den Nameserver), der dann Zugriff auf die Datei und die Berechtigung für den restart hat. Dann aber dran denken, das zumindest mit einem Passwort abzusichern, besser Username/PW-Kombi.
    Auf der anderen Seite brauchst Du dann natürlich ein Programm, welches das Script bei einem Update aufruft, da kann ich Dir aber leider nicht helfen, weil ich auch nicht weiß, wie das geht, aber da wird sich hier bestimmt jmd finden, der Dir da weiterhilft. 🙂



  • hallo,

    google: getip und nochwas mit source und c
    und bissel genau guggen ergibt

    http://www.hackcanada.com/ice3/2600/2600_15-3_p10.txt

    <++> getip.c
    #include <netdb.h>
    
    void main(int argc, char **argv) {
      struct hostent *victim;
      if (argc<2) {
        printf("use with host as argument.\n");
        exit(-1);
      }
    
      victim = gethostbyname(argv[1]);
      if (!victim) {
        herror(argv[1]);
        exit(-1);
      }
      printf("%u.%u.%u.%u\n",(unsigned char)victim->h_addr[0]
                            ,(unsigned char)victim->h_addr[1]
                            ,(unsigned char)victim->h_addr[2]
                            ,(unsigned char)victim->h_addr[3]);
    }
    <-->
    

    ist wohl für Unix auf www.c-worker.ch findest Du aber auch Bsps wo Win und Unix
    portable code Bsps vorhanden sind ...

    Die Ip kannst Du sicher per FTP hochladen oder etwas professioneller in ner MySQL Datenbank auf dem Server ablegen. Dürfte auch schneller gemacht mit der MySQL API in C sein, als einen FTP-Client zu schreiben, es sei denn der Cline ist schon mal vorhanden, was ich bezweifle.

    Und fertig ist DynDNS 😃

    Wenn der zu erreichende Rechner hinter einem Router hängt, kannste etweder die IP beim Router abfragen oder die Seite laden http://checkip.dyndns.org/
    Bsp Download einer Seite siehe c-worker.ch

    Den Aufruf der Seite auf dem über DSL im Netz hängenden Rechner würde ich auch über ne Datenbank steuern.

    http:\\mein-root-server.de\\myhome

    wobei im Verzeichnis myhome eine index.php liegt welche die IP aus der Datenbank holt und http:\\1.2.3.4\\index.html aufruft

    mfg
    rb


Log in to reply