Aller au contenu

[TUTO] Envoi de mail de changement de IP pour DSM et SRM


Superthx

Messages recommandés

Je n'ai pas trouver d'option pour être averti automatiquement de changement de mon IP sur les produits synology.

Donc je propose un script fonctionnel pour DSM et SRM.

DSM

Actuellement je suis sous DSM 6.2.2-24922 Update 2

Il va falloir crée un script dans le planificateur de tâches en tant que root dans configuration:

Dans exécuter la commande mettez le script suivant. Je laisse la fréquence sur toutes les minutes.

Dans cette exemple il creera 2 fichiers : ip.txt + message.txt(ce dernier s'efface automatiquement)

Dans cette exemple il creera le fichier dans

/volume1/administration/check_ip_wan/

Modifier le script selon l'endroit où vous voulez placer ces fichiers.

#!/bin/bash

file=/volume1/administration/check_ip_wan/ip.txt #indique ou se trouve ip.txt
old_ip=`curl -silent -L http://checkip.amazonaws.com|tail -n 1` #verifie l'ip actuel

##Verifie que ip.txt existe, sinon creation du fichier##
if test -f "$file"; then
    echo "$file exist"
    else
    echo "create $file"
        `touch /volume1/administration/check_ip_wan/ip.txtip.txt`
        `echo $insert_ip > /volume1/administration/check_ip_wan/ip.txt/ip.txt`
fi
##Fin de verification que ip.txt existe##

current_ip=`curl -silent -L http://checkip.amazonaws.com|tail -n 1` #verification de l'ip actuel
old_ip=`cat /volume1/administration/check_ip_wan/ip.txt` # destination du fichier ip.txt

#####################
### CONFIGURATION ###
#####################
to="monmail@ndd.com" #changez par votre mail de destination
from="Serveur xxxx <monmail@ndd.com>"#Nom de l'expediteur et changez par votre mail de destination 
subject="Votre adresse IP publique (IPv4) a changé !\r\n"

# contenu du message
body=`printf "Bonjour,\r\n\rVotre adresse IP publique a changé !\r\n\r\nVotre ancienne adresse IP était : $old_ip\r\nVotre nouvelle adresse IP est : $current_ip\r\n\r\nCordialement..."`
# destination du message temporaire
messageFile="/volume1/administration/check_ip_wan/message.txt"

##############
### SCRIPT ###
##############
if [ "$old_ip" != "$current_ip" ]; then
        # création du fichier ip.txt et envoi d'un mail avec les informations
        `touch /volume1/administration/check_ip_wan/ip.txt`
        `echo $current_ip > /volume1/administration/check_ip_wan/ip.txt`

        echo -e "to:${to}">${messageFile};
        echo -e "from:${from}">>${messageFile};
        echo -e "subject:${subject}">>${messageFile};
        echo -e "${body}" >> ${messageFile};
        ssmtp -v ${to} < /volume1/administration/check_ip_wan/message.txt;
        rm ${messageFile}

else
        echo "Adresse IP non changé !"
fi

SRM

Actuellement je suis sou SRM 1.2.2-7915 avec un RT2600ac

Actuellement SRM ne propose pas de fonction comme DSM pour une tâche planifiée. Donc va falloir utiliser crontab et créer ses fichiers.

Activez l’accès ssh sur votre SRM (Panneau de configuration / Services).

J'utilise actuellement une carte sd sur mon RT2600ac.

Dans cette carte via File Station j'ai crée un répertoire scripts et un sous répertoire tmp dans script.

Vous pouvez bien sur crée un répertoire directement dans la mémoire du routeur si vous utilisez pas de carte sd. Il vous suffit juste d'adapter le code à votre besoin.

Rentrer en ssh en tant que avec putty sur votre routeur.

faites ceci pour creer le fichier script :

vi /volumeUSB1/usbshare1-1/scripts/ip_notify.sh
chmod 755 ip_notify.sh

appuyez sur i pour inserer le code suivant :

#!/bin/sh

file=/volumeUSB1/usbshare1-1/scripts/tmp/ip.txt #indique ou se trouve ip.txt
old_ip=`curl -silent -L http://checkip.amazonaws.com|tail -n 1` #verifie l'ip actuel

##Verifie que ip.txt existe, sinon creation du fichier##
if test -f "$file"; then
    echo "$file exist"
    else
    echo "create $file"
        `touch /volumeUSB1/usbshare1-1/scripts/tmp/ip.txt`
        `echo $insert_ip > /volumeUSB1/usbshare1-1/scripts/tmp/ip.txt`
fi
##Fin de verification que ip.txt existe##

current_ip=`curl -silent -L http://checkip.amazonaws.com|tail -n 1` #verification de l'ip actuel
old_ip=`cat /volumeUSB1/usbshare1-1/scripts/tmp/ip.txt` # destination du fichier ip.txt

#####################
### CONFIGURATION ###
#####################
to="monmail@ndd.com" #changez par votre mail de destination
from="Serveur xxxx <monmail@ndd.com>"#Nom de l'expediteur et changez par votre mail de destination 
subject="Votre adresse IP publique (IPv4) a changé !\r\n"

# contenu du message
body=`printf "Bonjour,\r\n\rVotre adresse IP publique a changé !\r\n\r\nVotre ancienne adresse IP était : $old_ip\r\nVotre nouvelle adresse IP est : $current_ip\r\n\r\nCordialement..."`
# destination du message temporaire
messageFile="/volumeUSB1/usbshare1-1/scripts/tmp/message.txt"

##############
### SCRIPT ###
##############
if [ "$old_ip" != "$current_ip" ]; then
        # création du fichier ip.txt et envoi d'un mail avec les informations
        `touch /volumeUSB1/usbshare1-1/scripts/tmp/ip.txt`
        `echo $current_ip > /volumeUSB1/usbshare1-1/scripts/tmp/ip.txt`

        echo -e "to:${to}">${messageFile};
        echo -e "from:${from}">>${messageFile};
        echo -e "subject:${subject}">>${messageFile};
        echo -e "${body}" >> ${messageFile};
        ssmtp -v ${to} < /volumeUSB1/usbshare1-1/scripts/tmp/message.txt;
        rm ${messageFile}

else
        echo "Adresse IP non changé !"
fi

Maintenant il va falloir créer une tâche planifiée.

Pour cela il va falloir ajouter une ligne dans crontab.

faites :

vi /etc/crontab

insérer une nouvelle ligne comme ceci :

*       *       *       *       *       root    /bin/sh /volumeUSB1/usbshare1-1/scripts/ip_notify.sh

avec ceci le script vérifie automatiquement toutes les minutes si l'ip change.

Remerciement : @Zeus

Modifié par Superthx
Modification du script par celui de @Zeus
Lien vers le commentaire
Partager sur d’autres sites

Citation

Je n'ai pas trouver d'option pour être averti automatiquement de changement de mon IP sur les produits synology.

Bonjour,

Je n'ai pas très bien compris le concept. Tu parles d'un changement d'adresse IP de quoi exactement ?

Parce que tu as déjà sur nos syno une notification d'intégrée en cas de changement d'adresse ip.

Panneau de configuration > Sécurité

 

Modifié par Zeus
Lien vers le commentaire
Partager sur d’autres sites

Il y a 21 heures, Zeus a dit :

Parce que tu as déjà sur nos syno une notification d'intégrée en cas de changement d'adresse ip.

Oui. Mais celui t'envoi un mail directement. Car je passe pas mon temps sur le bureau du DSM 😝. Car si tu as à comme un serveur DNS et l'ip change, tu peux modifier l'ip dynamique grâce à l'envoi du mail par exemple. 

Sinon decommenter la ligne comme ceci et laisser l'option cocher comme tu dis.....

Il y a 21 heures, Zeus a dit :

Panneau de configuration > Sécurité

 

Modifié par Superthx
Lien vers le commentaire
Partager sur d’autres sites

Il y a bien ce petit script en ssh mais je crois que la fonction mail ne fonctionne pas.

 

#! /bin/bash

#recuperation de l'ancienne ip
adrip=$(grep [1-9] < /volume1/administration/check_ip_wan/ip.txt)

#recuperation de la nouvelle ip
adrip2=$(wget http://checkip.dyndns.org/ -O - | cut -d: -f 2 | cut -d\< -f 1)

#test de l'ip
if [ $adrip != $adrip2 ]
then
echo $adrip2 | xxxxx@ndd.tld
else
echo $adrip2
fi

#mise a jour adresse dans le fichier
echo $adrip2 > /volume1/administration/check_ip_wan/ip.txt

 

Lien vers le commentaire
Partager sur d’autres sites

il y a 3 minutes, Zeus a dit :

#! /bin/bash #recuperation de l'ancienne ip adrip=$(grep [1-9] < /volume1/administration/check_ip_wan/ip.txt) #recuperation de la nouvelle ip adrip2=$(wget http://checkip.dyndns.org/ -O - | cut -d: -f 2 | cut -d\< -f 1) #test de l'ip if [ $adrip != $adrip2 ] then echo $adrip2 | xxxxx@ndd.tld else echo $adrip2 fi #mise a jour adresse dans le fichier echo $adrip2 > /volume1/administration/check_ip_wan/ip.txt

Je vais le tester plus tard.

Peut être était il valid sous DSM 5. Je sais pas. Mais sous DSM 6 et SRM la fonction d'envoi de mail est différente.......

Lien vers le commentaire
Partager sur d’autres sites

Je reviens avec de bonnes nouvelles 🙂

Je suis en train de finir le script. N'ayant pas de grandes connaissances, j'ai prit des petits bouts par ci par là et je le façonne à ma façon.

Encore une petite erreur à régler dans la génération du mail et c'est tout bon. J'ai une partie du corps du message qui se met dans le sujet grrrr

Modifié par Zeus
Lien vers le commentaire
Partager sur d’autres sites

Je viens de relire la conversation et je suis complètement à la ramasse. Je pensais au départ que tu posais des questions et je n'avais pas du tout remarqué que tu avais posté un tuto 😂

Et depuis hier, je bosse sur un script similaire au tien en plus (on a les même sources ?)...

Par contre, dans ton script, tu supprimes le fichier txt. Comment fait-il pour comparer avec un possible changement ?

De mon côté, le fichier qui contient l'adresse IP reste présent et la comparaison se fait directement avec ce qui est contenu dans le fichier. C'est d'ailleurs en modifiant cette IP que le script est fonctionnel en demo de mon côté car j'ai une IP fixe (non garantie par SFR).

Autre chose,  tu ne précises pas la configuration de "ssmtp" dans ton tuto, tu devrais ajouter cette étape avec la configuration des deux fichiers. De mon côté, ils étaient vide donc je suppose que ça l'est pour tout le monde de base.

 

Mon script mais qui n'est pas à 100%  fonctionnel sur l'affichage dans le mail (from, to et subject se retrouve dans le corps du message :

#!/bin/sh
current_ip=`curl -silent -L http://checkip.amazonaws.com|tail -n 1`
old_ip=`cat /volume1/administration/check_ip_wan/ip.txt`

# configuration
to="destinataire@ndd.tld"
from="Serveur xxxx <expediteur@ndd.tld>\r\n"
subject="Changement d'adresse IP publique (IPv4)"

if [ "$old_ip" != "$current_ip" ]; then
	# création du fichier ip.txt et envoi d'un mail avec les informations
	`touch /volume1/administration/check_ip_wan/ip.txt`
	`echo $current_ip > /volume1/administration/check_ip_wan/ip.txt`
	body=`printf "Bonjour,\r\n\rVotre adresse IP publique a changé !\r\n\r\nVotre ancienne adresse IP était : $old_ip\r\n Votre nouvelle adresse IP est : $current_ip\r\n\r\nCordialement..."`
	
	`echo -e "From:$from\nTo:$to\nSubject:$subject\n\n$body" | /usr/bin/ssmtp destinataire@ndd.tld` #adresse mail du destinataire	
fi

EDIT : d'ailleurs, j'ai testé ton script et il est pas fonctionnel de mon côté.

Si tu as prit celui qui est sur Github, il ne fonctionnait déjà pas avec mes essais

Modifié par Zeus
Lien vers le commentaire
Partager sur d’autres sites

il y a 8 minutes, Zeus a dit :

Et depuis hier, je bosse sur un script similaire au tien en plus (on a les même sources ?)...

J'avais repris un ancien script de mon ASUS RT.

il y a une heure, Zeus a dit :

Par contre, dans ton script, tu supprimes le fichier txt. Comment fait-il pour comparer avec un possible changement ?

Je suis con. Tu as raison. Au debut le script devais se lancer au demarrage du routeur. Mais je ne trouve pas d'info pour lancer un script au demarrage du routeur. On aurait sleep pour eviter crontab.

il y a une heure, Zeus a dit :

Autre chose,  tu ne précises pas la configuration de "ssmtp" dans ton tuto, tu devrais ajouter cette étape avec la configuration des deux fichiers. De mon côté, ils étaient vide donc je suppose que ça l'est pour tout le monde de base.

Pas besoin de fichiers pour ssmtp, car il le cree le fichier ip_current.txt et l'efface derriere avec rm.

messageFile="/volumeUSB1/usbshare1-1/scripts/tmp/ip_current.txt"
	echo -e "To:${emailtoaddr}">${messageFile};
	echo -e "From:${emailfromname}">>${messageFile};
	echo -e "Subject:${emailsubject}">>${messageFile};
	echo -e "The New IP is ${ip}" >> ${messageFile};
	ssmtp -v ${emailtoaddr} < /volumeUSB1/usbshare1-1/scripts/tmp/ip_current.txt;
	rm ${messageFile}

Je modifie le script et je reviens.

Lien vers le commentaire
Partager sur d’autres sites

Voilà le script que j'ai modifié à ma sauce et qui fonctionne maintenant parfaitement 🙂

Peut-être moche aux yeux des pros de bash, je ne sais pas...

Fonctionnement du script :

  1. Consulte le service Amazon pour obtenir l'adresse IP WAN
  2. Compare l'adresse IP inscrite dans le fichier ip.txt (si pas de fichier alors il le crée)
  3. Si l'adresse IP est nouvelle  (premier lancement du script) ou la même, il ne fait rien.
  4. Si l'adresse IP change, il l'inscrit dans le fichier ip.txt à la place de l'ancienne et il envoi un mail pour prévenir de la nouvelle adresse IP.
#!/bin/sh
current_ip=`curl -silent -L http://checkip.amazonaws.com|tail -n 1`
old_ip=`cat /volume1/administration/check_ip_wan/ip.txt` # destination du fichier ip.txt

#####################
### CONFIGURATION ###
#####################

to="destinataire@ndd.tld" 
from="Serveur xxx <expediteur@ndd.tld>"
subject="Votre adresse IP publique (IPv4) a changé !\r\n" 

# contenu du message
body=`printf "Bonjour,\r\n\rVotre adresse IP publique a changé !\r\n\r\nVotre ancienne adresse IP était : $old_ip\r\nVotre nouvelle adresse IP est : $current_ip\r\n\r\nCordialement..."`
# destination du message temporaire
messageFile="/volume1/administration/check_ip_wan/message.txt"

##############
### SCRIPT ###
##############
if [ "$old_ip" != "$current_ip" ]; then
	# création du fichier ip.txt et envoi d'un mail avec les informations
	`touch /volume1/administration/check_ip_wan/ip.txt`
	`echo $current_ip > /volume1/administration/check_ip_wan/ip.txt`
	
	echo -e "to:${to}">${messageFile};
	echo -e "from:${from}">>${messageFile};
	echo -e "subject:${subject}">>${messageFile};
	echo -e "${body}" >> ${messageFile};
	ssmtp -v ${to} < /volume1/administration/check_ip_wan/message.txt;
	rm ${messageFile}
	
else
	echo "Adresse IP non changé !"
fi

 

Modifié par Zeus
Lien vers le commentaire
Partager sur d’autres sites

Bonjour;

Juste une remarque.
Ne trouvez vous pas qu'il y ai un risque a transmettre son adresse IP en clair par mail?

Pour ma part j'ai un script ( pour Zeus: en python bien sur!) qui envoie également cette info de changement d'IP.
Mais dans celui-ci cette IP est codée (à ma sauce!!!).

Je sais, je suis très parano!!!

Lien vers le commentaire
Partager sur d’autres sites

Tu as un script pour moi, c'est gentil dis donc 😍

C'est quand même pas le script pour le certificat wildcard ? Si ?

Quant au risque, je ne crains pas trop non.

  1. Ce n'est qu'une adresse IP. Les admins et possiblement les modérateurs sur ce forum ont notre IP WAN par exemple ainsi que tous les sites visités sans compter les différents services appelés dans leurs scripts.
  2. Mon mail part normalement en SSL. Après vérification, je confirme qu'il part bien chiffré.

 

Modifié par Zeus
Lien vers le commentaire
Partager sur d’autres sites

Modification, verifie si tu veux:

Mais dans ton code il recree à chaque fois le fichier ip.txt. Non ?

 

##############
### SCRIPT ###
##############
file=/volume1/administration/check_ip_wan/ip.txt
insert_ip=`curl -silent -L http://checkip.amazonaws.com|tail -n 1` #verifie l'ip actuel
if test -f "$file"; then
    echo "$file exist"
    else
    echo "create $file"
        `touch /volume1/administration/check_ip_wan/ip.txt`
        `echo $insert_ip > /volumeUSB1/usbshare1-1/scripts/tmp/current_ip.txt`
fi
old_ip = `/volume1/administration/check_ip_wan/ip.txt`
if [ "$old_ip" != "$current_ip" ]; then
	echo -e "to:${to}">${messageFile};
	echo -e "from:${from}">>${messageFile};
	echo -e "subject:${subject}">>${messageFile};
	echo -e "${body}" >> ${messageFile};
	ssmtp -v ${to} < /volume1/administration/check_ip_wan/message.txt;
	rm ${messageFile}
	
else
	echo "Adresse IP non changé !"
fi

 

Modifié par Superthx
Lien vers le commentaire
Partager sur d’autres sites

il y a 12 minutes, PPJP a dit :

Pour ma part j'ai un script ( pour Zeus: en python bien sur!) qui envoie également cette info de changement d'IP

Partage SVP

il y a 5 minutes, Zeus a dit :

Tu as un script pour moi, c'est gentil dis donc 😍

Je veux bien aussi

Lien vers le commentaire
Partager sur d’autres sites

Non, Ce n'est pas le script pour le wildcard.
D'ailleurs ou en est-il? Il y a longtemps que je n'ai pas de retour de votre part.

L'envoi de mail est chez moi programmé dans un modulePython3 qui est appelé par plusieurs scripts.
En particulier un qui tiens à jour mon IP dans les DNS de mes domaines.
En effet GANDI ne propose pas de DDNS.

Lien vers le commentaire
Partager sur d’autres sites

C'est normal si tu n'as pas eu de nouvelles depuis, il ne veut pas faire de renouvellement. Il m'indique à chaque fois dans le log que le certificat est trop récent. Donc j'attends maintenant 😁

Mais ne t'inquiète pas, je te laisse pas sans réponse...

 

Pour ton script IP en python, je crois que tu m'en avais peut-être déjà parlé mais je l'avais jamais vu. En même temps, j'en avais pas l'utilité à la base car à l'époque j'étais encore en full ip fixe chez Free.

 

Modifié par Zeus
Lien vers le commentaire
Partager sur d’autres sites

Je confirme ce que je disait avant.

Il cree le fichier mais apres car j'ai

cat: can't open '/volumeUSB1/usbshare1-1/scripts/tmp/ip.txt': No such file or directory

car tu as :

old_ip=`cat /volume1/administration/check_ip_wan/ip.txt` # destination du fichier ip.txt

hors ce fichier n'existe pas.

Mais c'est pas grave car après tu as touch qui le crée.

Je modifie le tuto dans la soirée.

C'est ok ?

 

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.