Sign inSign up

reyterak/free-turn-admin-mikrotik

By reyterak

•Updated 14 days ago

Панель управления сервером free-turn-proxy и WireGuard на Mikrotik

Image
Networking
0

486

reyterak/free-turn-admin-mikrotik repository overview

Поддерживается только на Mikrotik RouterOS >= 7.21 Архитектура только ARM64

Краткое описание: web-панель управления сервером free-turn-proxy (в составе контейнера), клиентами, встроенным Mikrotik WireGuard (интерфейс и пиры). Генерация URI-ссылок и QR-кодов для клиентов "FreeTurn".

Поддерживается только связка: сервер в режиме "mode udp" + встроенный Mikrotik WireGuard. Режим "mode tcp" НЕ поддерживается!

⁠Настройка MikroTik

Перед установкой — бэкап настроек роутера (Files → Backup). Смените путь /usb1 на актуальный!!! Например: /disk1, /usb1-part1 и т.п. В "/container .... key=PORT value=8080": 8080 - порт, на котором будет работать web-панель. Измените, если хотите использовать другой.

# Создаем бридж для контейнеров. Если уже существует - получите соответствующее сообщение
/interface/bridge add name=Bridge-Docker port-cost-mode=short
/ip/address add address=192.168.254.1/24 interface=Bridge-Docker
# Создаем интерфейс для контейнера
/interface/veth add address=192.168.254.15/24 gateway=192.168.254.1 name=free-turn-veth
/interface/bridge/port add bridge=Bridge-Docker interface=free-turn-veth
# Создаем mount и env для контейнера, настраиваем ссылку для образов на hub.docker.com
/container mounts add dst=/config list=free-turn-admin src=/usb1/docker_configs/free-turn-admin
/container envs add list=free-turn-admin key=PORT value=8080
/container/config set registry-url=https://registry-1.docker.io
# Устанавливаем и запускаем контейнер
/container/add remote-image=reyterak/free-turn-admin-mikrotik:latest interface=free-turn-veth name=free-turn-admin root-dir=/usb1/docker/free-turn-admin start-on-boot=yes logging=yes  mountlists=free-turn-admin envlists=free-turn-admin dns=1.1.1.1,8.8.8.8
/container/start free-turn-admin

После запуска контейнера проверьте его статус в WinBOX - должен измениться на "H" (healthy).

⁠Создание пользователя для доступа к API RouterOS

⁠Создание пользователя в Terminal WinBox (рекомендуется)

Замените "PassW0rd" на пароль пользователя:

/user group add name=api-group-ro policy=read,api,rest-api
/user group add name=api-group-rw policy=read,write,api,rest-api
/user add name=free-turn-admin-ro group=api-group-ro password="PassW0rd"
/user add name=free-turn-admin-rw group=api-group-rw password="PassW0rd"
# Ограничиваем вход API-пользователей адресом контейнера (192.168.254.15) — см. раздел «Важно!!! Безопасность доступа к API RouterOS»
/user set free-turn-admin-ro address=192.168.254.15/32
/user set free-turn-admin-rw address=192.168.254.15/32

Пользователь free-turn-admin-ro — права только на чтение; Пользователь free-turn-admin-rw — полный доступ (рекомендуется).

⁠Важно!!! Безопасность доступа к API RouterOS

Пользователь API RouterOS даёт панели возможность управлять роутером через REST:

  • free-turn-admin-ro (read) — чтение конфигурации: интерфейсы WireGuard, пиры, диагностика;
  • free-turn-admin-rw (write) — создание/удаление WG-интерфейсов и пиров, ротация ключей, обновление образа контейнера (/container/update).

Чем это опасно:

  • Панель выполняет действия от имени пользователя API RouterOS. Кто получил доступ к панели — получил и возможность действовать с правами этого пользователя.
  • Обновление контейнера (/container/update) требует пользователя с правами write: read-only пользователь получит ошибку «not enough permissions». Для обновления панели временно включите free-turn-admin-rw или выполните команду в Terminal WinBox.
  • Компрометация панели при настроенном rw-пользователе означает компрометацию роутера.
  • При утечке пароля free-turn-admin-rw злоумышленник получит доступ к практически полному управлению роутером!!! Для free-turn-admin-ro - доступ к чтению любых данных и настроек!

