Skip to content

Repository files navigation

MikroTik 2FA VPN System

Русский | English

Русский

Система двухфакторной аутентификации для VPN подключений на роутерах MikroTik.

Описание

Приложение обеспечивает безопасное подключение к VPN через подтверждение в Telegram боте или Mini-App, автоматически управляет пользователями и правилами firewall в MikroTik роутере.

Структура проекта

mikrotik-2fa-vpn/
├── plans/              # Планы и документы планирования
├── docs/               # Документация проекта
├── backend/            # Backend приложение (FastAPI)
│   ├── api/            # API endpoints
│   ├── models/         # Модели базы данных
│   ├── services/       # Бизнес-логика
│   ├── database/       # Конфигурация БД
│   └── migrations/     # Миграции БД
├── frontend/           # Frontend приложение (React/Vue)
│   ├── src/
│   │   ├── components/ # UI компоненты
│   │   ├── pages/      # Страницы приложения
│   │   ├── services/   # API клиенты
│   │   └── utils/      # Утилиты
│   ├── public/         # Статические файлы
│   └── static/         # Статические ресурсы
├── telegram_bot/       # Telegram бот
│   ├── handlers/       # Обработчики команд
│   ├── middleware/     # Middleware
│   └── utils/          # Утилиты
├── config/             # Конфигурационные файлы
├── scripts/            # Вспомогательные скрипты
└── tests/              # Тесты

Основные функции

  • Регистрация пользователей через Telegram с одобрением администратором
  • Запрос подключения к VPN через Telegram бот
  • Автоматическое подтверждение подключения (двухфакторная аутентификация)
  • Управление существующими пользователями MikroTik (включение/отключение)
  • Поддержка нескольких MikroTik аккаунтов на пользователя
  • Управление правилами firewall в MikroTik
  • Напоминания о продолжении работы
  • Веб-интерфейс администратора для полной настройки системы
  • Мастер настройки с пошаговым руководством при первом запуске
  • Управление базой данных из веб-интерфейса (скачивание/загрузка резервных копий)

🔄 Как работает система

Краткая схема

1. Админ создает пользователя в MikroTik User Manager (вручную)
   ↓
2. Пользователь регистрируется через Telegram бот
   ↓
3. Админ одобряет регистрацию в веб-интерфейсе
   ↓
4. Админ привязывает MikroTik username к пользователю (можно несколько)
   ↓
5. Пользователь запрашивает VPN через бот → система АКТИВИРУЕТ аккаунт в MikroTik
   ↓
6. Пользователь подключается к VPN стандартными средствами
   ↓
7. Система обнаруживает подключение → запрашивает подтверждение (2FA)
   ↓
8. При подтверждении включается firewall правило (опционально)
   ↓
9. Система отправляет напоминания о продлении сессии

⚠️ ВАЖНО: Система работает только с СУЩЕСТВУЮЩИМИ пользователями MikroTik! Она не создает новых, только управляет (enable/disable) теми, что созданы администратором вручную.

🔥 Firewall правила (опционально): система ищет/показывает правила для “доп. защиты” по наличию строки 2FA в comment на MikroTik (например: 2FA user vpn_user_ivan). Если 2FA в комментарии нет — правило не будет найдено.

📖 Подробное описание / Full workflow: RU | EN

Технологии

  • Backend: Python 3.11+, FastAPI
  • Database: SQLite 3 (встроенная)
  • Frontend: React 18+ или Vue 3+
  • Telegram: python-telegram-bot / aiogram
  • MikroTik: SSH (paramiko/asyncssh), REST API
  • Интернационализация: Поддержка русского и английского языков (i18n)

Требования к системе

  • ОС: Debian 12 (Bookworm) или Debian 13 (Trixie)
  • Python 3.11+ (входит в Debian 12+)
  • SQLite 3.x (встроен в Python)
  • Минимум 512MB RAM (рекомендуется 1GB+)
  • Минимум 1GB свободного места на диске

Установка

Установка “в одну команду” (рекомендуется)

wget -O install.sh "https://raw.githubusercontent.com/netcore-24/2FA-Mikrotik-VPN/main/install.sh"
sudo bash install.sh

Скрипт сам установит зависимости, развернёт проект, запустит сервис и выведет в терминале ссылку вида http://<IP>:8000 (веб уже будет готов).

Логин/пароль администратора (после установки):

  • Во время установки они выводятся в терминал.
  • Также могут быть сохранены в файл (по умолчанию): /opt/mikrotik-2fa-vpn/.admin_credentials.txt
    (если вы меняли INSTALL_DIR, путь будет <INSTALL_DIR>/.admin_credentials.txt)

Показать сохранённые данные:

sudo cat /opt/mikrotik-2fa-vpn/.admin_credentials.txt

После того как сохранили логин/пароль — удалите файл:

sudo rm -f /opt/mikrotik-2fa-vpn/.admin_credentials.txt

Подробности / Details: RU | EN

Зависимости

Все зависимости включены в проект:

  • requirements.txt - Python зависимости
  • package.json - Frontend зависимости (если требуется)
  • install.sh - список системных пакетов для Debian

Документация

📖 Основная документация

  • Как работает система / Workflow: RU | EN
  • Диаграммы / Diagrams: RU | EN
  • Telegram сообщения / Telegram messages: RU | EN

📚 Техническая документация

  • Развертывание / Deployment: RU | EN
  • Требования / Requirements: RU | EN
  • Архитектура / Architecture: RU | EN
  • Справочник настроек / Settings reference: RU | EN
  • Мастер настройки / Setup wizard: RU | EN
  • База данных / Database management: RU | EN
  • i18n: RU | EN

Языки интерфейса

Система поддерживает следующие языки:

  • 🇷🇺 Русский (ru) - язык по умолчанию
  • 🇬🇧 Английский (en)

Язык определяется автоматически из параметра запроса ?lang=, заголовка HTTP Accept-Language или настройки по умолчанию.

Подробнее / Details: RU | EN

🆘 Быстрая помощь

Новый администратор?

  1. Прочитайте: RU | EN — понять как работает система
  2. Визуализация: RU | EN — схемы процессов

Быстрый старт

См. RU | EN

Поддержать автора

Лицензия

Этот проект распространяется под лицензией PolyForm Noncommercial 1.0.0 (только некоммерческое/ознакомительное использование). См. файл LICENSE для деталей. Коммерческое использование — по отдельной лицензии у автора: см. COMMERCIAL_LICENSE.md.


English

Two-factor authentication system for VPN access on MikroTik routers.

Installation

One-command install (recommended)

wget -O install.sh "https://raw.githubusercontent.com/netcore-24/2FA-Mikrotik-VPN/main/install.sh"
sudo bash install.sh

The installer will set up dependencies, deploy the project, start the service, and print a URL like http://<IP>:8000.

Admin login/password (after install):

  • Printed to the terminal during installation.
  • May also be saved to a file (default): /opt/mikrotik-2fa-vpn/.admin_credentials.txt
    (if you changed INSTALL_DIR, the path is <INSTALL_DIR>/.admin_credentials.txt)

Show saved credentials:

sudo cat /opt/mikrotik-2fa-vpn/.admin_credentials.txt

After you store them somewhere safe, remove the file:

sudo rm -f /opt/mikrotik-2fa-vpn/.admin_credentials.txt

Support the author

License

This project is licensed under PolyForm Noncommercial 1.0.0 (noncommercial/evaluation use only). See LICENSE. Commercial use requires a separate license from the author — see COMMERCIAL_LICENSE.md.

Documentation

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages