由于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 . "),无需更新解析记录")
    }
}

标签: none

添加新评论