On m'a demandé de mettre en place un système d'alerte lors d'un passage d'une connexion à une autre sur une architecture internet double wan.
Dans un environnement exclusivement Windows j'ai développé un script PowerShell.
Voyons en détail comment tout cela fonctionne…
Le but ici est de récupérer l'adresse ip publique. Pour se faire nous utiliserons un service externe comme proposé par http://ifconfig.me.
Facile, un simple texte avec l'adresse ip address!
PS C:\ > (New-Object System.Net.WebClient).DownloadString('http://ifconfig.me/ip')
PS C:\ > ((New-Object System.Net.WebClient).DownloadString('https://api.ipify.org?format=json') | ConvertFrom-Json).ip
Remplacer la variable default_ip avec l'adresse IP wan par défaut.
########################### # author : shebangthedolphins.net # version : 1.0 # date : 2021.06.26 # role : surveiller le lien wan, envoi d'un mail lors d'un failover # other : Testé sur un Windows 2019 Server # maj : # - 1.0 (2021/06) : 1ere version #on paramètre l'adresse ip wan par défaut $default_ip = '94.198.4.X' #Fonction pour envoyer un mail Function Mail { param ([string]$emailbody, [string]$subject) $encoding = [System.Text.Encoding]::UTF8 Send-MailMessage -Encoding $encoding -To check_wan@shebangthedolphins.net -Subject $subject -From check_wan@shebangthedolphins.net -smtpserver mx.shebangthedolphins.net -Body $emailbody #envoi du mail } #On créé un fichier checkip_state.txt avec la valeur 1. La valeur 1 pour l'ip par défaut et 0 si différence à celle par défaut if (!(Test-Path C:\Windows\Temp\checkip_state.txt -PathType Leaf)) { #si C:\Windows\Temp\checkip_state.txt n'existe pas Set-Content C:\Windows\Temp\checkip_state.txt '1' #alors créer le fichier C:\Windows\Temp\checkip_state.txt avec la valeur par défaut } #récupérer l'adresse ip publique $currentIP = (New-Object System.Net.WebClient).DownloadString('http://ifconfig.me/ip') #$currentIP = ((New-Object System.Net.WebClient).DownloadString('https://api.ipify.org?format=json') | ConvertFrom-Json).ip #Si la valeur récupérée est Null (dans le cas ou http://ifconfig.me/ip ne renvoi rien) ou si égale à la valeur par défaut If(($currentIP -eq $default_ip) -or ($currentIP -eq $Null)) { Write-Host "actuellement sur le lien par défaut" if ($(get-content C:\Windows\Temp\checkip_state.txt) -eq '0') { #si la valeur dans C:\Windows\Temp\checkip_state.txt est égale à 0 cela veut dire que l'on était précédement sur le lien secondaire, on est dans le cas d'un changement de lien donc envoyer un mail Mail "Le lien par défaut est utilisé, l'adresse ip est : $currentIP" "Check Failover : le lien a changé" Set-Content C:\Windows\Temp\checkip_state.txt '1' #on paramètre le fichier checkip_state.txt à 1 (qui correspond à lien par défaut) } } else { Write-Host "actuellement sur le lien secondaire" if ($(get-content C:\Windows\Temp\checkip_state.txt) -eq '1') { #si la valeur dans C:\Windows\Temp\checkip_state.txt est égale à 1 cela veut dire que l'on était précédement sur le lien principal, on est dans le cas d'un changement de lien donc envoyer un mail Mail "Le lien secondaire est utilisé, l'adresse ip est : $currentIP"" "Check Failover : le lien a changé" Set-Content C:\Windows\Temp\checkip_state.txt '0' #on paramètre le fichier checkip_state.txt à 0 (qui correspond au lien secondaire) } }
Maintenant suivre ce lien pour créer une tâche Windows dans le but d'éxécuter le scipt de façon périodique.
Contact :