Status: Verouderd, versie 1.1 is beschikbaar.
Beschrijving
Script om te controleren of je externe IP-adres is gewijzigd (aangezien dit door je Internet Service Provider lang niet altijd wordt gecommuniceerd als dit gebeurd). Het gevolg van een wijziging zijn dat bijvoorbeeld DNS-records en Firewall-autorisaties op basis van IP-adres niet meer correct zijn.
Het script controleert het bestand check_ip.txt op het laatst bekende IP-adres. Bestaat dit bestand nog niet, dan wordt dit aangemaakt en wordt hierin het huidige IP-adres opgeslagen. Bestaat dit bestand wel, en bevat dit een ander IP-adres dan het huidige IP-adres, dan wordt een notificatie e-mail uitgestuurd en wordt het bestand geüpdate met het nieuwe IP-adres.
Code
#!/bin/bash
IFS="`printf '\n\t'`"
# Setup
MAIL_FROM="mail@provider.com"
MAIL_TO="mail@provider.com"
MAIL_SUBJECT="Synology NAS: IP-adres is gewijzigd"
MAIL_BODY_START="Beste gebruiker,\n\nHet externe IP-adres waarop uw NAS is aangesloten is gewijzigd."
MAIL_OLD_IP="Oude IP-adres"
MAIL_NEW_IP="Nieuwe IP-adres"
MAIL_BODY_END="Voor een juiste werking kan het o.a. nodig zijn om DNS-records en firewall-autorisaties aan te passen naar het nieuwe IP-adres."
MAIL_SIGNATURE="Met vriendelijke groeten,\nSynology DiskStation"
# No need to edit below here.
echo "Start running check ip address script."
# Get directory where script is run from
CURRENT_DIR=$(cd `dirname $0` && pwd)
#cd $CURRENT_DIR
# The last known IP address is stored in check_ip.txt.
if [[ ! -f "$CURRENT_DIR/check_ip.txt" ]]; then
echo "File $CURRENT_DIR/check_ip.txt does not exist, external IP address is looked up for first time."
MY_IP_ADDRESS="$(curl -silent -L ipinfo.io/ip|tail -n 1)"
echo $MY_IP_ADDRESS > $CURRENT_DIR/check_ip.txt
echo "External IP address is $MY_IP_ADDRESS and now stored in $CURRENT_DIR/check_ip.txt to compare to the next time."
else
MY_IP_ADDRESS="$(cat $CURRENT_DIR/check_ip.txt)"
echo "$MY_IP_ADDRESS found as last known IP address in $CURRENT_DIR/check_ip.txt."
CURRENT_IP_ADDRESS="$(curl -silent -L ipinfo.io/ip|tail -n 1)"
echo "$CURRENT_IP_ADDRESS found as current IP address."
if [[ "$CURRENT_IP_ADDRESS" == "$MY_IP_ADDRESS" ]]; then
echo "IP address was not changed, no futher action taken."
else
/usr/bin/php -r 'mail("'$MAIL_TO'", "'$MAIL_SUBJECT'", "'$MAIL_BODY_START'\n\n'$MAIL_OLD_IP': '$MY_IP_ADDRESS'\n'$MAIL_NEW_IP': '$CURRENT_IP_ADDRESS'\n\n'$MAIL_BODY_END'\n\n'$MAIL_SIGNATURE'", "From: '$MAIL_FROM'");';
/usr/syno/bin/synologset1 sys info 0x11100000 "Finished IP check script. IP address was changed from "$MY_IP_ADDRESS" to "$CURRENT_IP_ADDRESS;
echo "IP address was changed, notification e-mail was sent out and message was sent to logbook."
echo $CURRENT_IP_ADDRESS > $CURRENT_DIR/check_ip.txt
echo "New IP address stored in check_ip.txt to compare to next time."
fi
fi
# Done!
echo "Done running check ip address script."
Installatie-instructies
Sla het script op in een nieuw bestand met de naam check_ip.sh en plaats deze op. Op dezelfde locatie wordt bij de eerste uitvoeren van het script ook het bestand check_ip.txt aangemaakt.
Vul in het script, onder #Setup, ten minste de eerste twee variabelen in m.b.t. de te verzenden notificatie e-mail.
Plan het script in om dagelijks te draaien via de Taakplanner in het Configuratiescherm van je NAS. Ik heb ‘m zelf om 23:59 uur draaien, een minuut voordat mijn backup naar een externe locatie begint. Mocht mijn IP-adres gewijzigd zijn, dan kan dat de oorzaak zijn waarom een backup mislukt. Door de e-mail die dit script verstuurd is dat dan gelijk duidelijk.
Let er bij het inplannen op dat je het volledige pad gebruikt naar de locatie waar je het script het opgeslagen, dit is bijvoorbeeld /volume1/beheer/check_ip.sh
Opmerkingen
Aangezien dit een redelijk standaard script is, zou dit in principe op ieder Linux apparaat (bijv. ook een Raspberry Pi) moeten draaien. Inplannen doe je dan uiteraard via Crontab.