Se siete un po’ nerd e avete in casa o in ufficio un server al quale dovete poter accedere (magari da un terminale remoto con ssh) saprete che spesso il proprio internet provider non garantisce un IP pubblico fisso (se non a pagamento) e questo può rivelarsi un problema, ecco perché ho pensato ad un semplice script automatico che può essere d’aiuto.
Premetto che ci sono diversi modi per ottenere lo stesso risultato, come ad esempio passare da un servizio di DDNS in grado di aggirare anche il problema delle reti nattate, ma io sono più “vecchio stile” e preferisco avere tutto sotto controllo senza dipendere da nessuno.
Ma perché uno script? Perchè funziona a prescindere; è il livello più basso del sistema e anche se altri servizi dovessero crashare la bash dovrebbe essere una garanzia (quasi sempre).
E perché Telegram? Per lo stesso motivo; l’invio di una notifica a Telegram dipende unicamente da una chiamata http tramite curl.
Personalmente posseggo un piccolo server casalingo che si occupa di gestire la domotica e alcuni altri servizi, per precisa scelta ho optato per un’installazione su Ubuntu Server con tutti i servizi extra in Docker, questo dovrebbe garantirmi che anche se uno di questi dovesse crashare o non avviarsi per i motivi più disparati, il sistema dovrebbe essere in grando di andare up senza problemi.
Questo script è solo una funziona di backup, utilizzo un tunnel Cloudflare per la domotica e un bot Telegram in grado di inviarmi l’IP in ogni momento, ma come detto in precedenza, tutto questo dipende da altri servizi che devono avviarsi ed essere disponibili, cosa non così scontata.
Per fare ciò a cui ambisce questa guida avrete bisogno di:
- 1 Bot Telegram
- il vostro chat_id Telegram
- 1 terminale (locale o remoto con ssh è indifferente)
- curl installato
- 1 connessione ad internet
Creare un Bot Telegram è una procedura ormai abbastanza semplice ma se ne avete uno già attivo potete tranquillamente utlizzare quello. Comunque ecco i passi salienti:
- aprite Telegram e cercate un bot chiamato @BotFather
- avviatelo e selezionate dal menu “create a new bot“
- seguite le istruzioni inserendo le informazioni richieste e segnatevi il Token che vi viene fornito al termine e che dovrebbe essere qualcosa di simile a: 1234567890:AbCdefghaILmHngF (eventualmente può essere recuperato in un secondo momento)
Per recuperare il chat_id vi consiglio di aprire Telegram, cercare un bot che si chiama @GetMyChatID_Bot e avviarlo, troverete immediatamente il vostro chat_id che dovrete segnarvi da parte insieme al token visto in precedenza.
Ora aprite un terminale sul pc che vi interessa (in locale o tramite ssh è indifferente), e cominciate a creare il file di testo dove memorizzare il vostro ip pubblico, io ho scelto di salvarlo nella mia home ma non è vincolante. Dal terminale digitate:
touch /home/username/pubblic_ip.txtOra non resta che passare allo script vero e proprio, anche questo può essere memorizzato in qualsiasi posizione, io sono rimasto nella home:
nano /home/username/ip_notifier.shNell’editor di testo che appare incollate il seguente codice:
#!/bin/bash
# Script to report public IP address change
ext_ip="/home/username/pubblic_ip.txt"
# Forza IPv4 con -4, con fallback su altri servizi
new_ip=$(curl -4 --max-time 10 -s http://ifconfig.me/ip 2>/dev/null || \
curl -4 --max-time 10 -s https://ipv4.icanhazip.com 2>/dev/null || \
curl -4 --max-time 10 -s https://api4.my-ip.io/ip 2>/dev/null)
# Rimuove eventuali spazi/newline residui
new_ip=$(echo "$new_ip" | tr -d '[:space:]')
# Verifica che sia un IPv4 valido (sanity check)
if ! echo "$new_ip" | grep -qE '^([0-9]{1,3}\.){3}[0-9]{1,3}$'; then
echo "$(date): IP non valido ottenuto: $new_ip" >> /home/username/ip_errors.log
exit 1
fi
if [ -f "$ext_ip" ]; then
know_ip=$(cat "$ext_ip")
else
know_ip=""
fi
if [ "$new_ip" != "$know_ip" ]; then
echo "$new_ip" > "$ext_ip"
curl -s -X GET "https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<CHAT_ID>&text=Nuovo+IP:+$new_ip"
fi
ovviamente dovrete motificare i valori di ext_ip e quelli relativi al token e chat_id di Telegram inserendo i vostri.
Ora bisogna renderlo eseguibile:
chmod +x /home/username/ip_notifier.shFinito, adesso ogni volta che verrà eseguito lo script, se ci sarà una variazione dell’IP pubblico, il sistema inviarà una notifica con il nuovo valore direttamente su Telegram.
Per rendere il tutto automatico, io ho scelto di impostare crontab perchè esegua in autonomia lo script ogni 3 ore, che è per me un tempo ragionevole di “vuoto” in caso di problemi.
Come ogni cosa in informatica, il limite è solo la propria fantasia.





Ottima soluzione con probemi per farla funzionare ( scarso di Linux ) Help me
Ciao, che problemi hai?
ciao bot ok ma pare che non memorizzi l IP nella $new_ip, e lancio questo new_ip=$(curl http://ifconfig.me/ip) lo vedo ma poi ….ce modo di vedere se rimane nella cella ??
tutto OK piano piano si impara, poi battendo il naso entra meglio e rimane piu a lungo per la prossima volta
Grazie spero di provarlo meglio nel whekend
Saluti
Versione Firmware: XF6_4.0.06.09
Indirizzo WAN IPv4: xx.x5x.xx5.xx
Indirizzo WAN IPv6: 2×01:x27:5×13:8×58::x
Come si potrebbe risolvere ?
io se metto quello a web sia IPV4 che IPV6 entro nel sistema remoto con l’altro inviato al BOT no.
Ho gia cercato di troncare la stringa con info lette in giro ma essendo diversi i numeri non funzionerà mai …
.
quando una cosa funziona bisogna smontarla altrimenti ci annoiamo ……
tnx
Ciao e scusa il ritardo ma ci ho ragionato un attimo e credo di aver trovato la soluzione. Ho aggiornato l’intero script, ora chiede esplicitamente l’IPV4 e non considera eventuali altri dati.
Ciao ti ringrazio
lo sto provando ma ce qualche problema
bash: ./ip_notifier.sh: /bin/bash^M: bad interpreter: No such file or directory
non riesco a capire lo installo su un Pzero non ho adesso a disposizione un rp3b altrimenti avrei provato
Hai idea ??
tnx
Se hai editato lo script su Windows è un problema comune, collagati al PiZero con SSH ed correggi con:
sed -i ‘s/\r//’ ip_notifier.sh
chmod +x ip_notifier.sh
./ip_notifier.sh
Ciao, ho dovuto creare ip_notifica.sh nuovo nome e si è sistemato tutto , non ne voleva sapere di funzionare, meglio così
Grazie ottima soluzione che speriamo duri anni.
Io un pezzo alla volta mi inietto un po di comandi nuovi, non è cosi facile districarsi
lunga vita a Linux