Forum

Full Version: suggested feature in Xbian Config: update IP via a dynamic dns provider
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I have been using ddclient but it doesn't work that well to update your IP address in case your ISP doesn't give you a static IP.

Now I have found this neat little script: first it checks IF your IP address has changed. Only if it has changed, it will update your subdomain at your dyn dns provider. It seems to be a very 'light' solution, no need to install a program like ddclient.

Perhaps the script could be added to XBian and an "checkbox" could be added to the XBian Config UI to enable it? By default it should be disabled. If enabled, user will have to select time (perhaps default 4 hrs) then all it should do is add a line to cronjob. The user would still need to fill in their token though...

But I still have 1 issue. The script seems very clean, but it needs interface data and I do not understand that part:
Terminal
TOKEN="mytoken,removedforprivacyreasons"
IFACE=[PUBLIC-IF]

if test -f /etc/freedns/dnsactual.conf
then
CacheIP=$(cat /etc/freedns/dnsactual.conf)
fi

CurreIP=$(ifconfig $IFACE | grep -oEe "addr:[0-9\.]*" | cut -f 2 -d Smile

if [ "$CurreIP" = "$CacheIP" ]
then
# Both IP are equal
echo "Update not required..."
else
# The IP has change
echo "Updating http://free.afraid.org with " $CurreIP
wget http://freedns.afraid.org/dynamic/update.php?$TOKEN -o /dev/null -O /dev/stdout
echo `date` "Updating log with IP " $CurreIP >> /var/log/dnsactual.log
fi
rm -f /etc/freedns/dnsactual.conf
echo $CurreIP > /etc/freedns/dnsactual.conf

script is saved in /etc/freedns/dnsactual.sh.
When I run it:
Terminal
xbian@xbian /etc/freedns $ sudo sh dnsactual.sh
[PUBLIC-IF]: error fetching interface information: Device not found
Update not required...

I replaced PUBLIC-IF for eth0 but that doesn't work. I would like to get this script working for myself. I tried Googling the public-if part but nothing comes up. Advice?
eth0 is the public interface unless your using a wireless dongle, so are you doing IFACE=[eth0] or just IFACE=eth0 ?
ahh that was my mistake. I removed the brackets and I also added "sudo" before ifconfig. Now it should work. Unfortunately, since I am behind my ISP modemrouter, the ifconfig eth0 command returns my local IP instead of my wan IP.
I guess there is no way to figure out your external IP without connecting to a server outside my network?

My goal was to create an as light as possible script.. get the IP, compare it to the previous found IP and if different, then change it at a DNS provider of choice. Now it seems you first have to check with some website/provider/server to get the IP... I'll play a little more.
@zilexa

public_ip=$(wget -O - checkip.dyndns.org 2>/dev/null | cut -d':' -f2 | cut -d'<' -f1 )
Thanks I actually found identical solution yesterday Big Grin I just wanted to experiment and find a way to obtain my external IP address without asking an external server. But that seems to be the only way!
This is simpler:

external_ip=$(wget -qO- http://ipecho.net/plain)
OK this is the solution. I still want to add a few other IP check services in case ipecho.net goes down. But for now it works perfectly. For reference if anyone else wants this:

Schedule this script to run every x hours, mine runs every 4 hours (type crontab -e in terminal and add this to the bottom):
Code:
0 */4 * * * sudo sh /etc/ipupdate/ipupdate.sh

the script, create a new textfile (sudo nano /etc/ipupdate/ipupdate.sh) and copy paste:
Code:
# this script will check if the current external IP address has been
# changed by your ISP internet provider. If so, it will update your
# subdomain (for example: mypc.freedns.org). This way, you will always
# be able to connect to your Raspberry when you are not at home and don't know
# the IP address of your home. Also handy if your ISP internet provider keeps changing your IP.

TOKEN="add your token from your freedns subdomain"

if test -f /etc/ipupdate/ipupdate.conf
then
CacheIP=$(cat /etc/ipupdate/ipupdate.conf)
fi

ExternIP=$(wget -qO- http://ipecho.net/plain)

if [ "$ExternIP" = "$CacheIP" ]
then
# Both IP are equal
echo "Update not required..."
else
# The IP has change
echo "Updating http://free.afraid.org with " $ExternIP
wget http://freedns.afraid.org/dynamic/update.php?$TOKEN -o /dev/null -O /dev/stdout
echo `date` "Updating log with IP " $ExternIP >> /var/log/dmesg
fi
sudo rm -f /etc/ipupdate/ipupdate.conf
sudo echo $ExternIP > /etc/ipupdate/ipupdate.conf
Reference URL's