Меры предосторожности:

  1. Не открывайте панель в интернет — только LAN или VPN!!! Простое включение HTTPS без серьёзной защиты аутентификации проблему не решает.
  2. Для повседневного мониторинга используйте read-only пользователя; rw — только на время операций управления (создание интерфейсов/пиров).
  3. Устанавливайте надёжные пароли пользователей API (замените "PassW0rd"!) и периодически меняйте их.
  4. Устанавливайте надёжный пароль администратора панели (создаётся при первом входе).
  5. При полном удалении контейнера удаляйте и пользователей API (см. раздел «Удаление»).
  6. Ограничьте адреса, с которых разрешён вход API-пользователей — по умолчанию разрешите только IP контейнера (192.168.254.15):
/user set free-turn-admin-ro address=192.168.254.15/32
/user set free-turn-admin-rw address=192.168.254.15/32

Тогда даже при утечке пароля зайти в API можно будет только с адреса контейнера (эти команды уже включены в блок создания пользователей в Terminal WinBox). Если панель используется ещё и с других хостов (например, с рабочей машины администратора) — добавьте их адреса через запятую: address=192.168.254.15/32,<ваш-IP>/32. При изменении IP контейнера не забудьте обновить список.

⁠Начало использования

Открыть панель: http://<IP-контейнера>:8080 (порт — переменная PORT, по умолчанию 8080), например: http://192.168.254.15:8080/⁠. Первый вход — создать учётную запись администратора.

⁠Доступный функционал.

⁠БЕЗ создания Пользователя API RouterOS

