- Mitglied seit
- 25 Apr 2005
- Beiträge
- 169
- Punkte für Reaktionen
- 0
- Punkte
- 16
Mein ursprüngliches Ziel war es, eine Dynorg-Adresse meiner Box im ATA-Mode aktuell zu halten. Leider hat die FBF das selbst nicht unterstützt. Ob sie dies nun tut weiss ich nicht. Inzwischen habe ich das Skript etwas weiterentwickelt und es läuft seit langem stabil. Bis Dynorg irgendetwas geändert hat und nur noch ein "good 127.0.0.1" zurückgegeben hat. Die Korrektur nehme ich als Anlass, das Skript noch einmal zu posten. Das wget-binary hab ich aus einer alten Fritzload-Installation genutzt. Da sollte aber auch jede andere FBF-taugliche version klappen.
Features:
getestet mit: FBF 7170, 7270
Voraussetzungen:
Bei mir liegen die wget binary, die Config-files und das script selbst auf meinem USB-Stick (/var/freetz/...).
Durch den Autoruneintrag mit freetz werden u.a. die Aktualisierungsskripte gestartet. Dies kann natürlich auch über die debug.cfg o.ä. passieren.
Hier starte ich das Update (Pfade anpassen) mit:
genauso werden dann weitere Accounts bedient.
Wer nur einen Account hat kann auch ohne conf-file direkt die Daten im Skript eintragen (wenn ich das recht erinnere ;-) )
config-file, z.B. "ddns.beispiel.dnsalias.com.conf":
"dynorg_update.sh"
Features:
- funktioniert auch im ATA/Client-Mode
- unterstützt beliebig viele Accounts / Domains
- funktioniert theoretisch auch ohne freetz (Rückmeldung erbeten)
- Aktualisierungseinträge auf AVM-Webif
getestet mit: FBF 7170, 7270
Voraussetzungen:
Bei mir liegen die wget binary, die Config-files und das script selbst auf meinem USB-Stick (/var/freetz/...).
Durch den Autoruneintrag mit freetz werden u.a. die Aktualisierungsskripte gestartet. Dies kann natürlich auch über die debug.cfg o.ä. passieren.
Hier starte ich das Update (Pfade anpassen) mit:
Code:
/var/freetz/bin/dynorg_update.sh -c /var/freetz/etc/ddns.beispiel.dnsalias.com.conf &
Wer nur einen Account hat kann auch ohne conf-file direkt die Daten im Skript eintragen (wenn ich das recht erinnere ;-) )
config-file, z.B. "ddns.beispiel.dnsalias.com.conf":
Code:
u_name=ddnsuser
u_pass=ddnspass
ddns_url=beispiel.dnsalias.com
update_interval=60
"dynorg_update.sh"
Code:
#!/bin/sh
################################
# Updates dyndns.com
# (c) HHAW Risaer - GPL
# V.1.1
################################
#config
config_file=/var/freetz/etc/ddns.conf
#put your wget binary here - just "wget" if exists otherwise with path if you use an external binary
wget_file=/var/freetz/bin/wget
update_interval=60
##Use these parameters if you do not want to use one or more config files:
#u_name=name
#u_pass=password
#ddns_url=beispiel.dnsalias.com
#update_interval=60
################################
showHelp(){
################################
echo Parameter:
echo "$0 [--help ]| [-c configfilename]"
echo --help, -h: This help
echo configfilename: file containing options, if no config file is given, $config_file is assumed
}
################################
getExternalIp(){
################################
externalIp=$($wget_file -q -O - http://checkip.dyndns.com|sed -n "s/.*: //;s/<.*//;p")
}
################################
logDebugEvent(){
################################
# zur Fehlersuche
#
echo `date` "$*" >> /var/tmp/ddns_ddns_url.log
echo `date` "$*"
#dummy, falls echo auskommentiert:
#sleep 1&
}
################################
logEvent(){
################################
logDebugEvent "$*"
eventadd 1 "$*"
}
################################
doOnUpdate() {
################################
logEvent "neue externe IP-Adresse: $new_ip"
logDebugEvent "current_ip: -$current_ip- -> updating"
#restart VOIP daemon
voipd -R
## Put here whatever else you want to do ....
#prepare DDNS-adress -update
secret_url="http://$u_name:[email protected]/nic/update?hostname=$ddns_url&myip=$new_ip"
secret_url_log="http://$u_name:[email protected]/nic/update?hostname=$ddns_url&myip=$new_ip"
logDebugEvent $secret_url_log
#execute update request
ddns_result="$($wget_file --user-agent=wget -q -O - $secret_url)"
logEvent "Update $ddns_url Result DDNS: $ddns_result"
#check result
if [ "$ddns_result" != "good $new_ip" ] ; then
# if error occured:
logEvent "Update DDNS failed: next try in 60 min -> http://www.dyndns.com/developers/specs/return.html"
logEvent `date` FAILED: $ddns_result
logEvent waiting for 60mins
sleep 3600
fi
#sleep 60
return
}
################################
getDdnsIp(){
################################
ddnsIp=`ping -c 1 -s 1 -w 1 $ddns_url|sed -n "s/).*//;s/.*(//p"`
# ddnsIp=`get_ip --all`
}
################################
# MAIN
################################
#echo $# Parameter
#echo Using '"$@"': $@;
#for p in "$@";
#do
# echo "[$p]";
# echo ${#p}
p="$1"
case "$p" in
"-c")
config_file="$2"
;;
"--help") showHelp; exit ;;
"-h") showHelp; exit;;
*) showHelp; exit 1;;
esac
#done
#
if [ ! -e $config_file ]; then
echo $config_file does not exist
exit 1
fi
u_name=`cat ${config_file}|grep u_name|sed -n "s/u_name=//;p"`
u_pass=`cat ${config_file}|grep u_pass|sed -n "s/u_pass=//;p"`
ddns_url=`cat ${config_file}|grep ddns_url|sed -n "s/ddns_url=//;p"`
update_interval=`cat ${config_file}|grep update_interval|sed -n "s/update_interval=//;p"`
if [ "${u_name}" == "" ]; then echo "u_name is empty"; exit 2; fi;
if [ "${u_pass}" == "" ]; then echo "u_pass is empty"; exit 2; fi;
if [ "${ddns_url}" == "" ]; then echo "ddns_url is empty"; exit 2; fi;
###
logDebugEvent
logDebugEvent "###########################################"
logDebugEvent DDNS "for $ddns_url"
logDebugEvent PID: $$
logDebugEvent "###########################################"
sleep 5
{
while true; do
#get current ddns-ip
getDdnsIp
current_ip=$ddnsIp
#new_ip="$($wget_file -q -O - $update_ip)"
new_ip="$(get_ip --all)"
#error while fetching ips?
if [[ "$current_ip" = "" || "$new_ip" = "" ]]; then
#nix
#correct execution
logDebugEvent WARNING "current_ip: -$current_ip- new_ip: -$new_ip-"
else
#logDebugEvent "current_ip: -$current_ip- new_ip: -$new_ip-"
#update needed?
if [ "$current_ip" != "$new_ip" ] ; then
doOnUpdate
fi
fi
sleep $update_interval
done
}