Fritz Box External IP: Difference between revisions
Jump to navigation
Jump to search
(Created page with "= DynDNS = Recently dyndns updates on external IP changes did not always work. This should make it more robust. IP from fritzbox taken from https://wiki.ubuntuusers.de/Fritz...") |
(No difference)
|
Latest revision as of 10:29, 30 July 2020
DynDNS
Recently dyndns updates on external IP changes did not always work. This should make it more robust.
IP from fritzbox taken from https://wiki.ubuntuusers.de/FritzBox/Skripte/
Read external IP from Fritzbox
/usr/local/bin/fb-ip.sh
#!/bin/bash if [ "$1" == "" ]; then FB="fritz.box" else FB="$1" fi curl "http://${FB}:49000/igdupnp/control/WANIPConn1" \ -H "Content-Type: text/xml; charset="utf-8"" \ -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" \ -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>" \ -s | grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'
Compare external IP with DNS entry
/usr/local/bin/check-ip.sh
#!/bin/bash if [ "$1" == "" ]; then CN="banzhaf.chickenkiller.com" else CN="$1" fi if [ "$2" == "" ]; then FB="fritz.box" else FB="$2" fi XIP=`/usr/local/bin/fb-ip.sh "$FB"` DIP=`dig +short "$CN"` if [ "$XIP" == "$DIP" ]; then echo "OK" exit 0 fi echo "ERROR" exit 1
Update DynDNS if external IP does not match DNS entry
if there is a mismatch between external IP and DNS, give it some time and then fix it
/usr/local/bin/ensure-ip.sh
#!/bin/bash DELAY_S=120 if [ "$1" == "" ]; then CN="banzhaf.chickenkiller.com" else CN="$1" fi if [ "$2" == "" ]; then FB="fritz.box" else FB="$2" fi if ! check-ip.sh "$CN" "$FB" >/dev/null; then echo "Check IP failed. Waiting to settle" SINCE=$SECONDS while [ $((SECONDS - SINCE)) -lt $DELAY_S ]; do sleep 1 if check-ip.sh "$CN" "$FB" >/dev/null; then echo "Check IP recovered." exit 0 fi done echo "Check IP still fails. Updating DNS" update-dns.sh SINCE=$SECONDS while [ $((SECONDS - SINCE)) -lt $DELAY_S ]; do sleep 1 if check-ip.sh "$CN" "$FB" >/dev/null; then echo "IP updated." exit 0 fi done echo "Updating DNS failed" exit 1 fi