dyndns und ddup

asg

push it, don´t hype
Hallo.

Ich habe das folgende kleine howto schon bei den Howtos im thread zu IPFW/NATD gepostet, nun bekommt es seinen eigenen Platz.

Es gibt viele die gerne von aussen auf Ihre Box drauf wollen, dank des 24 Stunden disconnects damit aber ein Problem bekommen, denn die neue IP ist nicht bekannt. Zum anderen möchte man sich keine IP merken wollen, sondern einen, gleichbleibenden Domainnamen wie beispielsweise grunix.homeunix.net.
Dafür gibt es dynamische DNS Dienste die sich diesem Problem annehmen, und bei einem disconnect wird diesem Dienst die neue IP mitgeteilt, und schon ist der Rechner wieder unter dem bekannten domain namen erreichbar.

Wie richtet man dies nun ein?

1. Ein account bei dyndns ist erforderlich.
2. Installation von "ddup" (/usr/ports/net/ddup).

ACHTUNG! Der Pfad für "ddup" hat sich geändert. So ist im Portstree das Verzeichnis "dns" hinzugekommen. Ihr findet "ddup" nun unter /usr/ports/dns/ddup.

Danach muss man ddup ersteinmal konfigurieren, was aber schnell von der Hand geht.

#ddup --makeconf

Hierbei wird die ddup.conf unter /usr/local/etc erstellt.
Diese Datei enthält das Passwort welche bei der Einrichtung bei dyndns.org vergeben wurde und die User die berechtigt sind ein update der IP durchzuführen.
Der Inhalt dieser Datei sieht dann in etwa so aus:
Code:
%less ddup.conf 
auth=12dsdsäjkdfu24sfsdsds
allowed_user=root
allowed_user=asg

Jetzt muss man einfach ein Script schreiben welches via cronjob alle X Minuten aufgerufen wird, und überprüft ob die IP gleich geblieben ist, oder nicht. Wenn nicht, rufe ddclient auf und aktualisere dyndns, wenn doch, mache nichts.

Beispiel für ein solches Skript:
Legt unter /usr/local/etc/rc.d ein Skript mit dem Namen "020.ddup_start.sh" und folgenden Inhalt an. Es ist auch darauf zu achten das dieses Skript für den User "root" ausführbar ist und mit der Endung ".sh" endet:
Code:
#!/bin/sh

case "$1" in
start)
[ -x /etc/periodic/ddup_update.sh ] && /bin/sh /etc/periodic/ddup_update
.sh && echo -n ' dyndns_update_complete'
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
;;
esac

exit 0

Das nachfolgende Script mit dem Namen "ddup_update.sh" muss unter /etc/periodic/ abgelegt werden. Auch hier ist darauf zu achten, dass dieses Script für den User "root" ausführbar sein muss:
Code:
#!/bin/sh

#Variablen
#Eure eingerichteten hostnames bei dyndns
host_net="deine.dynadresse.net"
host_com="deine.dynadresse.com"
host_org="deine.dynandresse.org"
interface="tun0"
email="deinemail@adresse.de"
oldfile="/var/log/dyndns/ddclient_OLD"
newfile="/var/log/dyndns/dddclient_NEW_temp"
ddup_cmd="/usr/local/sbin/ddup"
ddupflags="--wildcard"

#bestehende Konfiguration in newfile packen
/sbin/ifconfig $interface | /usr/bin/grep inet > $newfile

if [ -r "$oldfile" ]; then
# wenn oldfile vorhanden haben wir infos

# wenn oldfile und newfile identisch, dann loesche newfile
/usr/bin/cmp -s $oldfile $newfile && /bin/rm -f $newfile
date
# wenn dem nicht so ist dann:
# -starte ddup
# -sende eine email
# -yberschreibe oldfile mit newfile
if [ -r "$newfile" ]; then
$ddup_cmd $ddupflags --host $host_net
$ddup_cmd $ddupflags --host $host_com
$ddup_cmd $ddupflags --host $host_org
/usr/bin/mail -s "$host_net $host_com $host_org update" $email < $newfile
/bin/mv -f $newfile $oldfile
fi

else

# der erste Lauf oder keinerlei Info

$ddup_cmd $ddupflags --host $host_net
$ddup_cmd $ddupflags --host $host_com
$ddup_cmd $ddupflags --host $host_org
/usr/bin/mail -s "$host_net $host_com $host_org update" $email < $newfile
/bin/mv -f $newfile $oldfile
fi

Füge in Deine /etc/crontab folgendes ein:
Code:
*/5 * * * * root /etc/periodic/ddup_update.sh >> /var/log/dyndns/dyndns.log

Und lege unter das Verzeichnis "dyndns" unter /var/log an (schreibrechte für root).Dort werden Deine logs gelagert, wie ich sie oben im script angegeben hatte.
 
