[INFO] opendd, ein DynDNS-Client

Gibt es denn eine Alternative??
Solange Du nicht weißt was mit "pre-dial" und "post-hup" gemeint ist bzw. es dir nicht klar ist, zu welchem Zeitpunkt und warum nur zu diesem Zeitpunkt dein Script ausgeführt werden muss, gibt es m. E. keine Alternative.
 
wollte ich mal fragen ob man das auch mit opendd alle 25 Tage erledigen lassen kann ?
Ja, das ist mit opendd möglich. cuma hat das so programmiert. Siehe:
Code:
http://svn.freetz.org/trunk/make/opendd/files/root/etc/init.d/rc.opendd
 
ist das in der aktuellen SVN 10538 mit drin oder muss man das Separat machen ?
 
Danke sf3978 :bier:
dann muss ich mal wieder die Maschine anwerfen ;)
 
..., oder täusche ich mich da??
Nein, Du täuscht dich nicht. Aber gerade weil es schon laaaange drinne ist, ist es auch in der aktuellen SVN 10538 beinhaltet. Oder wie hätte ich seine Frage beantworten sollen?
 
Nee, nee, Ist schon richtig beantwortet. Hatte mich nur gewundert, da ich das selbst vor einiger Zeit schon so in Betrieb hatte.
 
