Synology - Script per IP dinamico e pagina web di redirect

Questa guida si propone di:

1. creare uno script bash che verifichi l'attuale IP pubblico del NAS Synology;
2. salvare tale IP in un file locale chiamato ip.txt;
3. caricare il file ip.txt in un proprio dominio;
4. creare un file PHP sul proprio dominio che effettui un redirect verso l'IP contenuto nel file ip.txt (ossia il nostro router).

Ho provato questo script su una macchina virtuale Synology DS3615xs con DSM 6.0.
Ho lavorato su un sistema Linux, quindi per i possessori di Windows bisogna adattare alcune parti della guida.

 

1. Creare uno script bash che verifichi l'attuale IP pubblico del NAS Synology
Il punto 1 in realtà contiene anche i punti 2 e 3, in quanto fa già tutto lo script bash.

 

A.
Innanzitutto, abilitare il servizio SSH sul NAS Synology:
Pannello di Controllo > Terminale e SNMP > Abilita servizio SSH > APPLICA
ed abilitare l'accesso all'utente admin, tutto questo accedendo al NAS tramite interfaccia web.

Avviare una sessione SSH sul proprio PC verso il NAS:
(su Linux) ssh Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
dove root è appunto l'utente root (non accedere come admin ma appunto root) e 192.168.123.123 è l'indirizzo IP del NAS, ovviamente inserire il proprio indirizzo.

 

B.
Creare, sul NAS, una directory condivisa dove salvare lo script:
Pannello di Controllo > Cartella condivisa > CREA... > APPLICA
Accedendo al NAS tramite interfaccia web.

Se si preferisce si può usare una directory già esistente, ma nel mio esempio ho creato una directory condivisa di nome "SCRIPT".

 

C.
creare, sul PC locale, un file bash chiamato check-ip.sh (o come si desidera) e copiarlo nella directory SCRIPT del NAS (o quella desiderata).
Se si preferisce si può agire totalmente da terminale, tramite una sessione SSH, creando il file direttamente sul NAS, modificarlo con l'editor vi, e salvare.
Tale file bash (check-ip.sh) avrà questo contenuto:

#/bin/bash
HOST="ftp.propriosito.it"
USER="utenteftp"
PASSWD="passwordftp"
IPADDRESS=$(curl https://ipinfo.io/ip)
if [[ "${IPADDRESS}" != $(cat /volume1/SCRIPT/ip.txt) ]]
then
  echo ${IPADDRESS} >/volume1/SCRIPT/ip.txt
  lftp -e "put -O directoryremota/ecc/ecc/ /volume1/SCRIPT/ip.txt; bye" -u $USER,$PASSWD $HOST
fi
exit 0

Dove:
- il contenuto delle variabili HOST, USER, PASSWD andrà cambiato. Tali variabili dovranno contenere i dati di accesso FTP al proprio dominio;
- /volume1/SCRIPT/ip.txt (presente 3 volte nello script) è il percorso, sul NAS, dove verrà salvato un file di testo (appunto ip.txt) contenente l'IP pubblico. Bisognerà, quindi, cambiare tale percorso in base alla propria gestione dei volumi disco presente sul NAS. Per comodità ho usato la stessa directory dello script;
- directoryremota/ecc/ecc/ è il percorso remoto FTP sul proprio dominio dove caricare il file ip.txt;

Per verificare il nome del proprio volume del NAS, (da me appunto volume1) basta andare sul menu principale e lanciare l'applicazione Gestione archiviazione,
accedendo al NAS tramite interfaccia web.
Da me, per esempio, si chiama "Volume 1".
Per verificare il suo punto di mount, basta usare nuovamente la sessione SSH avviata al punto 1A, digitando il comando

df

e fra i vari risultati apparirà il nome (normalmente tutto minuscolo, e soprattutto senza spazi) visto tramite interfaccia grafica web.
Se volessimo una riprova, basterà digitare (sempre nella sessione SSH) i comandi

cd /
ls -al

e si potrà notare, fra i risultati, la directory citata prima (da me, appunto, volume1).

Infine, bisogna rendere eseguibile lo script check-ip.sh appena creato, sul NAS ovviamente.
Per fare ciò, sempre nella sessione SSH da terminale, basta dare il comando

chmod +x /volume1/SCRIPT/check-ip.sh

Anche questa volta, al posto di volume1 bisogna scrivere il proprio percorso.

 

D.
Per provare lo script basta lanciarlo col comando

/volume1/SCRIPT/check-ip.sh

e verificare, oltre ad eventuali errori, se viene creato il file /volume1/SCRIPT/ip.txt.
Nel caso manchi il file /volume1/SCRIPT/ip.txt lo si può creare col comando

touch /volume1/SCRIPT/ip.txt

Poi lanciare nuovamente lo script e verificare che all'interno del file /volume1/SCRIPT/ip.txt vi sia il proprio IP pubblico.
Per effettuare tale verifica basta dare il comando

cat /volume1/SCRIPT/ip.txt

oppure, dal PC locale tramite un gestore file, accedere alla directory condivisa ed aprire direttamente il file con un editor di testo.

Un altro errore che si potrebbe ricevere è un "Connection refused" da parte del comando lftp lanciato all'interno dello script bash, terzultima riga dello script.
Normalmente lftp verifica il certificato ssl nella destinazione, se non trova alcun certificato verificato non esegue alcun comando, quindi dobbiamo disabilitare tale verifica.
Per fare ciò, da terminale tramite la solita sessione SSH, bisogna creare la directory /root/.lftp e creare al suo interno il file rc tramite i comandi

mkdir /root/.lftp
touch /root/.lftp/rc (è possibile saltare questo secondo comando)

Modificare con l'editor vi il file appena creato /root/.lftp/rc col comando

vi /root/.lftp/rc (se si è saltato il comando precedente, vi creerà il file)

Una volta all'interno dell'editor vi:
- premere i per abilitare la modifica
- inserire la seguente riga:
set ssl:verify-certificate no
- Premere ESC 2 volte per uscire dalla modalità modifica
- Chiudere salvando premendo 2 volte Z (maiuscola)

Ora basta provare a lanciare nuovamente lo script per vedere se tutto funziona a dovere.

 

E.
A questo punto, se non serve per altri scopi, si può disabilitare nuovamente il servizio SSH attivato al punto 1A, in quanto non bisognerà più accedere al NAS tramite terminale.

 

4. Creare un file PHP sul proprio dominio che effettui un redirect verso l'IP contenuto nel file ip.txt (ossia il nostro router).
A questo punto, è possibile creare un file PHP sul proprio sito, che effettui il redirect al nostro IP, leggendo tale IP direttamente dal file directoryremota/ecc/ecc/ip.txt caricato dallo script creato al punto 1.

Il file PHP avrà questo conenuto:

<?php
include './ip.txt';
$indirizzo =  file_get_contents("./ip.txt");
header("Location: http://$indirizzo");
?>

 

5. Impostare un aggiornamento automatico.

A questo punto, se tutto è corretto, ogni volta che apriremo questo file PHP sul sito verremo reindirizzati al nostro IP "di casa", ammesso che sia aggiornato.

Per fare in modo che il file ip.txt sia sempre aggiornato non basta fare altro che aggiungere un'operazione pianificata nel NAS.
Per aggiungere tale pianificazione basta andare in:
Pannello di Controllo > Utilità di Pianificazione > Pulsante CREA > Script definito dall'utente

All'interno della finestra del task che si aprirà:
Nella scheda GENERALE
- Dare un nome al task;
- Lasciare l'utente root;
- Spunta su Abilita;
- Nella casella "Esegui Comando" bisogna scrivere il percorso dello script da lanciare, nel mio caso /volume1/SCRIPT/check-ip.sh
Nella scheda PROGRAMMAZIONE
- Impostare la programmazione desiderata, ad esempio ogni 15 minuti.

 

FINE.