Routeos脚本主要脚本如下
InitializeAndManageUserRoutes
# 脚本名称: InitializeAndManageUserRoutes
# 声明全局变量userRoutes,并初始化为空数组
:global userRoutes []  
# 定义全局函数 addUserRoute
:global addUserRoute do={  
    # 这表示函数能够访问和修改这个全局变量
    :global userRoutes;
   # :local newEntry {"$user"; "$network"; "$route"; "$client"};  
    :local newEntry {"$1"; "$2"; "$3"; "$4"};  
    # 更新全局 userRoutes 变量,将新的条目追加到现有的 userRoutes 列表中
    :set userRoutes ($userRoutes, {$newEntry});
}
#给userRoutes数组添加内容
/import file-name="addUserRoute.txt"
#检查VPN用户名是否存在,路由表是否存在
/system script run ManageUserRoutesAndSecrets
ManageUserRoutesAndSecrets
:global userRoutes
# 遍历 userRoutes,处理每个子数组
:foreach row in=$userRoutes do={
    # 提取用户名、路由表和路由名称
    :local username ([:pick $row 0])
    :local network ([:pick $row 1])
    :local routeTableName ([:pick $row 2])
    :local routeName ([:pick $row 3])
    # 检查 PPP secrets 是否存在该用户名
    :local userResult [/ppp/secret/find where name=$username]
    :if ($userResult = "") do={
        :log info ("新增 PPP 用户密钥:用户名:" . $username)
        /ppp/secret/add name=$username service=any password="123456" profile=VPN-Profile comment="用户: $username 用于维护: $routeName"
    } else={
        :log info ("PPP 用户密钥已存在:用户名:" . $username)
    }
    # 检查 PPP secrets 是否存在该路由名称
    :local routeResult [/ppp/secret/find where name=$routeName]
    :if ($routeResult = "") do={
        :log info ("新增路路由 PPP 用户密钥:名称:" . $routeName)
        /ppp/secret/add name=$routeName service=any password="123456" profile=VPN-Profile comment="$routeName 路由器VPN客户端"
    } else={
        :log info ("路由相关 PPP 用户密钥已存在:名称:" . $routeName)
    }
    # 检查路由表是否存在
    :local tableResult [/routing/table/find where name=$routeTableName]
    :if ($tableResult = "") do={
        :log info ("新增路由表:名称:" . $routeTableName)
        /routing/table add name=$routeTableName fib comment="$routeName 私有路由表,用户 $username 使用"
    } else={
        :log info ("路由表已存在:名称:" . $routeTableName)
    }
}
remove_hw_offloaded_routes_and_invalid_mangle_rules
/ip route remove [find where hw-offloaded=yes]
/ip firewall mangle remove [find where invalid=yes]
check-file-change
# 全局变量,用于存储上次的文件修改时间  
:global lastModifiedTime  
# 要监控的文件名称  
:local fileName "addUserRoute.txt"  
# 获取当前文件的修改时间  
:local currentModifiedTime [/file get [find where name=$fileName] last-modified] 
# 如果全局变量未定义,初始化为当前修改时间  
:if ($lastModifiedTime = nil) do={  
    :set lastModifiedTime $currentModifiedTime  
}  
# 比较当前修改时间与上次修改时间  
:if ($currentModifiedTime != $lastModifiedTime) do={  
    # 如果修改时间不一致,说明文件已修改,执行指定的脚本  
    /system script run InitializeAndManageUserRoutes
    :log info "文件 $fileName 已修改,已执行 InitializeAndManageUserRoutes 脚本。" 
    # 更新全局变量为当前修改时间  
    :set lastModifiedTime $currentModifiedTime  
}  else={  
        :log  info "文件 $fileName 未修改。"  
}  
[ 此帖被uthman在2024-10-08 18:42重新编辑 ]