Вкладки WireGuard и Диагностика недоступны (кроме «Сохранить подключение» Пользователя API). Настройки роутера для контейнера (проброс порта, маскарадинг и т.п.), WireGuard-интерфейсы, пиры и wg.config — управляются вручную.

  • Правая панель Администрирование: статусы (обновление на Docker Hub — авто-проверка раз/сутки, сервер free-turn-proxy + версия, Backend-сервер, клиенты, память); управление (Выход, Изменить пароль, Обновить статус, Перезапуск/Обновить сервер free-turn-proxy с GitHub, Проверить обновление, Обновить панель — без Пользователя API предложит команду для Terminal WinBox); Журнал событий, Лог сервера.
  • Вкладка Настройки сервера: настройки сервера free-turn-proxy ("mode tcp" не поддерживается).
  • Вкладка Параметры генерации URI/QR: параметры URI-ссылок (freeturn://) и QR-кодов.
  • Вкладка Клиенты: Добавить (с комментарием), Поиск, статус авторизации по Client ID; список (ID, Комментарий, привязка WireGuard); управление — Обновить, Удалить, Экспорт URI/QR (опционально с wg.config), CMD (команда client -флаги по параметрам URI, поле «Ссылки VK Calls»).
⁠Настроен Пользователь API RouterOS с правами только на чтение (группа api-group-ro)
  • "Обновить панель" — при отсутствии write предложит команду для Terminal WinBox.
  • Вкладка Диагностика: диагностика сетевых настроек роутера с командами для WinBox Terminal.
  • Вкладка WireGuard: отображение интерфейса (Backend-сервер в Настройки сервера) и пиров; "Импорт ключа" (private key пира) → выгрузка wg.config; "Удалить подключение".
  • Вкладка Клиенты: привязка клиента к пиру (с импортированным ключом, непривязанному) — при генерации URI/QR автоматически подгружается wg.config; отвязка клиента.
⁠Настроен Пользователь API RouterOS с полным доступом (группа api-group-rw)

На вкладке WireGuard:

  • Создание/Удаление интерфейса WireGuard (Имя, Комментарий, IP, Порт). IP:port автоматически сохраняются в Backend-сервере, сервер перезапускается. При удалении интерфейса пиры удаляются рекурсивно.
  • Создание/Удаление пиров (при создании — опциональная привязка к клиенту; при удалении привязка снимается).
  • Ротация (смена) ключей пира.

⁠Рекомендуемый порядок работы

  • Создать Пользователя API RouterOS с полным доступом.
  • Первый вход (http://192.168.254.15:8080/⁠) — создайте учётную запись администратора.
  • Вкладка WireGuard: введите логин/пароль Пользователя API. Создайте интерфейс WireGuard (например 10.10.20.1/24, порт 51820) или укажите существующий в "Backend-сервер" (Настройки сервера) и перезапустите сервер. Проверьте статус Backend-сервера — "Доступен".
  • Вкладка Настройки сервера: укажите "Внешний адрес" (если не указан) и прочие настройки, перезапустите сервер.
  • Вкладка Диагностика: просмотрите результаты, сделайте бэкап роутера, выполните рекомендуемые команды в WinBox Terminal (осторожно!).
  • Вкладка Клиенты: создайте клиента.
  • Вкладка WireGuard: создайте пира с привязкой к клиенту; если пиры есть — импортируйте ключи и привяжите клиента во вкладке Клиенты.
  • Вкладка Клиенты: экспорт URI/QR → устройство клиента FreeTurn.
  • Статус подключений — вкладка WireGuard → "Пиры WireGuard" (частота обновления настраивается).

Важная рекомендация по безопасности: сразу создайте столько пиров WireGuard, сколько вам гарантированно хватит на какое-то время. Затем в «Пользователь API RouterOS» смените пользователя на free-turn-admin-ro (обязательно введите его пароль) и сохраните подключение — проверьте, что вкладки WireGuard и Диагностика показывают данные. После этого отключите пользователя free-turn-admin-rw:

/user disable free-turn-admin-rw

Вы сможете полноценно работать: привязывать новых клиентов к пирам во вкладке Клиенты, отслеживать статус во вкладке WireGuard. Для операций управления (создание/удаление интерфейсов и пиров, ротация ключей, обновление панели) временно включите free-turn-admin-rw:

/user enable free-turn-admin-rw

После завершения работ снова отключите его.

⁠Удаление

Если установка происходила строго по инструкции, а при создании WireGuard-интерфейса и правил Firewall использовались предлагаемые панелью "FreeTurn Admin" имена и комментарии, то просто выполните в Terminal WinBox следующие команды (не забудьте про бэкап настроек роутера — Files → Backup !):

# Останавливаем и удаляем контейнер
/container stop free-turn-admin
/container remove free-turn-admin
# Удаляем mount и env
/container mounts remove [find where list="free-turn-admin"]
/container envs remove [find where list="free-turn-admin"]
# Удаляем порт в мосту Bridge-Docker и veth-интерфейс
/interface bridge port remove [find where interface="free-turn-veth"]
/interface veth remove [find where name="free-turn-veth"]
# Удаляем каталог mount контейнера на диске. Команда может выдать «no such item» — это нормально
/file remove [find where name~"docker_configs/free-turn-admin"]
# Удаляем WG-интерфейс, пиры и адреса
/interface wireguard peers remove [find where interface="free-turn-wireguard"]
/ip address remove [find where interface="free-turn-wireguard"]
/interface wireguard remove [find where name="free-turn-wireguard"]
# Удаляем правила Firewall
/ip firewall filter remove [find where comment~"free-turn-"]
/ip firewall nat remove [find where comment~"free-turn-"]
# Удаляем пользователей API и группы доступа
/user remove [find where name="free-turn-admin-ro"]
/user remove [find where name="free-turn-admin-rw"]
/user group remove [find where name="api-group-ro"]
/user group remove [find where name="api-group-rw"]

Мост Bridge-Docker и его адрес удаляйте, только если он больше ничем не используется!

⁠Список изменений

1.2.3

  • Исправлено: после обновления контейнера панель могла показывать «Не удалось проверить обновления сервера» при исправном зеркале. Причина: неудачный ответ проверки сохранялся в кеше на 24 часа, а каталог /config переживает обновление образа. Теперь неудачные проверки не сохраняются и не показываются — достаточно обычного обновления страницы.

1.2.2

  • Восстановлена проверка обновлений сервера: оригинальный репозиторий free-turn-proxy (samosvalishe/free-turn-proxy) больше не существует, панель переведена на зеркало https://github.com/hackdiaz-dev/free-turn-proxy⁠;
  • Исправлено: теги зеркала публикуются как v4.0.1-mirror, из-за чего панель могла постоянно предлагать обновление уже установленной версии. Суффикс -mirror теперь отбрасывается при сравнении версий.

1.2.1

  • Исправлено: на вкладке WireGuard окно создания интерфейса оставалось открытым, когда интерфейс Backend-сервера уже найден и показан в разделе «Интерфейс WireGuard» (сервер умеет работать только с одним интерфейсом).

1.2.0

  • Базовый образ обновлён с Alpine 3.20 (EOL 1 апреля 2026) на 3.24.2;
  • Автоматическая проверка обновлений сервера free-turn-proxy на GitHub (при старте и раз в сутки) со статусом рядом с кнопкой «Обновить сервер»; ручная проверка обходит 24-часовой кеш;
  • Корректная ротация лога сервера в .log.1 по размеру без перезапуска контейнера;
  • freeturn:// теперь включает ссылку на VK Calls (vk) — индивидуальна для каждого клиента, задаётся при экспорте; и пейсинг обфускации (timing, ms) из -obf-timing. Проверена совместимость: старые клиенты игнорируют неизвестные поля;
  • Rate limiting на /api/login: 5 неудачных попыток за 5 минут с одного IP;
  • CSP-заголовок для всех ответов (скорректирован для совместимости с антивирусами);
  • Поиск/фильтр в журнале событий.

1.1.4

  • Для автоматического обновления панели теперь требуются полные права Пользователя API (/container/update без write → «not enough permissions»). При правах только на чтение панель предлагает команду обновления для Terminal WinBox.

1.1.3

  • Кнопка «CMD» в списке клиентов: генерация команды запуска консольного клиента (client -флаги) по параметрам URI; поле «Ссылки VK Calls» (опционально);
  • Починено копирование в буфер обмена по HTTP — единый механизм; кнопка «Копировать» в окне WG.config.

1.1.2

  • Кнопка «Удалить подключение» (очистка сохранённого подключения к API RouterOS);
  • Обновлена справка «?» у «Пользователь API RouterOS».

1.1.1

  • Пароль администратора панели хранится как bcrypt-хеш (ранее — открытым текстом); прозрачная миграция.

1.1.0

  • Проверка обновлений панели на Docker Hub (авто раз/сутки + кнопка); обновление контейнера из панели;
  • Автообновление вкладки WireGuard; компактная правая панель Администрирование;
  • Диагностика: учёт interface-list'ов и протокольных ограничений, проброс в форме in-interface-list=WAN, проверка затенения правил и конфликтов с портами служб;
  • Импорт ключа пира: понятные ошибки, обработка дублей; прочие исправления.

1.0.0

  • Первый публичный выпуск.

⁠Примечание

Проект создается вайбкодингом: ChatGPT + DeepSeek. Код и сценарии проверяются на реальном роутере Mikrotik RB5009UG+S+, однако используйте на свой страх и риск — перед любыми изменениями делайте бэкап!

Исходный код панели, список изменений и сообщения об ошибках: https://github.com/ReyterAK/free-turn-admin⁠

Благодарности: оригинальные проекты free-turn-proxy и FreeTurn (Android) больше не доступны на GitHub; панель работает с зеркалами, поддерживаемыми сообществом (hackdiaz-dev).

Tag summary

Content type

Image

Digest

sha256:dde6bbbce…

Size

9.9 MB

Last updated

14 days ago

docker pull reyterak/free-turn-admin-mikrotik