MikroTik Скрипт: Массовое создание VPN пользователей из файла

Не частая MikroTik задача — одномоментное создание множества VPN пользователей, но она встречается в практике сетевого администратора. Скрипт создает множество PPP (Point-to-Point Protocol) пользователей из CSV файла шаблона.

CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных. Строка таблицы соответствует строке текста, которая содержит одно или несколько полей, разделенных запятыми.

Wikipedia
MikroTik Скрипт: Массовое создание VPN пользователей из файла
Сообщения скрипта CreatePPPUsers в журнале устройства MikroTik

Содержание

  1. Планируемая последовательность действий
  2. Создать скрипт
  3. Код скрипта
  4. Видео: работа скрипта
  5. Решение проблем

Статья на других языках:
?? — MikroTik Script: Bulk create VPN users from a file
?? — MikroTik Script: Crear usuarios de VPN de forma masiva a partir de un archivo
?? — MikroTik Script: Créer en masse des utilisateurs VPN à partir d’un fichier
?? — MikroTik-Script: Massenerstellung von VPN-Benutzern aus einer Datei
?? — MikroTik-script: Maak in bulk VPN-gebruikers aan op basis van een bestand

Планируемая последовательность действий

  1. Скачиваем шаблон CSV файла (FileTemplate.zip на GitHub);
  2. Добавляем пользователей в файл (проверено Microsoft Excel);
  3. Загружаем файл на устройство MikroTik;
  4. Создаем скрипт импорта PPP пользователей;
  5. Включаем Безопасный режим MikroTik;
  6. Запускаем скрипт;
  7. Проверяем журнал устройства и список PPP пользователей;
  8. Если все хорошо, выключаем Безопасный режим MikroTik;
  9. Пишем комментарий к статье, что всё получилось (укажите модель устройства и версию RouterOS).
Скачать шаблон файла для создания пользователей VPN, с GitHub

Создать скрипт

Для запуска скрипта необходимы разрешения: read, write, test, policy.

[System] -> [Scripts] -> [+] -> [Name: CreatePPPUsers] -> [Policy: read, write, test, policy]

Перед запуском скрипта я рекомендую включить Безопасный режим MikroTik, а выключить Безопасный режим, убедившись, что скрипт отработал правильно — VPN пользователи были созданы.

Код скрипта

# Name: CreatePPPUsers v1.1
# Description: Bulk create VPN users from a file
# Author: Yun Sergey, MHelp.pro 2020
# License: GPL-3.0 License
# Description, purpose and questions: https://mhelp.pro/mikrotik-script-bulk-create-vpn-users-from-a-file/
# More scripts Mikrotik: https://mhelp.pro/tag/mikrotik/

:local FileName "FileTemplate.csv";
:local Separator ";";

:log warning "Script CreatePPPUsers: running. Import from file: $FileName";

:if ([/file get $FileName size]  > 4096) do={
    :log error "Error run script CreatePPPUsers: file size exceeded 4 KB (size constraint of a variable in Router OS 6). Split the file $FileName into several parts.";
    :error "File size exceeded 4 KB. Stop script."
};

:local Content [/file get $FileName contents];
:local ContentLen [:len $Content];
:set Content [:pick $Content 62 $ContentLen];

:local StartCursor 0;
:local EndCursor;
:local LineEndCursor;

