Не частая MikroTik задача — одномоментное создание множества VPN пользователей, но она встречается в практике сетевого администратора. Скрипт создает множество PPP (Point-to-Point Protocol) пользователей из CSV файла шаблона.
CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных. Строка таблицы соответствует строке текста, которая содержит одно или несколько полей, разделенных запятыми.
Wikipedia
Содержание
- Планируемая последовательность действий
- Создать скрипт
- Код скрипта
- Видео: работа скрипта
- Решение проблем
Статья на других языках:
?? — 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
Планируемая последовательность действий
- Скачиваем шаблон CSV файла (FileTemplate.zip на GitHub);
- Добавляем пользователей в файл (проверено Microsoft Excel);
- Загружаем файл на устройство MikroTik;
- Создаем скрипт импорта PPP пользователей;
- Включаем Безопасный режим MikroTik;
- Запускаем скрипт;
- Проверяем журнал устройства и список PPP пользователей;
- Если все хорошо, выключаем Безопасный режим MikroTik;
- Пишем комментарий к статье, что всё получилось (укажите модель устройства и версию RouterOS).
Создать скрипт
Для запуска скрипта необходимы разрешения: 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»; вы можете указать свое название файла импорта.
Видео: работа скрипта
Решение проблем
Сообщения в журнале устройства
- Script CreatePPPUsers: running. Import from file: FileTemplate.csv— скрипт начал работу, импорт пользователей из файла FileTemplate.csv;
- Error run script CreatePPPUsers: file size exceeded 4 KB (size constraint of a variable in Router OS 6) — превышен размер переменной для RouterOS 6. Разделите файл на мелкие части или делайте поэтапный импорт пользователей;
- 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).
Здравствуйте.
при создание vpn пользователей скрипт создает 7 пользователей из 30 и зависает но никаких ошибок не выдает. Может ли это быт из за того что я удаленно подключен к микротику
Здравствуйте, удалённое подключение не вызовет проблемы. Проблема в документе, возможно в наличии какого специального символа или символа(в пароле пользователя например), который микротик расценивает как специальный (например $).