Aller au contenu

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


Superthx

Messages recommandés

il y a 20 minutes, PPJP a dit :

A tout hasard essayez de changer le nom du fichier boot.sh en S97boot.sh.

ce qui ce passe c'est que j'ai plusieurs dossiers rc.d

/usr/local/etc/rc.d
/usr/syno/etc/rc.d
/usr/syno/etc.defaults/rc.d

/usr/local/etc/rc.d => VIDE
/usr/syno/etc/rc.d => Plusieurs fichier du type S99xxx.sh
/usr/syno/etc.defaults/rc.d => Plusieurs fichier du type S99xxx.sh

Lequel choisir ?

Lien vers le commentaire
Partager sur d’autres sites

Pour ma part j'aurais tout mis dans  /usr/local/etc/rc.d

Mais avec des numérotations différentes S95XXX.sh, S96XXX.sh, S97XXX.sh...

Le chiffre sert à définir l'ordre d'exécution qui peut être important.

Si ce n'est pas vous qui avez implanté ces script laissz les en place!

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

Pour Superthx

Avez-vous essayé avec le script dans  /usr/local/etc/rc.d  ?
Car ii me semble que le dossier /usr/syno/etc/rc.d peut être écrasé lors de mises à jour du SRM.
Ce qui ne doit pas être le cas pour le dossier  /usr/local/etc/rc.d

 

Pour Zeus

J'ai installé le script sur mon NAS (j'ai poussé le vice jusqu'à reproduire votre arborescence /volume1/administration/check_ip_wan)
Et jamais l'info "Adresse IP non changée !" ne s'est retrouvée dans le fichier ip.log; malgré de très nombreux essais!

Pour vous deux

 Ce script est-il destiné uniquement à envoyer un Mail ou l'IP  detectée est-elle destinée à d'autres utilisations?
Car si l'IP fournie par Amazon ne peut être obtenue( site HS, pb DNS, perte connexion...):
    current_ip sera nul
    donc changement d'IP décrété
    et le fichiet ip.txt sera vide
    un envoi de Mail sera tenté

Une ébauche de solution possible pour remédier à ce pb;

#!/bin/bash

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

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

# destination du message temporaire
messageFile="/volume1/administration/check_ip_wan/message.txt"
# fichier de memo de l'IP
memoIP="/volume1/administration/check_ip_wan/ip.txt"
# fichier de log
journal="/volume1/administration/check_ip_wan/ip.log"