Als Alternative zum Script, das ja immer im Hintergrund laeuft, kann man den DDClienten auch ueber die Datei "/etc/ppp/ppp.linkup" aufrufen lassen. Beispiele dazu gibt es unter "/usr/share/examples/ppp/".
Ich habe folgenden Inhalt in die "ppp.linkup"-Datei gepackt.
>MYADDR:
> !bg /usr/local/sbin/ddclient

Bye,
Dirk
 
hey grunixx,

kleine anmerkung noch damit (auch nach direktem copy & paste) alles einwandfrei läuft:

Pack das nachfolgende Script mit dem Namen "ddup_udate.sh" nach /etc/periodic/:

!!!!!! hier fehlt das p in ddup_update.sh, hat mich schon mal ein paar stunden lang gesuckt, ansonsten läuft alles seit wochen einwandfrei.

so long

iquethen
 
Hallo !

Habe mich an dieses HowTo gehalten - allerdings startet das Update weder beim Systemstart noch per Cron ...

In der Cron.log wird aber das ausführen der Datei aufgeführt - wo liegt das Problem ?!
 
asg schrieb:
Hallo.

Ich habe das folgende kleine howto schon bei den Howtos im thread zu IPFW/NATD gepostet, nun bekommt es seinen eigenen Platz.

Füge in Deine /etc/crontab folgendes ein:
Code:
*/5 * * * * root /etc/periodic/ddup_update.sh >> /var/log/dyndns/dyndns.log

Und lege unter das Verzeichnis "dyndns" unter /var/log an (schreibrechte für root).Dort werden Deine logs gelagert, wie ich sie oben im script angegeben hatte.

Hi wertes Forum,

die oben stehende Lösung ist meiner Meinung nach viel zu umständlich.
Einfach in der ppp.linkdown ein script
aufrufen. Dies führt dann zu
a) einer erneuten Einwahl nach 1 Tag (für die Flat-Gesichter)
b) einem Aufruf von ddup
c) Fertig

Vorteil: Statt zeitgesteuert ist die dyndns Aktualisierung nun
verbindungsorientiert.
Weiterer Vorteil: viel einfacher zu implementieren. Der
arme cron kann sich auch entspannen. Der bgfsck frisst
schon genug Performance, da nimmt man den cron besser
nur für unausweichliche, zeitgesteuerte jobs.

Gruss

MFC
 
Hättest du dir mal den zweiten Beitrag durchgelesen :rolleyes:

Ich finde es allerdings auch total übertrieben alle 5 Minuten(!!) den Server zu nerven, wenn alle 24 Stunden reicht! Außerdem hat man mit der ppp.linkup Methode nicht bis zu 5 Minuten eine falsche IP unter der dyndns Adresse. (wie kommst du auf linkdown??)

Und wieso führt ein skript-aufruf in ppp.linkdown zu einer Wiedereinwahl?
Dafür hatte ich mal sowas in der crontab:
Code:
23   5   *   *   *   root /usr/sbin/pppctl /var/run/ppp.ctl down

edit:
ich glaub ich hab gerade verstanden wie du das mit der wiedereinwahl über ppp.linkdown meinst. Ich halte -ddial für ppp aber für eleganter ;)
 
ppp-linkup-DSL

Maledictus schrieb:
Hättest du dir mal den zweiten Beitrag durchgelesen :rolleyes:

(wie kommst du auf linkdown??)

Und wieso führt ein skript-aufruf in ppp.linkdown zu einer Wiedereinwahl?
Dafür hatte ich mal sowas in der crontab:
Code:
23   5   *   *   *   root /usr/sbin/pppctl /var/run/ppp.ctl down

edit:
ich glaub ich hab gerade verstanden wie du das mit der wiedereinwahl über ppp.linkdown meinst. Ich halte -ddial für ppp aber für eleganter ;)

Hi Maledictus,

in der ppp.linkdown steht:
!bg /usr/local/bin/dsl_up.sh

So führt ein postseitiges trennen zur Wiederanwahl. Im dsl_up.sh
wird nichts anderes getan als
1) Wiedereinwahl bis ppp enabled
2) Propagation neue IP (Aufruf ddup)

Die committer von ppp haben mir ppp.linkdown empfohlen.

Hier in Köln nützt eine Zeitsteuerung nicht, weil es
T-Offline -seitig Probleme mit den RADIUS Servern gibt.
So wird die Wiederanwahl NICHT zeitgesteuert, sondern
NUR BEI BEDARF ausgeführt. Was soll es eleganteres geben für
Leute die diese standortbezogenen Probleme haben.

Bislang läuft alles ohne Probleme. Ist halt BSD.

Gruss

MIKOS
 
Zurück
Oben