Hier ein Beispiel (Konfigurationsdatei muss chmod 600 sein) für die Benutzung der dyndns-Providers Two-DNS (http://www.twodns.de/de/faqs) mit opendd:
opendd.conf:
Code:
servername = update.two-dns.de
hostname = <hostname_1>[, <hostname_2>, <hostname_3>, <hostname_4>, <hostname_5>]
username = <username>
password = <password>
use_ssl = 1
cert_path = /<path>/<to>/opendd.pem
runasdaemon = 0
use_syslog = 1
syslog_facility = daemon
system_user = nobody
system_group = nogroup
pidfile_path = /var/run/opendd.pid
pollfrequency = 300
domain_lifetime = 28
#wildcard = 1
#mx = test.dyndns.org
#backupmx = 1
offline = 0
#
mailfrom = [email protected]
mailto = [email protected]
smtpservername = smtp.web.de
smtpserverport = 25
smtpauthuser = <xxx>
smtpauthpwd = <yyyy>
Log:
Code:
:~/opendd -v -c opendd.conf
-- running OpenDD 0.7.9 in normal mode
extip() : external ip address : 82.xxx.xxx.xxx from the stun server : stun.ekiga.net
main() : getting my ip address : 82.xxx.xxx.xxx
dyndns() : connected to update.two-dns.de:80
dyndns() : GET /nic/update?system=dyndns&hostname=xxx.xxx.eu&offline=NO&myip=82.xxx.xxx.xxx HTTP/1.0
listen_response() : HTTP/1.1 200 OK
listen_response() : Server: nginx/1.1.19
listen_response() : Date: Sat, 08 Jun 2013 06:26:06 GMT
listen_response() : Content-Type: text/html; charset=utf-8
listen_response() : Connection: close
listen_response() : Status: 200 OK
listen_response() : X-RateLimit-Limit: 100
listen_response() : X-RateLimit-Remaining: 99
listen_response() : X-UA-Compatible: IE=Edge,chrome=1
listen_response() : ETag: "f74e7d9h53hedfig5fdfa7119fced4aeef8"
listen_response() : Cache-Control: must-revalidate, private, max-age=0
listen_response() : X-Request-Id: 04aa8613bgege99ggh43eg5132975ce9eeb42
listen_response() : X-Runtime: 0.327829
listen_response() : X-Rack-Cache: miss
listen_response() : good 82.xxx.xxx.xxx
listen_response() : [color=red]The update was successful, and the hostname is now updated.[/color]
sendmail() : >> 220 web.de (mrweb103) Nemesis ESMTP Service ready
sendmail() : << EHLO YYYYY
sendmail() : >> 250-web.de Hello YYYYY [82.xxx.xxx.xxx]
sendmail() : >> 250-SIZE 69920427
sendmail() : >> 250-AUTH LOGIN PLAIN
sendmail() : >> 250 STARTTLS
sendmail() : << AUTH PLAIN cGJyYXRoAHTf56HBDjKkA2QiQ+JQ==
sendmail() : >> 235 Authentication succeeded
sendmail() : << MAIL FROM: <[email protected]>
sendmail() : >> 250 Requested mail action okay, completed
sendmail() : << RCPT TO: <[email protected]>
sendmail() : >> 250 OK
sendmail() : << DATA
sendmail() : >> 354 Start mail input; end with <CRLF>.<CRLF>
sendmail() : >> 250 Requested mail action okay, completed, id=8HTfd56-T5DF7gfr-00Oltr0
sendmail() : << QUIT
sendmail() : >> 221 web.de Service closing transmission channel
[color=red]listen_response() : mail report sent ![/color]
dyndns() : connection closed
main() : dyndns() exit normally

EDIT:

Wer Probleme mit opendd und Two-DNS hat, kann auch ein Script mit curl, zum Updaten benutzen. Z. B.:
Code:
#!/bin/sh
IP_ADDRESS="$(curl -B4 -A foobar ip1.dynupdate.no-ip.com)"
curl -k -v -X PUT -u "[color=red]<username>[/color]:[color=red]<api-token>[/color]" -d '{"ip_address":"'$IP_ADDRESS'"}' https://api.twodns.de/hosts/all
Das API-Token bekommt man aus dem account (Website) von Two-DNS. username ist i. d. R. die eMail-Adresse.
 
Zuletzt bearbeitet:
Fehler beim Aufruf von opendd -v -c /var/mod/etc/opendd.conf

Hallo!

Wenn ich den Befehl opendd -v -c /var/mod/etc/opendd.conf absetze erhalte ich diesen Fehler:
Code:
root@FB7570:/var/mod/root# /usr/bin/opendd -v -c /var/mod/etc/opendd.conf
-- running OpenDD 0.7.9 in normal mode
dyndns() : Can't read external IP file!
main() : cannot get IP address for update

Daraus schließe ich, dass OpenDD nicht funktioniert und die IP-Adresse nicht aktualisiert wird.
Da ich einen Kabel-Internanschluß habe bin ich darauf angewiesen, dass mein DynDNS-Anbieter mittels cron-Job innerhalb von 25 aktualisiert wird, damit der Account nicht deaktiviert wird.
Hierzu habe ich dies in die cron-Tabelle manuell eingetragen:
Code:
* * */20 * * /etc/init.d/rc.opendd cron

In der Pidfile opendd.pid steht die aktuell gültige Public IP drin, die sich seit dem letzten Restart des Kabel-Modems nicht geändert hat.

Woran kann es liegen, dass OpenDD nicht startet?

THX
 
Zuletzt bearbeitet:
In der Pidfile opendd.pid steht die aktuell gültige Public IP drin, die sich seit dem letzten Restart des Kabel-Modems nicht geändert hat.

Woran kann es liegen, dass OpenDD nicht startet?
Schau mal auf der Box nach den Dateien:
Code:
cat /tmp/flash/opendd/opendd.ip
cat /tmp/.opendd.ip

EDIT:

Code:
+  /* Get my IP from an /tmp/.opendd.ip */
+  file = fopen("/tmp/[COLOR="#FF0000"].opendd.ip[/COLOR]", "r");
+  if (NULL == file) {
+    logmsg(LOG_ERR, "dyndns() : Can't read external IP file!");
+    return 0;
 
Zuletzt bearbeitet:
Ausgabe von cat /tmp/flash/opendd/opendd.ip
Code:
root@FB7570:/var/mod/root# cat /tmp/flash/opendd/opendd.ip 
46.xxx.xxx.xxx

Die Ausgabe entspricht meiner öffentlichen IP-Adresse.
Diese wird auch entsprechend im WebUI (Status -> Box-Info) angezeigt.

Die Datei /tmp/.opendd.ip existiert nicht.

Anmerkung:
Die FB läuft im Client-Modus und ist per Port LAN1 direkt mit dem Kabel-Model (kein Kabel-Router) verbunden.

THX
 
Zuletzt bearbeitet:
Die Datei /tmp/.opendd.ip existiert nicht.
Versuch mal:
Code:
killall opendd
echo 127.168.178.1 > /tmp/.opendd.ip
/usr/bin/opendd -v -c /var/mod/etc/opendd.conf
killall opendd
echo $(get_ip) > /tmp/.opendd.ip
/usr/bin/opendd -v -c /var/mod/etc/opendd.conf
 
Die Ausgabe des Befehls
/usr/bin/opendd -v -c /var/mod/etc/opendd.conf
zeigt, dass das Programm OpenDD selbst fehlerfrei läuft.

Code:
root@FB7570:/var/mod/root# echo 127.168.178.1 > /tmp/.opendd.ip

root@FB7570:/var/mod/root# /usr/bin/opendd -v -c /var/mod/etc/opendd.conf 
-- running OpenDD 0.7.9 in normal mode
main() : getting my ip address : 127.168.178.1
dyndns() : connected to members.dyndns.org:80
dyndns() : GET /nic/update?system=dyndns&hostname=<my.dyndns.domain>&wildcard=OFF&backmx=NO&offline=NO&myip=127.168.178.1 HTTP/1.0
listen_response() : HTTP/1.1 200 OK
listen_response() : Date: Fri, 02 Aug 2013 22:36:54 GMT
listen_response() : Server: Apache
listen_response() : X-User-Status: free
listen_response() : Content-Type: text/plain
listen_response() : Accept-Ranges: none
listen_response() : Connection: close
listen_response() : good 127.168.178.1
listen_response() : The update was successful, and the hostname is now updated.
listen_response() : good 127.168.178.1
listen_response() : The update was successful, and the hostname is now updated.
sendmail() : >> 220 web.de (mrweb003) Nemesis ESMTP Service ready
sendmail() : << EHLO FB7570
sendmail() : >> 250-web.de Hello FB7570 [46.xxx.xxx.xxx]
sendmail() : >> 250-SIZE 69920427
sendmail() : >> 250-AUTH LOGIN PLAIN
sendmail() : >> 250 STARTTLS
sendmail() : << AUTH PLAIN nnnnnnnnnnnnnnnnnnAHZkYTdWYSFuM3hmYw==
sendmail() : >> 235 Authentication succeeded
sendmail() : << MAIL FROM: <<sender.email>>
sendmail() : >> 250 Requested mail action okay, completed
sendmail() : << RCPT TO: <<receiver.email>>
sendmail() : >> 250 OK
sendmail() : << DATA
sendmail() : >> 354 Start mail input; end with <CRLF>.<CRLF>
sendmail() : >> 250 Requested mail action okay, completed: id=0MPHFI-nnnnnnnnnn-mmmmmm
sendmail() : << QUIT
sendmail() : >> 221 web.de Service closing transmission channel
listen_response() : mail report sent !
dyndns() : connection closed
main() : dyndns() exit normally

root@FB7570:/var/mod/root# killall opendd
killall: opendd: no process killed

root@FB7570:/var/mod/root# echo $(get_ip) > /tmp/.opendd.ip

root@FB7570:/var/mod/root# cat /tmp/.opendd.ip 
46.xxx.xxx.xxx

root@FB7570:/var/mod/root# /usr/bin/opendd -v -c /var/mod/etc/opendd.conf 
-- running OpenDD 0.7.9 in normal mode
main() : getting my ip address : 46.xxx.xxx.xxx
getaddrbyname() : Name or service not known
getdyndnshostnames() : <my.dyndns.domainname> cannot be resolved
dyndns() : connected to members.dyndns.org:80
dyndns() : GET /nic/update?system=dyndns&hostname=<my.dyndns.domainname>&wildcard=OFF&backmx=NO&offline=NO&myip=46.xxx.xxx.xxx HTTP/1.0
listen_response() : HTTP/1.1 200 OK
listen_response() : Date: Fri, 02 Aug 2013 22:37:58 GMT
listen_response() : Server: Apache
listen_response() : X-User-Status: free
listen_response() : Content-Type: text/plain
listen_response() : Accept-Ranges: none
listen_response() : Connection: close
listen_response() : good 46.xxx.xxx.xxx
listen_response() : The update was successful, and the hostname is now updated.
listen_response() : good 46.xxx.xxx.xxx
listen_response() : The update was successful, and the hostname is now updated.
sendmail() : >> 220 web.de (mrweb101) Nemesis ESMTP Service ready
sendmail() : << EHLO FB7570
sendmail() : >> 250-web.de Hello FB7570 [46.xxx.xxx.xxx]
sendmail() : >> 250-SIZE 69920427
sendmail() : >> 250-AUTH LOGIN PLAIN
sendmail() : >> 250 STARTTLS
sendmail() : << AUTH PLAIN nnnnnnnnnnnnnnnnnnnnAHZkYTdWYSFuM3hmYw==
sendmail() : >> 235 Authentication succeeded
sendmail() : << MAIL FROM: <<sender.email>>
sendmail() : >> 250 Requested mail action okay, completed
sendmail() : << RCPT TO: <<receiver.email>>
sendmail() : >> 250 OK
sendmail() : << DATA
sendmail() : >> 354 Start mail input; end with <CRLF>.<CRLF>
sendmail() : >> 250 Requested mail action okay, completed: id=0M0QYD-nnnnnnnnnn-mmmmmm
sendmail() : << QUIT
sendmail() : >> 221 web.de Service closing transmission channel
listen_response() : mail report sent !
dyndns() : connection closed
main() : dyndns() exit normally

Die Ursache scheint darin begründet, dass die Datei /tmp/.opendd.ip nicht existierte.
Oder?

Wenn ich anschließend den Befehl des Cron-Jobs
/etc/init.d/rc.opendd cron
ausführe erhalte, sehe ich eine "Bestätigung" (Running OpenDD), aber die Datei /tmp/.opendd.ip fehlt dann wieder.
Code:
root@FB7570:/var/mod/root# echo 127.168.178.1 > /tmp/.opendd.ip

root@FB7570:/var/mod/root# cat /tmp/.opendd.ip 
127.168.178.1

root@FB7570:/var/mod/root# /etc/init.d/rc.opendd cron
Running OpenDD ... done.

root@FB7570:/var/mod/root# cat /tmp/.opendd.ip 
cat: can't open '/tmp/.opendd.ip': No such file or directory



THX
 
Zuletzt bearbeitet:
Die Ursache scheint darin begründet, dass die Datei /tmp/.opendd.ip nicht existierte.
Oder?
Ja. Aber das liegt daran, weil opendd in freetz so gepatcht ist, dass "opendd -v -c /var/mod/etc/opendd.conf" nicht verwendet werden soll.
Wenn ich anschließend den Befehl des Cron-Jobs
/etc/init.d/rc.opendd cron
ausführe erhalte, sehe ich eine "Bestätigung" (Running OpenDD), aber die Datei /tmp/.opendd.ip fehlt dann wieder.
Ja, denn das Script "/etc/init.d/rc.opendd" soll die Datei ".opendd.ip" erzeugen, benutzen und löschen:
Code:
update_ip() {
	echo "$1" > /tmp/[COLOR="#FF0000"].opendd.ip[/COLOR]
	$DAEMON -c /mod/etc/$DAEMON.conf
	[COLOR="#FF0000"]rm[/COLOR] -rf /tmp/[COLOR="#FF0000"].opendd.ip[/COLOR] 2>/dev/null
}
Wenn Du opendd für freetz richtig konfiguriert hast, dann verstehe ich nicht warum deine "statische" ext. (öffentliche) IP-Adresse nicht alle 25 Tage "forceupdated" wird. Aus dem Script "/etc/init.d/rc.opendd":
Code:
CRON_NEW="45 5 * * *  /mod/etc/init.d/rc.opendd cron"
Code:
find /tmp/flash/opendd/ -name opendd.ip [COLOR="#FF0000"]-mtime +25[/COLOR] -exec rm -rf {} ';'

EDIT:

Evtl. zu einen ddns-Provider wechseln, bei dem das Updaten der IP-Adresse nicht bzw. nie erforderlich ist. Z. B. twodns.
 
Zuletzt bearbeitet:
Hallo sf3978!

Danke für deine ausführliche Erklärung.

Dennoch möchte ich folgende Fragen an dich stellen:
1. Warum habe ich keinen crontab-Eintrag, der von den Einstellungen der GUI generiert wird? Stattdessen habe ich ja die crontab manuell editiert.
2. Unterscheiden sich die Aufrufe /mod/etc/init.d/rc.opendd cron und /etc/init.d/rc.opendd cron?
3. Warum wird von der OpenDD GUI ein cronjob definiert, der täglich um 05:45h läuft (45 5 * * * /mod/etc/init.d/rc.opendd cron)? Könnte man die Zeit für den täglichen OpenDD-Lauf nicht customizen?
4. Funktioniert der find-Befehl mit diesem Syntax?
Code:
find /tmp/flash/opendd/ -name opendd.ip -mtime +25 -exec rm -rf {} ';'
In der Manpage von find steht: -mtime n File's data was last modified n*24 hours ago.

Nach meinem Verständnis ist dies die relevante Coding-Stelle:
Code:
if [ "$OPENDD_FORCE_UPDATE" == "yes" ]; then                                          
                OLD_IP="$(cat /tmp/flash/opendd/opendd.ip 2>/dev/null)"  
                if [ "$OLD_IP" != "$NEW_IP" ]; then                                           
                        rm -rf /tmp/flash/opendd/opendd.ip               
                else                                                                          
                        find /tmp/flash/opendd/ -name opendd.ip -mtime +25 -exec rm -rf {} ';'
                        if [ ! -e /tmp/flash/opendd/opendd.ip ]; then                         
                                update_ip 127.168.178.1                  
                                sleep 90                                                        
                        fi                                                                    
                fi                                                                              
                if [ ! -e /tmp/flash/opendd/opendd.ip ]; then            
                        echo "$NEW_IP" >/tmp/flash/opendd/opendd.ip                             
                        modsave flash >/dev/null                                              
                fi                                                                              
        fi                                                               
        update_ip $NEW_IP

Und "update_ip" macht nichts anderes als
- den Wert (=IP-Adresse) nach /tmp/.opendd.ip zu schreiben
- OpenDD mit der aktuellen opendd.conf-Datei zu starten
- die Datei /tmp/.opendd.ip wieder zu löschen

Code:
update_ip() {                                                                                 
        echo "$1" > /tmp/.opendd.ip                                                           
        $DAEMON -c /mod/etc/$DAEMON.conf                                 
        rm -rf /tmp/.opendd.ip 2>/dev/null

Ich glaube, in meinem speziellen Fall sind die Fragen 1. und 4. wirklich relevant.
Also, warum wird kein crontab-Eintrag erstellt, und funktioniert der find-Befehl mit der Option -mtime +25?

THX
 
2. Unterscheiden sich die Aufrufe /mod/etc/init.d/rc.opendd cron und /etc/init.d/rc.opendd cron?
Nein, denn in "/mod/etc/init.d" befinden sich symlinks auf "/etc/init.d". Z. B.:
Code:
root@fritz:/var/mod/root# ls -la /mod/etc/init.d | grep rc.opendd
lrwxrwxrwx    1 root     root            21 Jan  1  2000 rc.opendd -> /etc/init.d/rc.opendd
Betr. deine Fragen 1, 3 und 4 evtl. cuma fragen, denn er hat die Scripte programmiert. Im trac findest Du einige tickets zu opendd, u. a. auch:
Code:
http://freetz.org/ticket/818

EDIT:

BTW: Ich benutze opendd auf der Box, ohne Freetz-GUI und anders gepatcht.
 
Zuletzt bearbeitet:
Hm...

Dann habe ich also 2 Optionen:
1. Ich erhalte von cuma eine Aussage zu meinen Fragen 1, 3 und 4 und damit ein funktionierendes OpenDD-Paket
2. Ich bekomme aus einer anderen Quelle ein funktionierendes Paket bzw. erstelle das Paket neu nach meinen Anforderungen

Frage:
Erfüllt dein (anders gepatchtes) OpenDD die Anforderungen, die ich in meinen Posting dokumentiert habe?
Falls ja, würdest du mir eine Anleitung zu deinem gepatchten OpenDD zukommen lassen?

THX
 
1. Ich erhalte von cuma eine Aussage zu meinen Fragen 1, 3 und 4 und damit ein funktionierendes OpenDD-Paket
Ich denke Du hast ein funktionierendes OpenDD-Paket auf deiner Box. Das Problem wird evtl. durch die (evtl. fehlerhafte und/oder unvollständige) Konfiguration von OpenDD verursacht sein.

Erfüllt dein (anders gepatchtes) OpenDD die Anforderungen, die ich in meinen Posting dokumentiert habe?
Nein, denn meine Box hat alle 24 Stunden eine andere öffentliche IP-Adresse. D. h. OpenDD funktioniert im nodaemon-Modus und das Updaten wird vom onlinechanged-Ereignis der Box ausgelöst. Mein OpenDD braucht keine fake-IP-Adresse und holt sich die öffentliche IP-Adresse der Box, aus dem Internet von einem stun-Server.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.