PowerShell 语言 监控公网 IP 变更 自动更新 AWS Route53 DNS 记录

PowerShell阿木 发布于 1 天前 1 次阅读


PowerShell 自动监控公网 IP 变更并更新 AWS Route53 DNS 记录

在互联网时代,公网 IP 地址的变更对于网站和服务的可用性至关重要。为了确保服务的稳定性和可靠性,我们需要实时监控公网 IP 地址的变更,并在必要时自动更新 DNS 记录。本文将介绍如何使用 PowerShell 语言实现这一功能,并自动更新 AWS Route53 的 DNS 记录。

环境准备

在开始之前,请确保以下环境已经准备就绪:

1. PowerShell 环境:Windows 操作系统自带 PowerShell 环境。
2. AWS 账号:拥有 AWS 账号并开通 Route53 服务。
3. AWS CLI:安装 AWS CLI 并配置好 AWS 账号。

监控公网 IP 地址

我们需要监控公网 IP 地址的变更。以下是一个简单的 PowerShell 脚本,用于获取当前公网 IP 地址:

powershell
获取当前公网 IP 地址
$publicIp = (Invoke-RestMethod -Uri "http://ipinfo.io/ip").ip
Write-Host "当前公网 IP 地址: $publicIp"

检查 IP 地址变更

为了检测 IP 地址的变更,我们需要将当前 IP 地址与上一次记录的 IP 地址进行比较。以下是一个简单的 PowerShell 脚本,用于检查 IP 地址是否发生变化:

powershell
获取上一次记录的 IP 地址
$lastIp = Get-Content -Path "lastIp.txt"

检查 IP 地址是否发生变化
if ($publicIp -ne $lastIp) {
Write-Host "IP 地址已变更,开始更新 DNS 记录..."
更新 DNS 记录
Update-DnsRecord
} else {
Write-Host "IP 地址未发生变化,无需更新 DNS 记录。"
}

更新 AWS Route53 DNS 记录

在检测到 IP 地址变更后,我们需要更新 AWS Route53 的 DNS 记录。以下是一个 PowerShell 脚本,用于更新 Route53 的 DNS 记录:

powershell
function Update-DnsRecord {
获取 Route53 记录集 ID
$recordSetId = "YOUR_RECORD_SET_ID"

获取 Route53 记录集详细信息
$recordSet = (aws route53 list-resource-record-sets --hosted-zone-id YOUR_HOSTED_ZONE_ID --query 'ResourceRecordSets[].{"RecordName":RecordName,"RecordType":RecordType,"TTL":TTL,"ResourceRecords":ResourceRecords}')

更新记录集
foreach ($record in $recordSet.ResourceRecords) {
if ($record.RecordType -eq "A") {
$record.ResourceRecords[0].Value = $publicIp
$recordSet.ResourceRecords = $recordSet.ResourceRecords | Where-Object { $_.RecordType -ne "A" }
$recordSet.ResourceRecords += $record
}
}

更新 Route53 记录集
aws route53 change-resource-record-sets --hosted-zone-id YOUR_HOSTED_ZONE_ID --change-batch @{
Changes = @(
@{
Action = "UPSERT"
ResourceRecordSet = @{
Name = $recordSet.RecordName
Type = $recordSet.RecordType
TTL = $recordSet.TTL
ResourceRecords = $recordSet.ResourceRecords
}
}
)
}
}

更新 IP 地址记录
$lastIp = $publicIp
Set-Content -Path "lastIp.txt" -Value $lastIp

定时执行脚本

为了实现实时监控,我们需要定时执行上述脚本。以下是一个简单的定时任务,用于每 5 分钟执行一次脚本:

powershell
设置定时任务
$trigger = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Minutes 5) -Once
$action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument '-NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File "YOUR_SCRIPT_PATH"'
Register-ScheduledTask -TaskName "MonitorPublicIp" -Trigger $trigger -Action $action

总结

本文介绍了如何使用 PowerShell 语言监控公网 IP 地址的变更,并自动更新 AWS Route53 的 DNS 记录。通过定时执行脚本,我们可以确保服务的稳定性和可靠性。在实际应用中,可以根据需求调整脚本内容和定时任务,以满足不同的监控需求。