Script Bash per aggiornamento ip dinamico FreePBX Asterisk

Script Bash per aggiornamento ip dinamico FreePBX Asterisk

Script per aggiornamento ip dinamico FreePBX Asterisk

Dopo l’ultima guida su come Configurare un trunk Asterisk su linea Vodafone, il mio centralino personale funziona benissimo (quasi). Naturalmente c’è sempre qualcosa da sistemare qua e là, e la prima cosa è quella dell’ip statico. Nel mio caso, avendo un ip dinamico, nel momento in cui cambia l’indirizzo (non spesso), le chiamate in ingresso non vengono inoltrate. Pur avendo un external FQDN con dyndns, ed aggiungendolo in FreePBX, purtroppo NON funziona. Quindi la soluzione è riscrivere nella tabella mysql il nuovo ip in maniera automatica. A questo proposito ho rispolverato uno script bash, che può essere modificato in base alle proprie esigenze:

#!/bin/bash
# This program gets the current IP address (as assigned by the ISP) from
# THIS SCRIPT IS STILL CONSIDERED EXPERIMENTAL - USE AT YOUR OWN RISK!!!
user="user"
pass="pw"
check=$(dig +short myip.opendns.com @resolver1.opendns.com) || { echo "Problem getting current IP address"; exit 1; }
if [[ ! $check =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Invalid IP address"; exit 1;
fi
readip=$(mysql asterisk -u $user -p$pass -se 'SELECT val FROM kvstore_Sipsettings where `key` = "externip"') || { echo "Can't read externip from MySQL asterisk database"; exit 1; }
if [ "$check" != "$readip" ]; then
# IP address has changed
# Send email
echo "This is an automated message - please do not reply. It appears that our external IP address has been changed to $check" | mail -s "External IP address may have been changed" you@someaddress.com
# Save new IP address to Asterisk SIP settings
mysql_response=$(mysql asterisk -u $user -p$pass -se 'update kvstore_Sipsettings set val='\"$check\"' where `key`="externip" ')
# Reload Asterisk
/var/lib/asterisk/bin/module_admin reload
fi

se ci sono problemi di formattazione, si può scaricare con:

$ wget https://www.dropbox.com/s/lrvyd83ezu62fb7/checkip.sh?dl=0 -O checkip.sh

le voci importanti da modificare sono: user, pw, ed aggiungere la propria mail eventualmente, per essere avvisati al cambiamento ip. Quindi:

# chmod u+rx checkip.sh
# mv checkip.sh /var/lib/asterisk/agi-bin/

se non presente dig, scaricarlo:

# apt install dnsutils

per testarlo subito eseguire:

# /var/lib/asterisk/agi-bin/./checkip.sh

Adesso è utile programmare un cron job che controlli l’indirizzo ip ad intervalli regolari. Io ho optato per un check ogni ora, anche se il mio ip non cambia così spesso:

# crontab -e

ed incollare qualcosa del genere:

*/60 * * * * /var/lib/asterisk/agi-bin/checkip.sh

adesso il nostro centralino asterisk non avrà più problemi a causa dell’ip dinamico. Testato e funzionante con Asterisk 14 FreePBX 14

Script Bash per aggiornamento ip dinamico FreePBX Asterisk

enjoy 😉

 

Autore: Franco Conidi aka edmond

Senior System Integrator, Network Administrator, Sys Admin Linux, Linux User, Consulente Informatico.

Un commento su “Script Bash per aggiornamento ip dinamico FreePBX Asterisk”

  1. Grazie per lo script.

    Ispirandomi al tuo scirpt, l’ho semplificato molto un po’ “alla cialtrona” forzando comunque l’ip esterno dento il database Asterisk ogni 15 minuti tramite CRON con una riga tipo:

    mysql asterisk -u root -proot -se ‘update kvstore_Sipsettings set val=’\”$(curl -s ifconfig.me)\”‘ where `key`=”externip” ‘

    Il curl chiama questo sito-utility ifconfig.me che rimanda l’ip esterno.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *