NAS-script: Check extern IP-adres – Versie 1.1

Status: Verouderd, versie 1.3 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.

Update

Verbeterde versie van versie 1.0 van dit script. Op de eerste van de maand wordt nu een reminder uitgestuurd met het huidige IP-adres zodat je in ieder geval één keer per eraan wordt herinnert dat dit script nog draait. Daarnaast de code consistenter gemaakt qua output wanneer handmatig gedraaid.

Code

# Steenderen.NET
# NAS-script: Check extern IP-adres - Versie 1.1

#!/bin/bash
IFS="`printf '\n\t'`"

# Setup
MAIL_FROM="mail@provider.com"
MAIL_TO="mail@provider.com"
MAIL_OLD_IP="Oude IP-adres"
MAIL_CURRENT_IP="Huidige IP-adres"
MAIL_SUBJECT_CHANGED="Extern IP-adres is gewijzigd"
MAIL_BODY_START_CHANGED="Beste gebruiker,\n\nHet externe IP-adres waarop uw NAS is aangesloten is gewijzigd."
MAIL_BODY_END_CHANGED="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_SUBJECT_MONTHLY="Herinnering extern IP-adres"
MAIL_BODY_START_MONTHLY="Beste gebruiker,\n\nDit is de maandelijkse herinnering aan het externe IP-adres waarop uw NAS is aangesloten."
MAIL_BODY_END_MONTHLY="Er is geen wijziging geconstateerd, er hoeft verder geen actie te worden ondernomen."
MAIL_SIGNATURE="Met vriendelijke groeten,\nSynology DiskStation"

# No need to edit below here.
echo "Start running External IP address check 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 for first time stored in $CURRENT_DIR/check_ip.txt to compare to the next time."
	/usr/syno/bin/synologset1 sys info 0x11100000 "External IP address check: IP address is "$MY_IP_ADDRESS" and now for first time 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
		if [[ `date +%d` == "01" ]]; then
			/usr/bin/php -r 'mail("'$MAIL_TO'", "'$MAIL_SUBJECT_MONTHLY'", "'$MAIL_BODY_START_MONTHLY'\n\n'$MAIL_CURRENT_IP': '$CURRENT_IP_ADDRESS'\n\n'$MAIL_BODY_END_MONTHLY'\n\n'$MAIL_SIGNATURE'", "From: '$MAIL_FROM'");';
			echo "- IP address was not changed, first of the month, monthly e-mail was sent out."
			/usr/syno/bin/synologset1 sys info 0x11100000 "External IP address check: IP address ("$MY_IP_ADDRESS") was not changed but it is the first of the month, monthly e-mail was sent out";			
		else
			echo "- IP address was not changed, no futher action taken."
			/usr/syno/bin/synologset1 sys info 0x11100000 "External IP address check: IP address ("$MY_IP_ADDRESS") was not changed, no further action taken";
		fi
	else
		/usr/bin/php -r 'mail("'$MAIL_TO'", "'$MAIL_SUBJECT_CHANGED'", "'$MAIL_BODY_START_CHANGED'\n\n'$MAIL_OLD_IP': '$MY_IP_ADDRESS'\n'$MAIL_CURRENT_IP': '$CURRENT_IP_ADDRESS'\n\n'$MAIL_BODY_END_CHANGED'\n\n'$MAIL_SIGNATURE'", "From: '$MAIL_FROM'");';
		echo "- IP address was changed, notification e-mail was sent out."
		/usr/syno/bin/synologset1 sys info 0x11100000 "External IP address check: IP address was changed from "$MY_IP_ADDRESS" to "$CURRENT_IP_ADDRESS", notification e-mail was sent out";

		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 keer uitvoeren van het script 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-mails.

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 verstuurt 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.

Eén reactie

  1. Hoi,

    Ik heb een DS418play

    Ik krijg het script niet werkend:

    Krijg steeds maar de melding:

    Start running External IP address check script.
    /volume1/System/Nas_System_Files/check_ip.sh: line 49: syntax error: unexpected end of file

    Er zou iets in de syntax fout zijn maar ik kan maar niet ontdekken wat het is..

    M.v.g.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.