Задать вопрос
  • Динамические туннели на Микротике, как избавиться?

    @volkov_aleksey
    Примерный код скрипта, вдруг кому то понадобится, потом адаптируете под себя.
    :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;"
    Ответ написан
    Комментировать