##########
### SCRIPT ###
##############
current_ip_valide=1
nbTest=5
until [[ $current_ip_valide -eq 0  || $nbTest -eq 0 ]];do
    current_ip=`curl -silent -L http://checkip.amazonaws.com|tail -n 1`
    if [[ $current_ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        current_ip_valide=0
    else
        sleep 10
        let nbTest--
     fi
done

if [ $current_ip_valide -eq 0 ]; then
    if test -f "$memoIP"; then
        old_ip=`cat $memoIP` #lecture ancienne IP si fichier ip.txt existe
    fi

    if [ "${old_ip}" != "${current_ip}" ]; then
        # création du fichier ip.txt et envoi d'un mail avec les informations
        echo $current_ip > $memoIP
        
        # 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..."`
        echo -e "to:${to}">${messageFile};
        echo -e "from:${from}">>${messageFile};
        echo -e "subject:${subject} ">>${messageFile};
        echo -e "${body}" >> ${messageFile};
        ssmtp -v ${to} < ${messageFile};
        rm ${messageFile}
        echo "----------------------" >> $journal
        echo $(date +"%d/%m/%Y à %H:%M:%S") >> $journal
        echo "----------------------" >> $journal
        echo ${subject} >> $journal
        echo "Votre ancienne adresse IP était : $old_ip" >> $journal
        echo "Votre nouvelle adresse IP est :   $current_ip" >> $journal
    else
        echo "Adresse IP non changée !"
        exit 0
    fi
else
    echo -e "Ip incorrecte: $current_ip"
    echo "Impossible d'acquerir l'IP WAN !"
    # on peut prévoir l'envoi d'un mail (inutile si la connexion internet est tombée!)
    # on peut prévoir une inscription dans le fichier log
    exit 1
fi

Lien vers le commentaire
Partager sur d’autres sites

En effet, j'ai pensé dans l'élaboration de mon script à palier à un soucis avec le service Amazon.

A la place de ce que tu proposes dans ton script, j'avais plutôt pensé à récupérer l'info sur deux sites différents et une troisième vérification depuis le shell avec la commande :

curl ifconfig.me

Ensuite, faire une comparaison des trois et si tout est ok alors on valide l'adresse IP dans le fichier et on suit la procédure.

Mais par manque de connaissances, je suis pas allé plus loin 😞

 

Citation

 Ce script est-il destiné uniquement à envoyer un Mail ou l'IP  detectée est-elle destinée à d'autres utilisations?

Dans mon cas personnel, elle me permettrait surtout de palier rapidement à un changement d'IP côté provider car SFR fournit une IP fixe avec la fibre mais ne la garantie pas 😞

Certains ont eu la surprise de la voir changer mais c'est vraiment pas régulier. Pas envie non plus de passer par un service DynDNS. Et puis c'est amusant 😂

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

SFR ne fournit pas d'API pour gérer le DNS?

Pour ma part je tiens mon DNS à jour chez Gandi grâce à leur API ( ils ne fournissent pas de DDNS à ma connaissance).

Le script qui surveille l'adresse tourne sur environ une douzaine de site interrogés successivement.

Si l'un ne répond pas on passe au suivant (cycle de 5mn;  3 sites maxi testés à chaque boucle).

Lien vers le commentaire
Partager sur d’autres sites

Mon provider de domaine est OVH 😉

Quant à SFR, je reçois juste la fibre mais leurs appareils sont dans leurs cartons. Je veux même pas en entendre parler...

Citation

Le script qui surveille l'adresse tourne sur environ une douzaine de site interrogés successivement.

Tu parles de quel script là stp PPJP qu'on se comprenne ?

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

C'est un ensemble de plusieurs scripts Python3  qui, entre autre, tiennent à jour mon DNS chez Gandi via leur API.
Dans ce cadre je surveille toutes les 5 minutes (paramétrable) mon IP externe.
Cette partie est similaire à votre script.
Il se sert d'une douzaine de sites retournant l'IP.
A chaque boucle il interroge un site et si pas de réponse, il passe au suivant avec maxi 3 sites par boucle.
A la boucle suivante, il sollicite d'autres sites.

Et comme j'aime bien me compliquer la vie je trace pas mal de choses: historique des IP fournies, sites n'ayant pas répondu avec motif, adresse lue toutes les 5Mn et site ayant fournit cette IP....
Autant dire qu'il n'est pas exploitable par quelqu'un d'autre!

Mais il est certainement possible de réaliser en shell une boucle sur le même principe ou approchant.

Enfin je précise que ce script est lancé journellement à 00H00at et se stoppe lorsqu’il n'a plus le temps de réaliser une nouvelle boucle.
Il est également lancé au boot.

Lien vers le commentaire
Partager sur d’autres sites

Et encore ce n'etait qu'un aperçu!

Il faut dire que ma spécialité et mon plaisir sont de modifier, compléter  des scripts qui fonctionnent bien pour en faire des scripts qui bug..

C'est comme cela que j'apprends!

 

Lien vers le commentaire
Partager sur d’autres sites

Il y a 8 heures, PPJP a dit :

Avez-vous essayé avec le script dans  /usr/local/etc/rc.d  ?

Oui et cela ne marche pas sur mon RT2600ac. A moins que je me trompe. C'est pour cela que j'abandonne le script au démarrage et préfére crontab.

Il y a 8 heures, PPJP a dit :

Car si l'IP fournie par Amazon ne peut être obtenue( site HS, pb DNS, perte connexion...):
    current_ip sera nul
    donc changement d'IP décrété
    et le fichiet ip.txt sera vide
    un envoi de Mail sera tenté

En effet. Il faudra travailler sur cette partie.

 

Lien vers le commentaire
Partager sur d’autres sites

Je suis justement en train de faire des essais de comparaison entre trois services dont un local depuis le shell avec la commande que j'ai mit au dessus.

Mon but, que les trois adresses IP s'inscrivent dans un fichier texte temporaire, qu'une comparaison soit faite et que si l'IP est la même sur les trois alors elle est validée et s'inscrit dans le fichier texte ip.txt

J'aimerai à terme ajouter aussi l'obligation que le test doit être fait sur au moins deux services si un des trois est défaillant. Bref, j'ai du boulot dans ma recherche d'infos 🙂

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour ZEUS,

Comme vous passez beaucoup de temps à aider les autres, je vais essayer de vous en faire gagner un petit peu.

L’ébauche de script,ci-dessous, correspondrait-elle à ce que vous envisagez?

Attention, je viens de l’écrire et je ne l'ai pas encore testé!

Pour consultation ou lancement à vos risques et périls!!!

#!/bin/bash

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

DESTINATAIRE="destinataire@ndd.tld"
EMETTEUR="Serveur xxx <expediteur@ndd.tld>"

# listes de sites retournant l'IP WAN
SITES=("http://checkip.amazonaws.com" "https://api.ipify.org/"  "http://ipecho.net/plain" "http://icanhazip.com/" "http://ipinfo.io/ip" "https://wtfismyip.com/text" "http://whatismyip.akamai.com/" "https://ipv4bot.whatismyipaddress.com" "https://www.dsfc.net/ipinfo.php" "http://api.ipaddress.com/myip")
CONFIRMATION=(" " " ")
# fichier de memo de l'IP
MEMOIPFILE="/volume1/administration/check_ip_wan/ip.txt"
# fichier de log
LOGFILE="/volume1/administration/check_ip_wan/ip.log"
# Fichier teeporaire poor messagerie
MSGFILE="/volume1/administration/check_ip_wan/message.txt"

CYCLESURVEY=10 #300 # périodicité de vérification de l'IP WAN
RECONFIRMTEMPO=5 #tempo avant nouvel essai si pas 3 nouvelles IP identiques de suite
REVALIDTEMPO=2 #tempo avant nouvel essai si IP lue est invalide
DUREESCRIPT=60 #Solution temporaire pour MAP

#################
### FONCTIONS ###
#################

memoriser_IP()
{
 echo $new_ip > $MEMOIPFILE
}

lire_old_ip()
{
if test -f "$MEMOIPFILE"; then
    old_ip=`cat $MEMOIPFILE` #lecture ancienne IP si fichier ip.txt existe
fi
}
 
lire_ip_wan()
{
nbTest=0
ip_lue_valide=1
until [[ $ip_lue_valide -eq 0  || $nbTest -eq 3 ]];do
    ip_lue=`curl -silent -L  ${SITES[($[($1 + $nbTest) % $nbSites])]}|tail -n 1`
    if [[ $ip_lue =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        ip_lue_valide=0
    else
        ((nbTest++))
        sleep 2
    fi
    idSite=($[($1 + $nbTest) % $nbSites])
done
 }
 
confirmer_new_ip()
{
 ip_confirmee=1
 bcl=0
 while [[ $bcl -lt 2 ]];do
    sleep 1
    ((idSite++))
    lire_ip_wan $idSite
    if [ $ip_lue_valide -eq 0 ]; then
        CONFIRMATION[$bcl]=$ip_lue
    else
        CONFIRMATION[$bcl]=" "
    fi
    ((bcl++))
done
if [[ $new_ip=CONFIRMATION[0] && $new_ip=CONFIRMATION[1] ]];then
    ip_confirmee=0
 fi
}

envoi_mail()
{
 # 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 : $new_ip\r\n\r\nCordialement..."`
 echo -e "to:${DESTINATAIRE}">${MSGFILE};
 echo -e "from:${EMETTEUR}">>${MSGFILE};
 echo -e "subject:${sujet} ">>${MSGFILE};
 echo -e "${body}" >> ${MSGFILE};
 ssmtp -v ${DESTINATAIRE} < ${MSGFILE};
 rm ${MSGFILE}
}

inscription_log()
{
echo "----------------------" >> $LOGFILE
echo $(date +"%d/%m/%Y à %H:%M:%S") >>  $LOGFILE
echo "----------------------" >> $LOGFILE
echo ${sujet} >>  $LOGFILE
echo "Votre ancienne adresse IP était : $old_ip" >>  $LOGFILE
echo "Votre nouvelle adresse IP est :   $new_ip" >>  $LOGFILE
}

###############
### SCRIPT ###
###############
nbSites=${#SITES[@]}
idSite=$(( $RANDOM % $nbSites ))
lire_old_ip
while [[ $SECONDS -lt $DUREESCRIPT ]];do
    lire_ip_wan $idSite
    tempo=$CYCLESURVEY
    if [ $ip_lue_valide -eq 0 ]; then
        if [ "${old_ip}" != "${ip_lue}" ]; then
            new_ip=$ip_lue
            confirmer_new_ip
            if [ $ip_confirmee -eq 0 ]; then
                memoriser_IP
                sujet="Votre adresse IP publique (IPv4) a changé !"
                inscription_log
                envoi_mail
                lire_old_ip
            else
              tempo=$RECONFIRMTEMPO
            fi
        fi
    else
        tempo=$REVALIDTEMPO
    fi
    sleep $tempo
done
exit 0

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

Bonjour PPJP,

Merci beaucoup pour l'attention, ça m'enlève en effet une belle épine du pied. Et tutoie moi stp, je suis contre le vouvoiement qui pour moi ne représente pas forcément du respect.

Il faut vraiment que j'arrête de faire mes autres activités et que j'apprenne bash 😞

J'ai testé le script et malheureusement, dès le départ il y a une coquille. Le fichier ip.txt ne se créer pas.

Alors j'ai modifié quelques petites choses au niveau des noms de fichiers et répertoires de destination mais je ne pense vraiment pas que ça vienne de là.

Le fichier log lui est bien créé.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Zeus,
Désolé, hier soir j'ai raté ta réponse.
Comme je te l'ai déjà dit le tutoiement n'est pas naturel chez moi.
J'essaie de m'en souvenir quand je t'écrit, mais il y a des oublis (l'âge!!!)
Excuse moi pour les prochains possibles oublis.

Il y a 8 heures, Zeus a dit :

Il faut vraiment que j'arrête de faire mes autres activités et que j'apprenne bash 😞

Bon courage, personnellement cela ne me tente pas, c'est trop indigeste.

Je t'avais prévenu que le script n'était pas testé, mais que c'était pour consultation pour savoir si le pricipe te convenait.
Le tester était à tes risques et périls.

Je viens de le tester rapidement, il y avait quelques petites erreurs.
Dont notamment une boucle for mal maitrisée.

Il semble dégrossi maintenant et tu peux le tester à ton tour.
J'ai edité mon précédent message pour y mettre le script corrigé.

S'il te convient il faudra le finaliser pour qu'il tourne en permanence en tache de fond.
Par exemple mon script Python est lancé journellement par le gestionnaire de tâche à 00H00 et au boot.
Il s’arrête quand il n'a plus le temps de réaliser une nouvelle boucle.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour PPJP,

Indigeste mais utile. A moins que tu connaisses une alternative à me recommander sur Bash, je ne pense pas avoir le choix 🙂

Pour le script, je viens de tester avec mes petites modifications et voilà le retour :

Sortie standard/erreur : 
[<-] 220 smtp7.infomaniak.ch ESMTP Infomaniak Network Relay Mail Servers; Thu, 25 Jul 2019 09:49:32 +0200 
[->] EHLO Zeus 
[<-] 250 HELP 
[->] STARTTLS 
[<-] 220 2.0.0 Ready to start TLS 
[->] EHLO Zeus 
[<-] 250 HELP 
[->] AUTH LOGIN 
[<-] 334 VXNlcm5hbWU6 
[->] eWFubmljay5sGDJvdXKsLmZy 
[<-] 334 UGFzc3mQ6 
[<-] 235 2.0.0 OK Authenticated 
[->] MAIL FROM:<demo@demo.com> 
[<-] 250 2.1.0 <sdemo@demo.com>… Sender ok 
[->] RCPT TO:<demo@demo.com> 
[<-] 250 2.1.5 <demo@demo.com>… Recipient ok 
[->] DATA 
[<-] 354 Enter mail, end with "." on a line by itself 
[->] Received: by Zeus (sSMTP sendmail emulation); Thu, 25 Jul 2019 09:49:32 +0200 
[->] Date: Thu, 25 Jul 2019 09:49:32 +0200 
[->] to:demo@demo.com
[->] from:Serveur Zeus <demo@demo.com> 
[->] subject:Votre adresse IP publique (IPv4) a changé ! 
[->] Bonjour, 
[->] Votre adresse IP publique a changé ! 
[->] 
[->] Votre ancienne adresse IP était : xx.xxx.xxx.xx 
[->] Votre nouvelle adresse IP est : xx.xxx.xxx.xx 
[->] 
[->] Les fichiers 'ip-actuelle.txt' et 'ip-change.log' ont été mis à jour. 
[->] 
[->] Cordialement... 
[->] 
[->] . 
[<-] 250 2.0.0 x6P7nWVG148208 Message accepted for delivery 
[->] QUIT 
[<-] 221 2.0.0 smtp7.infomaniak.ch closing connection 
/volume1/administration/verification_ip_wan/test.sh: line 128: syntax error near unexpected token `done' 
/volume1/administration/verification_ip_wan/test.sh: line 128: `done' 

 

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

il y a 39 minutes, PPJP a dit :

Je  viens seulement de connecter.

Édite rapidement ton dernier message,  des identifiants et mot de passe y figurent en clair!

Tu n'as pas testé ma dernière version de script?

Si, j'ai bien essayé ton précédent script 🙂

Et justement, je te retourne l'erreur que je reçois. D'ailleurs, je te rassure mais j'avais modifié les données et en aucun cad il n'y a eu en clair mes identifiants 😉

D'ailleurs, il n'y a même pas zeus dans mon identifiant. Ça serait trop facile sinon...

Lien vers le commentaire
Partager sur d’autres sites

As_tu bien pris le script après que j'ai édité mon message?

Qu'as tu modifié dans le script hormis les chemins des divers fichiers et les données de la messagerie?

Car chez moi, il fonctionne sans erreur.

Éventuellement renvois moi en MP le fichier que tu viens de tester avec pour seules modifs celle de la messagerie.

 

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.