Сообщество IT-специалистов
Ответы на любые вопросы об IT
Профессиональное развитие в IT
:global checkDuplicateL2tpUsers do={ :local l2tpServerBindings [/interface l2tp-server server get value-name=sessions] :local activeUsers [:toarray ""] # Собираем список пользователей с активными Server Binding :foreach binding in=$l2tpServerBindings do={ :local user ($binding->"user") :if ([:len $user] > 0) do={ :set ($activeUsers->([:len $activeUsers])) $user } } # Проверяем все L2TP-интерфейсы :foreach l2tpIf in=[/interface l2tp-client find] do={ :local ifName [/interface l2tp-client get $l2tpIf name] :local ifUser [/interface l2tp-client get $l2tpIf user] :local ifDynamic [/interface l2tp-client get $l2tpIf dynamic] :local ifDisabled [/interface l2tp-client get $l2tpIf disabled] # Если интерфейс динамический (DR) и пользователь уже есть в Server Binding :if ($ifDynamic = true && $ifDisabled = false && [:typeof $ifUser] = "str" && [:len $ifUser] > 0 && [:find $activeUsers $ifUser] != nil) do={ :log info ("L2TP duplicate user found - removing dynamic connection: ".$ifName." user: ".$ifUser) /interface l2tp-client remove $l2tpIf } } } # Добавляем скрипт в системные скрипты /system script add name=checkDuplicateL2tpUsers source="$checkDuplicateL2tpUsers" policy=ftp,reboot,read,write,policy,test,winbox,password,sensitive # Создаем триггер для выполнения скрипта при добавлении нового L2TP-интерфейса /system scheduler add name="Check L2TP Duplicates" start-time=startup on-event="/system script run checkDuplicateL2tpUsers;" /system scheduler add name="Check L2TP Duplicates Periodic" interval=5m on-event="/system script run checkDuplicateL2tpUsers;"