:while ($StartCursor < [:len $Content]) do={

    :set LineEndCursor [:find $Content "\r" $StartCursor];

    :local  Cont;

    :local ColumnsArray { "01Name"=""; "02Password"=""; "03Service"=""; "04Profile"=""; "05LocalAdress"=""; "06RemoveAddress"=""};

    # START PARSING STRING
    :foreach Key,Value in=$ColumnsArray do={

        :local Symbol [:pick $Content $StartCursor];

        :if ($Symbol=$Separator) do={:set StartCursor ($StartCursor - 1)};

        :set EndCursor [:find $Content $Separator $StartCursor];

        :if (($EndCursor > $LineEndCursor) or ([:typeof $EndCursor]="nil")) do={:set EndCursor [:find $Content "\r" ($StartCursor-1)];};

        :set Cont [:pick $Content $StartCursor $EndCursor];

        :set ($ColumnsArray -> $Key ) $Cont;

        :set StartCursor ($EndCursor+1);
    };
    # END PARSING STRING

    # START CREATE COMMAND
    :local UserName ($ColumnsArray -> "01Name");

    :if ([/ppp secret find name=$UserName ]) do={
        :log info "Add PPP user: $UserName - already exist! Skipped.";
    } else={
        :local Command "/ppp secret add name=$UserName";

        :local UserPassword ($ColumnsArray -> "02Password");
        :if ($UserPassword != $Separator) do= {:set Command ("$Command" . " password=$UserPassword")};

        :local UserService ($ColumnsArray -> "03Service");
        :if ($UserService != $Separator) do= {:set Command ("$Command" . " service=$UserService")};

        :local UserProfile ($ColumnsArray -> "04Profile");
        :if ($UserProfile != $Separator) do= {:set Command ("$Command" . " profile=$UserProfile")};

        :local UserLocalAdress ($ColumnsArray -> "05LocalAdress");
        :if ($UserLocalAdress != $Separator) do= {:set Command ("$Command" . " local-address=$UserLocalAdress")};

        :local UserRemoveAddress ($ColumnsArray -> "06RemoveAddress");
        :if ($UserRemoveAddress != $Separator) do= {:set Command ("$Command" . " remote-address=$UserRemoveAddress")};

        [:parse $Command];

    };
    # END CREATE COMMAND

    :set StartCursor ($EndCursor+2);
};
:delay 2;
:log warning "Script CreatePPPUsers: completed.";

В строке :local FileName «FileTemplate.csv»; вы можете указать свое название файла импорта.

Скрипт MHelp.pro: массовое создание пользователей VPN из файла CSV
Код скрипта для создания множества VPN/PPP пользователей

Видео: работа скрипта

Решение проблем

Сообщения в журнале устройства

  1. Script CreatePPPUsers: running. Import from file: FileTemplate.csv— скрипт начал работу, импорт пользователей из файла FileTemplate.csv;
  2. Error run script CreatePPPUsers: file size exceeded 4 KB (size constraint of a variable in Router OS 6)  — превышен размер переменной для RouterOS 6. Разделите файл на мелкие части или делайте поэтапный импорт пользователей;
  3. Script CreatePPPUsers: completed — работа скрипта корректно завершена.

Скрипт не работает при запуске

Проверьте права запуска скрипта, они должны соответствовать указанным в статье (в ROS 6.47.8 замечена ошибка — максимальные права установленные по умолчанию, могут вызывать ошибку доступа).


? Скрипт MikroTik — добавление множества VPN (PPP) пользователей, из файла csv, обсуждалось в этой статье. Я надеюсь, что теперь добавление большого количества VPN/PPP пользователей на устройство MikroTik не окажется сложной задачей. Однако, если вы столкнетесь с каким-то проблемами при настройке, не стесняйтесь написать в комментариях. Я постараюсь помочь.

✅ Скрипт проверен: MikroTik hAP ac lite (RouterBOARD 952Ui-5ac2nD), RouterOS 6.47.8 (stable).

2 комментария к “MikroTik Скрипт: Массовое создание VPN пользователей из файла”

  1. Здравствуйте.
    при создание vpn пользователей скрипт создает 7 пользователей из 30 и зависает но никаких ошибок не выдает. Может ли это быт из за того что я удаленно подключен к микротику

    Ответить
    • Здравствуйте, удалённое подключение не вызовет проблемы. Проблема в документе, возможно в наличии какого специального символа или символа(в пароле пользователя например), который микротик расценивает как специальный (например $).

      Ответить

Оставьте комментарий