MikroTik通过三方接口更新域名记录脚本
由于MikroTik没有爱快这种域名API接口,只能自己做一个后端接口,通过MikroTik的fetch进行定时执行或者netwatch触发执行
# ROS DDNS自动更新脚本(IP变化触发+持久化记录)
# 适配PPPoE接口,IP变化时自动更新,记录历史IP避免重复请求
:local ddnsInterface "PPPoE-OUT"
:local ddnsIp ""
:local oldDdnsIp ""
:local ipFile "ddns-old-ip.txt"
# ========== 读取历史IP ==========
:if ([/file find name=$ipFile] != "") do={
:set oldDdnsIp [/file get $ipFile content]
:log info ("读取到上次记录的IP: " . $oldDdnsIp)
} else={
:log info ("首次执行,未找到旧IP记录文件")
}
# ========== 获取当前WAN口IP ==========
:local ipAddress ""
:local ipEntry [/ip address find interface=$ddnsInterface]
:if ([ :len $ipEntry ] > 0) do={
:set ipAddress [/ip address get $ipEntry address]
:local slashPos [:find $ipAddress "/"]
:if ($slashPos != "") do={
:set ddnsIp [:pick $ipAddress 0 $slashPos]
:log info ("获取到 $ddnsInterface 接口IP: " . $ddnsIp)
} else={
:set ddnsIp $ipAddress
:log warning ("$ddnsInterface 接口IP格式异常,未找到子网掩码分隔符: " . $ipAddress)
}
} else={
:log error ("未找到 $ddnsInterface 接口的IP地址")
}
# ========== IP对比更新 ==========
:if ($ddnsIp != $oldDdnsIp && $ddnsIp != "" && $ddnsIp != "0.0.0.0") do={
:log info ("WAN口IP已变化:旧IP=" . $oldDdnsIp . " 新IP=" . $ddnsIp)
/tool fetch mode=http url=("http://你的服务器地址/你的接口?ip=" . $ddnsIp) idle-timeout=10 keep-result=no
:log info ("已向API接口提交新IP: " . $ddnsIp)
# 持久化新IP到文件备用
:if ([/file find name=$ipFile] != "") do={
/file set $ipFile content=$ddnsIp
} else={
/file add name=$ipFile content=$ddnsIp
}
:log info ("已更新旧IP记录文件,新记录IP: " . $ddnsIp)
} else={
:if ($ddnsIp = "") do={
:log error ("未获取到有效IP,跳过更新")
} else {
:log info ("WAN口IP未变化(当前IP: " . $ddnsIp . "),无需更新解析记录")
}
}