Fritz Box External IP
Jump to navigation
Jump to search
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