Benutzerdefinierte DDNS (nicht in Liste) nutzen + IPv6

Status
Für weitere Antworten geschlossen.

mgutt

Benutzer
Mitglied seit
14. Nov 2012
Beiträge
429
Punkte für Reaktionen
20
Punkte
18
Leider bietet das Synology NAS keine Möglichkeit eine benutzerdefinierte URL zu hinterlegen, mit der man auch DynDNS von einem Anbieter nutzen kann, der nicht in der Liste steht. Um genau zu sein, habe ich eine eigene DDNS API und kann über die meine DNS Einträge aktualisieren.

Ich bin daher auf die Idee gekommen ein Shell Script per Cronjob alle 5 Minuten laufen zu lassen.

Dazu habe ich zuerst die neue Paketquelle http://www.cphub.net/ hinzugefügt und von dort die Pakete installiert:
- Init 3rdparty (notwendig für nächstes Paket)
- Cronjob Editor

Im Cronjob Editor habe ich dann einen neuen Eintrag hinzugefügt und mit der STRG-Taste die Minuten 0, 5, 10, usw. markiert, damit der Cron alle 5 Minuten ausgeführt wird und als Command das eingetragen:
Rich (BBCode):
sh /volume1/software/ddns.sh

Das ist das Shell Script:
Rich (BBCode):
#!/bin/bash

IPV4=`ip addr list eth0 | grep "inet " | cut -d' ' -f6 | cut -d/ -f1´
IPV6=`ip addr list eth0 | grep "inet6 " | cut -d' ' -f6 | cut -d/ -f1´

wget "http://***/ddns.php?username=***&pass=***&domain=***&ipaddr=$IPV4&ip6addr=$IPV6"

Der Aufruf klappt, aber die Variablen sind leer. Was mache ich falsch?

Habt Ihr noch eine andere Idee statt mit einem Cronjob zu arbeiten?
 

mgutt

Benutzer
Mitglied seit
14. Nov 2012
Beiträge
429
Punkte für Reaktionen
20
Punkte
18
Ich beantworte mal selbst. Also das mit den Ticks / Anführungszeichen habe ich irgendwie nicht hinbekommen. Daher habe ich es dann so versucht und das hat geklappt:
Rich (BBCode):
#!/bin/bash

IPV4=$(ip addr list eth0 | grep "inet " | cut -d' ' -f6 | cut -d/ -f1)
IPV6=$(ip addr list eth0 | grep "inet6 " | cut -d' ' -f6 | cut -d/ -f1)

wget "http://***/ddns.php?username=***&pass=***&domain=***&ipaddr=$IPV4&ip6addr=$IPV6"

Schlussendlich bin ich aber hierbei gelandet:
Rich (BBCode):
#!/bin/bash

# local IPv4
#IPV4=$(ip addr list eth0 | grep "inet " | cut -d ' ' -f6 | cut -d/ -f1)

# public IPv4
#IPV4=$(curl ipv4.icanhazip.com)

# public IPv6
IPV6=$(ip addr list eth0 | grep "global dynamic" | cut -d ' ' -f6 | cut -d/ -f1)

wget "http://***/ddns.php?username=***&pass=***&domain=***&ipaddr=$IPV4&ip6addr=$IPV6"

Wie man sieht musste ich mit grep in die Zeile wechseln, die meine korrekte öffentliche IPv6 enthält. Bei mir wird "global dynamic" und "global deprecated dynamic" ausgeworfen, weshalb ich das entsprechend weiter filtern musste.

Es kann denke ich vorkommen, dass dieses Script nicht für jeden funktioniert. Am besten mal mit Putty (Konsole) checken was dieser Aufruf zurückgibt und welche IPv6 in der Liste die richtige ist:
Rich (BBCode):
ip -f inet6 addr

Jetzt natürlich noch die Frage: Wie bekomme ich das hin, dass er nur wget ausführt, wenn eine neue IP zugewiesen wurde. Das ist denke ich ach für den auskommentierten IPv4 Teil interessant, weil man ja nicht ständig eine externe Domain anspammen will.
 

mgutt

Benutzer
Mitglied seit
14. Nov 2012
Beiträge
429
Punkte für Reaktionen
20
Punkte
18
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat