108 lines
4.1 KiB
PowerShell
108 lines
4.1 KiB
PowerShell
######################################################################################
|
|
## Script Update_DDNS_OVH.ps1
|
|
## Pure PowerShell, no external modules required
|
|
## Orig auth & date : The Nerd Cat 09/2021
|
|
## Refactored by : mj and AI
|
|
## Added TLS 1.2 (minimum required for api calls), IPv6, OVH api URL and debug info.
|
|
## Needs one script and one pair of CREDS per subdomain !
|
|
######################################################################################
|
|
|
|
# Variables - Setup part
|
|
$WORK_DIR = "C:\WORKDIR"
|
|
$LOGIN_OVH = "votre_login_dynhost@domaine.tld"
|
|
$PWD_OVH = "votre_mot_de_passe_dynhost"
|
|
$URL_OVH = "sousdomaine.domaine.tld"
|
|
|
|
### No need to edit below ###
|
|
|
|
# Forcer l'utilisation de TLS 1.2
|
|
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
|
|
|
# Variables - IP Wan (IPv4 et IPv6)
|
|
$ipv4_url = "https://api.ipify.org"
|
|
$ipv6_url = "https://api6.ipify.org"
|
|
|
|
$webclient = New-Object System.Net.WebClient
|
|
|
|
# Regex IP (IPv4 et IPv6)
|
|
$ipv4_pattern = "^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$"
|
|
$ipv6_pattern = "^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$" # Regex IPv6 simple (peut être amélioré pour plus de précision)
|
|
|
|
# Fonction pour mettre à jour OVH
|
|
function Update-OVHDDNS {
|
|
param(
|
|
[string]$ip,
|
|
[string]$ip_type
|
|
)
|
|
|
|
Write-Host "Mise à jour de l'adresse $ip_type chez OVH : $ip"
|
|
|
|
$securepasswd = ConvertTo-SecureString $PWD_OVH -AsPlainText -Force
|
|
$cred = New-Object System.Management.Automation.PSCredential($LOGIN_OVH, $securepasswd)
|
|
|
|
$majurl = "https://dns.eu.ovhapis.com/nic/update?system=dyndns&hostname=$($URL_OVH)&myip=$($ip)"
|
|
|
|
try {
|
|
$result = Invoke-WebRequest -Uri $majurl -Credential $cred -UseBasicParsing
|
|
Write-Host "Mise à jour OVH réussie pour $ip_type. Réponse OVH : $($result.Content)"
|
|
Set-Content -Path "$WORK_DIR\maj_${ip_type}_ip.txt" -Value $ip
|
|
} catch {
|
|
Write-Error "Erreur lors de la mise à jour OVH pour $ip_type : $($_.Exception.Message)"
|
|
Write-Error "Détails de l'erreur : $($_.Exception | Format-List -Force | Out-String)"
|
|
}
|
|
}
|
|
|
|
# Vérification de l'espace de travail
|
|
if (!(Test-Path $WORK_DIR)) {
|
|
Write-Host "L'espace de travail n'existe pas, création..."
|
|
New-Item $WORK_DIR -ItemType Directory
|
|
Set-Content -Path "$WORK_DIR\maj_ipv4_ip.txt" -Value "0.0.0.0"
|
|
Set-Content -Path "$WORK_DIR\maj_ipv6_ip.txt" -Value "::" # Valeur par défaut pour IPv6
|
|
}
|
|
|
|
# Traitement IPv4
|
|
try {
|
|
$WANIPv4 = $webclient.DownloadString($ipv4_url).Trim()
|
|
if ($WANIPv4 -match $ipv4_pattern) {
|
|
$IPv4 = Get-Content -Path "$WORK_DIR\maj_ipv4_ip.txt" -ErrorAction SilentlyContinue
|
|
if (-not $IPv4) {
|
|
$IPv4 = "0.0.0.0"
|
|
}
|
|
if ($WANIPv4 -ne $IPv4) {
|
|
Write-Host "** Votre adresse IPv4 a changé **"
|
|
Write-Host "Nouvelle IPv4 : $WANIPv4"
|
|
Write-Host "Ancienne IPv4 : $IPv4"
|
|
Update-OVHDDNS -ip $WANIPv4 -ip_type "ipv4"
|
|
} else {
|
|
Write-Host "Votre adresse IPv4 n'a pas changé."
|
|
}
|
|
} else {
|
|
Write-Warning "L'adresse IPv4 récupérée ($WANIPv4) n'est pas au bon format."
|
|
}
|
|
} catch {
|
|
Write-Warning "Impossible de récupérer l'adresse IPv4 publique : $($_.Exception.Message)"
|
|
}
|
|
|
|
# Traitement IPv6
|
|
try {
|
|
$WANIPv6 = $webclient.DownloadString($ipv6_url).Trim()
|
|
if ($WANIPv6 -match $ipv6_pattern) {
|
|
$IPv6 = Get-Content -Path "$WORK_DIR\maj_ipv6_ip.txt" -ErrorAction SilentlyContinue
|
|
if (-not $IPv6) {
|
|
$IPv6 = "::"
|
|
}
|
|
if ($WANIPv6 -ne $IPv6) {
|
|
Write-Host "** Votre adresse IPv6 a changé **"
|
|
Write-Host "Nouvelle IPv6 : $WANIPv6"
|
|
Write-Host "Ancienne IPv6 : $IPv6"
|
|
Update-OVHDDNS -ip $WANIPv6 -ip_type "ipv6"
|
|
} else {
|
|
Write-Host "Votre adresse IPv6 n'a pas changé."
|
|
}
|
|
} else {
|
|
Write-Warning "L'adresse IPv6 récupérée ($WANIPv6) n'est pas au bon format."
|
|
}
|
|
} catch {
|
|
Write-Warning "Impossible de récupérer l'adresse IPv6 publique : $($_.Exception.Message)"
|
|
}
|