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

SAMM документация

Полное руководство оператора — от первой установки до повседневной работы.

25 тем 8 разделов Установка одной командой
Быстрая установка

В сети за считанные минуты, из одной команды.

Выполните одну строку на новом сервере Ubuntu или Debian — или в PowerShell в Windows — и установщик загрузит последнюю версию и настроит весь стек SAMM за вас.

Прочитать полную инструкцию по установке
Ubuntu / Debian — запускать от root
curl -fsSL https://samm.securytik.com/install.sh | sudo bash
Windows — запускать в PowerShell от имени администратора
irm https://samm.securytik.com/install-windows.ps1 | iex
Плейлист Видеокурс SAMM от установки до ежедневной работы — полный видеокурс Бесплатный пошаговый плейлист на YouTube, который проведёт вас через установку SAMM и повседневную работу с ним — то же, что и в этом руководстве, но на видео. Смотреть на YouTube

Начать использовать

Обзор & архитектура

SAMM — SecuryTik Active Mikrotik Manager — это полноценная платформа управления для интернет-провайдеров на сетях MikroTik PPPoE и Hotspot. Один установщик превращает чистый сервер Linux в полную систему AAA, биллинга и управления абонентами.

Для кого предназначен SAMM

SAMM создан для интернет-провайдеров беспроводной связи, операторов оптоволокна и провайдеров точек доступа, работающих MikroTik RouterOS . Если вы аутентифицируете подписчиков через PPPoE, Hotspot или IPoE/DHCP и вам необходимо обеспечивает соблюдение уровней скорости, ограничений данных, дат истечения срока действия и выставления счетов — SAMM делает все это с один экран.

Абоненты IPoE/DHCP идентифицируются по идентификатору канала DHCP Option 82 (физический номер порт доступа — профессиональный способ интернет-провайдера) или MAC устройства, а радиус-пароль DHCP-сервера — просто собственный общий секрет RADIUS маршрутизатора, поэтому не нужно ничего дополнительно предоставлять.

Дуальная стека IPv6 — опциональная функция: каждый абонент может получить IPv6 вместе с IPv4. Включите её в волшебнике маршрутизатора и выберите длину делегированного префикса (DHCPv6-PD) — по умолчанию /56, но от /48 до /64, а также блоки IPv6 для распределения. В каждом ответе Access-Accept SAMM возвращается пул WAN IPv6 плюс рутированный префикс, делегированный на LAN абонента, так что собственный роутер клиента (в режиме маршрута) разбивает его на /64 и выполняет SLAAC для своих устройств — стандартная модель делегирования префиксов ISP. Она работает с PPPoE, Hotspot и IPoE, а для бизнес-клиентов можно закрепить статический префикс IPv6 за абонентом.

Как это работает

SAMM держит горячий путь рядом с базой данных. FreeRADIUS обрабатывает каждый пакет аутентификации и учёта; при каждом Interim-Update учёта он вызывает функции PostgreSQL напрямую, чтобы накапливать потребление и вычислять лимиты — пока абоненты онлайн, нет обращений к Python.

Четыре исполнительных уровня взаимодействуют через единую базу данных:

  • FreeRADIUS (unlang + rlm_sql) — authenticates every packet; on each Interim-Update it accumulates bytes/uptime and evaluates limits inside Postgres.
  • samm-radius — runs time-driven sweeps (expiry, daily reset, speed windows) and is the only process that sends Change-of-Authorization packets.
  • samm-worker — pings routers and syncs MikroTik device metadata over the API.
  • samm-api — the admin & customer portals; admin actions are queued to the database and applied by samm-radius, never sent as CoAs directly.

Пять служб

СлужбаРоль
samm-apiПортал администратора + клиентский портал самообслуживания + REST API
samm-radiusОпустошает очередь CoA; выполняет обходы для истечения срока / ежедневного сброса / окон скорости
samm-workerПингует роутеры; синхронизирует метаданные устройств MikroTik через API
samm-notificationДоставляет уведомления по email и Telegram через одну очередь с ограничением скорости
samm-telegramЗапускает интерактивный бот самообслуживания в Telegram

Что делает SAMM

Ядро AAA

Аутентификация PPPoE и Hotspot, применение скорости для каждого пользователя, гибридный CoA.

Тарифы & ограничения

Тарифы скорости плюс четыре независимых лимита и запланированные окна скорости.

Абоненты

Пользователи PPPoE, Hotspot и IPoE/DHCP, а также предоплаченные ваучер-карты Hotspot с печатными PDF.

Оплата

Тарификация по планам, автоматические счета, книга учёта поступлений/платежей/расходов с двойной записью.

Самообслуживание

Клиентский веб-портал и Telegram-бот для потребления, счетов и заявок.

Операции

Актуальная инвентаризация MikroTik, администраторы с ролями, резервное копирование и восстановление, массовые инструменты.

Система

Встроенный VPN WireGuard , туннель Cloudflare , восемь языков, пользовательский интерфейс с возможностью оформления тем.

Уведомления

Оповещения о продлении, истечении срока, квоте и поступлениях по email и Telegram.

Остальная часть этого руководства — инструкции по каждой из этих областей. Используйте меню слева или начните с раздела Установка.

Начать использовать

Установка

SAMM устанавливает всё необходимое — FreeRADIUS, PostgreSQL, nginx, WireGuard, cloudflared и пять служб SAMM — за один шаг. Установщик идемпотентен: повторный запуск обновляет существующую установку на месте и никогда не перезаписывает вашу конфигурацию и не пересоздаёт пароль базы данных.

SAMM работает где угодно — выберите способ установки, подходящий вашей сети:

Предварительные требования

  • Чистый сервер: Ubuntu 22.04 / 24.04 / 26.04 LTS или Debian 12 / 13. Только серверный Linux — настольные варианты не поддерживаются.
  • Доступ root / sudo и подключение к интернету.
  • systemd и хост, где PostgreSQL можно установить локально (он настраивается за вас).

Установка

Вариант A — установка одной командой

На сервере выполните:

curl -fsSL https://samm.securytik.com/install.sh | sudo bash

Этот загрузочный скрипт скачивает последний релизный пакет SAMM с GitHub, распаковывает его и автоматически запускает полный установщик. Готово за несколько минут.

Если github.com блокируется в вашей стране, используйте зеркало, хостимое Cloudflare — тот же установщик, без загрузки с GitHub. (Стандартная команда выше также обнаруживает заблокированный GitHub и автоматически переключается на это зеркало.)

curl -fsSL https://dl.securytik.com/install.sh | sudo bash

В любом случае после завершения установщика откройте портал администратора и войдите с этими учётными данными:

URL входаhttp://<your-server>/admin · Имя пользователяadmin · Парольadmin

Смените пароль администратора сразу после первого входа.

Установка

Вариант B — установка на Windows (Hyper-V)

SAMM работает в Windows внутри собственной небольшой виртуальной машины Ubuntu 24.04 на Hyper-V, которую создаёт и обслуживает один установщик. VM подключается к вашей сети с собственным IP-адресом, поэтому ваши маршрутизаторы MikroTik обращаются к SAMM напрямую — RADIUS видит реальный адрес каждого маршрутизатора, а отключения по CoA работают — точно так же, как с Linux-сервером.

Откройте PowerShell от имени администратора — не командную строку (cmd): щёлкните правой кнопкой мыши по кнопке «Пуск», выберите Terminal (Admin) или Windows PowerShell (Admin), ответьте «Да». Затем выполните:

irm https://samm.securytik.com/install-windows.ps1 | iex

Если samm.securytik.com недоступен с этого ПК, используйте вместо него зеркало на Cloudflare — это тот же установщик. (Установщик и сам переключается на зеркало, если загрузка не удалась.)

irm https://dl.securytik.com/install-windows.ps1 | iex

В любом случае после завершения установщика откройте портал администратора и войдите с этими учётными данными:

URL входаhttp://<SAMM IP>/admin · Имя пользователяadmin · Парольadmin
Вход в ОС (SSH)samm / samm · root (консоль)root / samm

Те же значения по умолчанию, что и в SAMM Server ISO. Смените их все после первого входа. Ярлык SAMM Info на рабочем столе показывает их снова — вместе с IP-адресом SAMM и способом зайти на ВМ по SSH.

Что будет спрошено

  1. К какой сети должен подключиться SAMM, если у ПК подключено более одного адаптера. Нажмите Enter для рекомендуемого варианта (проводное соединение важнее Wi-Fi).
  2. IP-адрес SAMM в этой сети. Предлагается свободный адрес; нажмите Enter, чтобы принять его, введите другой, либо введите dhcp.

Если Hyper-V выключен, установщик включает его и один раз просит перезагрузить Windows; после повторного входа он продолжает работу самостоятельно. Остальное — Multipass, сетевой мост, VM и сам SAMM — занимает 10–20 минут, с индикатором выполнения.

Требования

  • Windows 10 / 11 Pro, Enterprise или Education, либо Windows Server 2019 и новее (64-разрядная). В Windows Home нет Hyper-V.
  • Аппаратная виртуализация включена в BIOS/UEFI (Intel VT-x или AMD-V). Установщик проверяет это и останавливается с понятным сообщением, если она выключена — см. Включить виртуализацию.
  • Не менее 8 ГБ памяти, из них 4 ГБ свободны для VM SAMM (3 ГБ — минимум; другие виртуальные машины — VMware, VirtualBox — уменьшают доступный объём), и 40 ГБ свободного места на диске.
  • Настоятельно рекомендуется сетевой кабель. Многие драйверы Wi-Fi не могут связать виртуальную машину с сетью через мост, и тогда SAMM будет доступен только самому ПК.

После установки

  • Откройте панель администратора по адресу http://<SAMM IP>/admin/login (ярлык SAMM Admin находится на рабочем столе), войдите с учётными данными admin / admin и сразу же смените пароль.
  • Направьте RADIUS вашего MikroTik на IP-адрес SAMM (UDP 1812/1813) — Мастер маршрутизатора в панели сделает это за вас.
  • SAMM запускается вместе с Windows, ещё до входа пользователя в систему, а ПК настроен так, чтобы никогда не переходить в спящий режим. На ноутбуке держите зарядное устройство подключённым и установите для закрытия крышки действие «Ничего не делать».
  • Чтобы удалить: выполните ту же строку с -Uninstall, либо & ([scriptblock]::Create((irm https://samm.securytik.com/install-windows.ps1))) -Uninstall.

Установка

Включение виртуализации в BIOS/UEFI

SAMM в Windows работает в виртуальной машине Hyper-V, для которой нужна функция виртуализации процессора: Intel Virtualization Technology (VT-x) у Intel, или AMD-V — обычно называемая SVM Mode — у AMD. У большинства ПК она включена по умолчанию; у некоторых выключена. Каждый производитель прячет её в своём меню, поэтому ниже приведены общие шаги и её обычное расположение.

Сначала проверьте, не включена ли она уже

Откройте Диспетчер задач (Ctrl+Shift+Esc) → Производительность → ЦП. Если под графиком указано Виртуализация: включена, всё готово. (Если Hyper-V уже включён, Windows может вместо этого показать строку об обнаруженном гипервизоре — это также означает, что виртуализация включена.)

Общие шаги

  1. Сохраните свою работу и перезагрузите ПК.
  2. Откройте настройки BIOS/UEFI: как только экран загорится, несколько раз нажмите клавишу входа в настройки (см. таблицу). В Windows 10/11 можно также перейти в Параметры → Система → Восстановление → Особые варианты загрузки → Перезагрузить сейчас, затем Диагностика → Дополнительные параметры → Параметры встроенного ПО UEFI → Перезагрузить.
  3. Найдите в меню Advanced, Advanced CPU, Processor, Chipset, Security или Virtualization пункт Intel Virtualization Technology, Intel VT-x, SVM Mode или AMD-V и установите значение Enabled. (Intel VT-d / AMD IOMMU не требуется.)
  4. Сохранить и выйти (обычно F10), дайте Windows загрузиться, затем запустите установщик SAMM снова.

Где это обычно находится

ПроизводительКлавиша входа в настройкиОбычное расположение
DellF2Поддержка виртуализации → Виртуализация / Включить технологию виртуализации Intel
HPF10 (или Esc, затем F10)Advanced (или Security / System Configuration) → Virtualization Technology (VTx)
LenovoF1 / F2 (или кнопка Novo)Security (ThinkPad) или Configuration → Intel Virtualization Technology / AMD SVM Technology
ASUSF2 / DelAdvanced Mode (F7) → Advanced → CPU Configuration → Intel Virtualization Technology или SVM Mode
AcerF2Advanced (или Main) → Intel Virtualization Technology
MSIDelOC → CPU Features → Intel Virtualization Tech или SVM Mode
GigabyteDelTweaker (или Advanced) → Advanced CPU Settings → Intel Virtualization Technology или SVM Mode
Серверы (Dell iDRAC, HPE, Supermicro)F2 / F9 / DelProcessor Settings → Virtualization Technology — часто уже включено
Виртуальной машине внутри другой виртуальной машины (когда сама Windows работает в VMware, Proxmox или Hyper-V) вместо этого нужна включённая вложенная виртуализация во внешнем гипервизоре — например, «Virtualize Intel VT-x/EPT» в настройках ЦП VMware, при выключенной VM.

Установка

Вариант C — установка вручную из релизного пакета

Скачайте последний samm-<version>.tar.gz со страницы GitHub Releases, затем на сервере:

tar -xzf samm-<version>.tar.gz
cd samm-<version>
sudo bash install.sh

Вы также можете развернуть из zip-архива, созданного на другой машине — установщик сам rsync-ит исходники в /opt/samm:

mkdir -p /opt/samm && unzip samm.zip -d /tmp/samm-bundle
sudo bash /tmp/samm-bundle/samm/install.sh

Или клонируйте репозиторий в /opt/samm и выполните sudo bash /opt/samm/install.sh.

В любом случае после завершения установщика откройте портал администратора и войдите с этими учётными данными:

URL входаhttp://<your-server>/admin · Имя пользователяadmin · Парольadmin

Смените пароль администратора сразу после первого входа.

Установка

Вариант D — установка с помощью Docker Compose

Если вы предпочитаете запускать SAMM в контейнерах — тот же продукт, упакованный иначе — используйте дистрибутив Docker Compose по адресу github.com/mhdhaidarah/samm-docker. На любом хосте с доступным Docker:

curl -fsSL https://github.com/mhdhaidarah/samm-docker/releases/latest/download/install.sh | sudo bash

Это установит Docker при его отсутствии, поместит docker-compose.yml в /opt/samm-docker/ с уже заполненным сильным случайным паролем базы данных и запустит стек. Образ mhdhaidarah/samm собирается из того же скомпилированного бандла, что и bare-OS-установка — закрытый исходный код by design.

Мультиарх — один и тот же тег публикуется для linux/amd64 и linux/arm64, и нужный вариант выбирается автоматически из тега: docker pull на любом Docker-хосте (Intel/AMD, ARM-сервер, Mac с Apple Silicon) и MikroTik RouterOS 7.23+ на самом роутере. Один файл, все платформы.

На хостах, где передача curl в bash запрещена (заблокированные машины, строгие политики исходящего трафика), вы можете скачать готовый к запуску compose-файл напрямую:

git clone https://github.com/mhdhaidarah/samm-docker.git
cd samm-docker
# optional: edit docker-compose.yml and replace change-me-strong-random-string
docker compose up -d

Несколько функций пока отсутствуют в варианте Docker (поэтапная блокировка по лицензии, динамическая перезагрузка FreeRADIUS). Встроенные страницы администрирования WireGuard и Cloudflare Tunnel намеренно скрыты в варианте Docker — они управляют службами systemd на уровне хоста, недоступными изнутри контейнера. Выберите вариант A или C выше, если вам нужны эти функции встроенными, или запустите cloudflared / wg-quick на хосте Docker непосредственно рядом с SAMM. Полный список ограничений v1 и способ установки вручную см. в README варианта Docker.

На Windows (Docker Desktop) — только для ознакомления

Не рекомендуется для продакшена. Спящий режим / гибернация / закрытие крышки в Windows останавливают контейнеры; перезапуск при загрузке срабатывает только при старте WSL (не при загрузке Windows); ежедневный cron автообновления работает только пока жив WSL. Используйте для ознакомления / демо, затем разворачивайте продакшен на виртуальной машине Linux (Hyper-V, Proxmox, ESXi) или на небольшом физическом устройстве (например, NUC под Ubuntu Server).

Установите Docker Desktop для Windows (позвольте ему настроить бэкенд WSL2 при первом запуске). Затем из PowerShell — терминал WSL не нужен — скачайте compose-пакет и запустите стек:

mkdir C:\samm-docker
cd C:\samm-docker
curl.exe -fLO https://github.com/mhdhaidarah/samm-docker/releases/latest/download/docker-compose.yml
# optional: notepad docker-compose.yml — replace change-me-strong-random-string with your own password
docker compose pull
docker compose up -d

Наблюдайте за загрузкой стека в Docker Desktop → Контейнеры — группа samm расширяется до 8 сервисов. После того как все они станут зелёными, откройте портал администратора и войдите с помощью этих учетных данных:

URL входаhttp://localhost:8000/admin · Имя пользователяadmin · Парольadmin

Смените пароль администратора сразу после первого входа.

Если реальный NAS MikroTik будет обращаться к этому хосту Windows для RADIUS, разрешите UDP 1812 + 1813 через брандмауэр Windows:

New-NetFirewallRule -DisplayName "SAMM RADIUS" -Direction Inbound -Protocol UDP -LocalPort 1812,1813 -Action Allow

Демонтаж: docker compose down -v из каталога установки (-v стирает том postgres и ключ Fernet — сначала сделайте их резервную копию, если вы добавили данные).

Установка

Вариант E — установка на роутер MikroTik (RouterOS 7.23+)

Тот же SAMM, без Linux-машины. Если ваше устройство MikroTik поддерживает пакет container и к нему подключён USB-накопитель или microSD, весь стек можно запустить прямо на роутере — тем же docker-compose.yml, что и везде. RouterOS 7.23+ автоматически подтягивает нужную архитектуру ЦП из мультиарх-тегов, так что ничего специфичного для роутера скачивать не нужно.

Поддерживается: каждый маршрутизатор MikroTik с возможностью контейнеров — RB5009, hAP ax², CCR2004-1G-12S+2XS, CCR2116, CCR2216, L009 и подобные (arm64), а также x86 RouterOS и CHR (amd64). Не поддерживается: устройства armv7 / mipsbe / smips / tile / ppc (hEX, RB750, более старые модели RB) — отсутствие поддержки контейнеров или слишком мало оперативной памяти/процессорных ядер для стека SAMM. Требуется RouterOS 7.23 или более новое (старые версии не могут выбрать архитектуру из тега многоархитектуры).

1. Подготовьте роутер

Установите пакет container (из extra_packages.zip на mikrotik.com/download — загрузите подходящий container-*.npk через Files и перезагрузите). Затем включите режим контейнеров (однократно — он активируется только после отключения питания, а не после обычной перезагрузки):

/system device-mode update container=yes
# HARD reboot the router (unplug the power) — a soft /system reboot
# will NOT activate the container feature

2. Отформатируйте и смонтируйте диск (ext4)

Вставьте USB-накопитель или microSD (рекомендуется ≥ 8 ГБ — Postgres + слои образа занимают место). На роутере:

/disk print
# note the disk slot, e.g. "usb1-part1" or "disk1"
/disk format-drive usb1-part1 file-system=ext4 label=samm

После форматирования убедитесь, что диск монтируется и доступен для записи:

/disk print detail
# look for "type=ext4" and a mount point like "/usb1-part1"

3. Скопируйте compose-файл

Один файл для всех платформ. Замените change-me-strong-random-string (пароль Postgres — одно и то же надёжное значение везде) и change-me-random-token. Затем в WebFig/WinBox: Container → Apps → + New → YAML, вставьте, укажите диск ext4 из шага 2 как хранилище и отправьте. RouterOS 7.23+ автоматически подтягивает нужную архитектуру ЦП из тегов образов.

Застряло на "waiting for reverse proxy"? В RouterOS 7.23+ снимите флажок Use HTTPS в диалоге Apps и разверните заново — эта опция управляет прокси веб-интерфейса приложения, а не загрузкой образов.
docker-compose.yml
name: samm

services:
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: samm
      POSTGRES_USER: samm
      POSTGRES_PASSWORD: change-me-strong-random-string
      TZ: UTC
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U samm -d samm"]
      interval: 10s
      timeout: 5s
      retries: 12

  samm-api:
    image: mhdhaidarah/samm:latest
    restart: unless-stopped
    command: ["api"]
    environment:
      SAMM_ROLE: api
      POSTGRES_HOST: postgres
      POSTGRES_PORT: 5432
      POSTGRES_DB: samm
      POSTGRES_USER: samm
      POSTGRES_PASSWORD: change-me-strong-random-string
      TZ: UTC
      SAMM_API_HOST: 0.0.0.0
      SAMM_API_PORT: 8000
      SAMM_API_WORKERS: 2
      WA_BRIDGE_URL: http://wa-bridge:8787
      WA_BRIDGE_TOKEN: change-me-random-token
    depends_on:
      postgres:
        condition: service_healthy
    healthcheck:
      test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:8000/health >/dev/null || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 30
      start_period: 900s
    ports:
      - "8000:8000"
    volumes:
      - etcsamm:/etc/samm
      - sammvar:/opt/samm/var
      - sammlogs:/var/log/samm
      - sammlocales:/opt/samm/app/locales

  samm-radius:
    image: mhdhaidarah/samm:latest
    restart: unless-stopped
    command: ["radius"]
    environment:
      SAMM_ROLE: radius  # see samm-api notes — parser-agnostic role hint
      POSTGRES_HOST: postgres
      POSTGRES_PORT: 5432
      POSTGRES_DB: samm
      POSTGRES_USER: samm
      POSTGRES_PASSWORD: change-me-strong-random-string
      TZ: UTC
    depends_on:
      postgres:
        condition: service_healthy
      samm-api:
        condition: service_healthy
    volumes:
      - etcsamm:/etc/samm
      - sammvar:/opt/samm/var
      - sammlogs:/var/log/samm

  samm-worker:
    image: mhdhaidarah/samm:latest
    restart: unless-stopped
    command: ["worker"]
    environment:
      SAMM_ROLE: worker  # see samm-api notes — parser-agnostic role hint
      POSTGRES_HOST: postgres
      POSTGRES_PORT: 5432
      POSTGRES_DB: samm
      POSTGRES_USER: samm
      POSTGRES_PASSWORD: change-me-strong-random-string
      TZ: UTC
    depends_on:
      postgres:
        condition: service_healthy
      samm-api:
        condition: service_healthy
    cap_add:
      - NET_RAW
    sysctls:
      - net.ipv4.ping_group_range=0 2147483647
    volumes:
      - etcsamm:/etc/samm
      - sammvar:/opt/samm/var
      - sammlogs:/var/log/samm

  samm-notification:
    image: mhdhaidarah/samm:latest
    restart: unless-stopped
    command: ["notification"]
    environment:
      SAMM_ROLE: notification  # see samm-api notes — parser-agnostic role hint
      POSTGRES_HOST: postgres
      POSTGRES_PORT: 5432
      POSTGRES_DB: samm
      POSTGRES_USER: samm
      POSTGRES_PASSWORD: change-me-strong-random-string
      TZ: UTC
      WA_BRIDGE_URL: http://wa-bridge:8787
      WA_BRIDGE_TOKEN: change-me-random-token
    depends_on:
      postgres:
        condition: service_healthy
      samm-api:
        condition: service_healthy
    volumes:
      - etcsamm:/etc/samm
      - sammvar:/opt/samm/var
      - sammlogs:/var/log/samm

  samm-telegram:
    image: mhdhaidarah/samm:latest
    restart: unless-stopped
    command: ["telegram"]
    environment:
      SAMM_ROLE: telegram  # see samm-api notes — parser-agnostic role hint
      POSTGRES_HOST: postgres
      POSTGRES_PORT: 5432
      POSTGRES_DB: samm
      POSTGRES_USER: samm
      POSTGRES_PASSWORD: change-me-strong-random-string
      TZ: UTC
    depends_on:
      postgres:
        condition: service_healthy
      samm-api:
        condition: service_healthy
    volumes:
      - etcsamm:/etc/samm
      - sammvar:/opt/samm/var
      - sammlogs:/var/log/samm

  wa-bridge:
    image: mhdhaidarah/samm:wa-bridge-latest
    restart: unless-stopped
    environment:
      WA_BRIDGE_TOKEN: change-me-random-token
      TZ: UTC
    depends_on:
      - samm-api
    volumes:
      - wabridge_auth:/data/auth      # multi-device session — persists the QR link

  freeradius:
    image: mhdhaidarah/samm:freeradius-latest
    restart: unless-stopped
    environment:
      POSTGRES_HOST: postgres
      POSTGRES_PASSWORD: change-me-strong-random-string
      TZ: UTC
    depends_on:
      postgres:
        condition: service_healthy
      samm-api:
        condition: service_healthy
    ports:
      - "1812:1812/udp"
      - "1813:1813/udp"

volumes:
  pgdata: {}
  etcsamm: {}
  sammvar: {}
  sammlogs: {}
  sammlocales: {}
  wabridge_auth: {}      # WhatsApp bridge multi-device session

4. Проверьте и подключите MikroTik к SAMM

После запуска контейнеров SAMM откройте портал администрирования в браузере и войдите в систему, используя следующие учетные данные:

URL входаhttp://<router-ip>:8000/admin · Имя пользователяadmin · Парольadmin

Немедленно смените пароль администратора. Аутентификация и учёт RADIUS доступны на UDP 1812 + 1813 на самом роутере, поэтому RADIUS-клиент MikroTik может указывать на 127.0.0.1 с общим секретом, заданным в System → RADIUS.

Экспериментальный путь развертывания. Функция контейнеров RouterOS легче Docker Compose — поведение именованных служб DNS, порядок зависимостей (depends_on) и перезагрузки в реальном времени отличаются. Если стека ведет себя некорректно на вашем оборудовании, вернитесь к запуску Docker на небольшой машине Linux (NUC, Pi 4, виртуальная машина Linux) рядом с MikroTik. Один и тот же файл compose работает там с полной семантикой Compose.

5. Обновление — резервное копирование и восстановление вручную.

Обновление приложения контейнера MikroTik удаляет вашу базу данных. RouterOS не может изменить версию установленного приложения на месте — единственный способ — удалить приложение и добавить его снова, и при удалении удаляются все данные, сохранённые приложением, включая базу данных SAMM. Создайте резервную копию и скачайте её на компьютер ПЕРЕД тем, как удалите приложение. Резервная копия, оставленная на роутере, будет удалена вместе со всем остальным.

Чтобы переместить установку контейнера MikroTik в новую версию:

  1. В SAMM перейдите в Инструменты → Резервное копирование, создайте резервную копию и скачайте файл на ваш компьютер.
  2. На роутере удалите приложение и добавьте его снова с новым версия.
  3. Откройте свежую установку SAMM, перейдите в меню Инструменты → Резервное копирование и восстановите скачанный файл.

Это относится только к контейнеру MikroTik . В Docker ( Linux , Windows или виртуальная машина Linux ) обновление — docker compose pull , тогда docker compose up -d , и ваши данные не будут затронуты — тома находятся за пределами контейнеры и выжить.

Установка

Вариант F — SAMM Server ISO (установка-appliance)

SAMM Server ISO превращает любую пустую машину или ВМ в готовый сервер SAMM: загрузитесь, выберите DHCP или статический IP на единственном экране, подтвердите — и всё. Образ устанавливает Ubuntu Server 24.04 LTS (минимальный), задаёт имя хоста samm-server, а при первой загрузке автоматически скачивает и устанавливает последний выпуск SAMM — ISO никогда не устаревает. Консоль показывает заставку SAMM и баннер входа с IP сервера, адресом панели администратора и учётными данными по умолчанию, а команда samm-tools даёт прямой доступ к инструментам обслуживания (проверка состояния, резервное копирование и восстановление базы, сброс пароля администратора).

ISO стирает первый диск машины. Загружайте его только на оборудовании или ВМ, выделенных под SAMM. Если во время установки нет интернета, настройка сама завершится, как только он появится.

Запишите образ на USB-накопитель (Rufus, balenaEtcher или dd) или подключите к ВМ, загрузитесь и ответьте на вопрос о сети. Учётные данные по умолчанию после установки — панель: admin / admin, ОС: samm / samm или root / samm — смените их все.

Скачать SAMM Server ISO 2.2 GB

SHA-2568b6d57e286a4c0524d96b5b4970b57079113e000fc8229f94360410c12f5102e

Установка

Справочник установщика

Неинтерактивные параметры

На все запросы можно ответить заранее с помощью переменных окружения, чтобы установщик мог работать без участия оператора:

ПеременнаяЭффект
DB_PASSИспользовать этот пароль базы данных вместо автоматически сгенерированного (только при первой установке)
CF_TOKENУстановить коннектор Cloudflare Tunnel с этим токеном Zero Trust
SAMM_HTTP_PORTПринудительно задать порт прослушивания nginx (пропускает запрос об определении порта 80)
SAMM_VERBOSE1 выводит необработанный вывод команд вместо индикатора прогресса
NO_COLOR1 отключает цветной вывод
DB_PASS='strong_pw'   sudo bash /opt/samm/install.sh
CF_TOKEN='eyJ...'     sudo bash /opt/samm/install.sh
SAMM_HTTP_PORT=8080   sudo bash /opt/samm/install.sh

Что настраивает установщик

Установщик работает как живой цветной индикатор прогресса — процентная шкала и контрольный список по фазам. Необработанный вывод каждой фазы записывается в /var/log/samm-install.log; при сбое печатаются последние 30 строк.

КомпонентПодробности
FreeRADIUS 3Настроен с бэкендом PostgreSQL и динамическими NAS-клиентами; проверен командой freeradius -CX
PostgreSQLБаза данных, схема и все SQL-миграции применены — каждый файл миграции идемпотентен
Python venvВсе зависимости ставятся из requirements.txt; каталоги переводов компилируются. Если Python дистрибутива не совпадает со скомпилированным пакетом, установщик автоматически скачивает подходящий автономный интерпретатор в /opt/samm/runtime
nginxОбратный прокси добавляется дополнительно — существующие сайты никогда не удаляются. Использует порт 80, если он свободен; иначе запрашивает альтернативный порт
5 servicessamm-api, samm-radius, samm-worker, samm-notification, samm-telegram — все включены как юниты systemd
WireGuardПакеты установлены; настраиваются позже в System → VPN
cloudflaredБинарный файл всегда устанавливается; токен туннеля указывается при установке по желанию или добавляется позже в System → Cloudflare Tunnel

Все учётные данные — пароль базы данных и ключи подписи сессий — генерируются автоматически при первой установке.

Интерактивные запросы

Все запросы происходят заранее, до начала установки:

  • Токен Cloudflare — вставьте токен коннектора Zero Trust, чтобы опубликовать SAMM в сети без открытых портов, или нажмите Enter, чтобы пропустить и настроить позже.
  • Порт HTTP — если порт 80 уже занят, установщик оставляет эти сайты нетронутыми и запрашивает альтернативный порт (по умолчанию 8080).

Сводка установки

После завершения установщик печатает сводку с URL администратора, логином по умолчанию, выбранным портом HTTP, учётными данными базы данных и путями к файлам конфигурации:

============================================================
  SAMM is installed and running.
  Admin portal  : http://localhost/admin/login
  Default login : admin / admin   <- CHANGE AFTER FIRST LOGIN
  Config files  : /etc/samm/samm.yaml  /etc/samm/api.env
============================================================

Обновление

Чтобы обновить, скачайте новые исходники и запустите установщик заново:

git -C /opt/samm pull        # or unpack a newer release bundle
sudo bash /opt/samm/install.sh

Повторный запуск повторно синхронизирует исходники, обновляет venv, повторно применяет все миграции, перезагружает конфигурации FreeRADIUS и nginx и перезапускает каждую службу. Ваши файлы конфигурации и порт HTTP, выбранный при первой установке, сохраняются.

Совет SAMM также может обновляться сам — см. Лицензирование и обновления. Включите автоматические обновления или применяйте их по требованию в System → License.
Изолированная сеть и удалённая БД SAMM поставляет только SAMM — FreeRADIUS, PostgreSQL, nginx и остальное скачиваются во время установки из вышестоящих apt-репозиториев, поэтому при установке в изолированной сети эти пакеты нужно подготовить заранее. Для удалённого PostgreSQL задайте DSN в /etc/samm/samm.yaml после установки.

Начать использовать

Первые шаги

Пять коротких задач доводят свежую установку до состояния, когда абоненты могут подключаться и им можно выставлять счета.

1 · Первый вход

  1. Откройте http://<your-server>/admin/ (используйте порт HTTP из сводки установки, если это не 80) или URL вашего туннеля Cloudflare.
  2. Войдите с admin / admin.
  3. Немедленно смените пароль в System → Admins или в меню профиля на верхней панели.

2 · Добавьте свой первый роутер

  1. Перейдите в MikroTik → NAS и нажмите Add Router.
  2. Введите IP роутера, короткое имя и общий секрет RADIUS. Для устройств MikroTik при желании добавьте учётные данные API для оперативной синхронизации устройства.
  3. На MikroTik добавьте сервер RADIUS, указывающий на хост SAMM (порты 1812/1813) с тем же общим секретом, и включите RADIUS для PPP / Hotspot.

Перезапуск FreeRADIUS не нужен — SAMM определяет NAS-клиентов динамически из базы данных. Полную процедуру см. в разделе Роутеры (NAS), или позвольте мастеру настройки настроить MikroTik за вас.

3 · Создайте план

План определяет скорость, лимиты и цену, которую вы продаёте. Перейдите в Users → Plans → New plan. Полный справочник по полям: Планы и лимиты.

4 · Добавьте абонента

Перейдите в Users → New customer, заполните учётные данные для входа и выберите план. Абонент может подключиться сразу. Для предоплаченного доступа hotspot вместо этого сгенерируйте ваучерные карты.

5 · Активируйте лицензию

Свежая установка работает незарегистрированной на минимальном тарифе. Откройте System → License и активируйте, чтобы снять ограничения — см. Лицензирование и тарифы.

Повседневный ритм Добавляйте роутеры → создавайте планы → добавляйте абонентов или карты → следите за Панелью → фиксируйте платежи в разделе Бухгалтерия.

Начать использовать

Миграция с другой системы

Уже используете другую систему биллинга RADIUS? SAMM читает её данные и заново создаёт ваши планы и абонентов, так что ничего не придётся вводить вручную. Абоненты сохраняют свой сервисный пароль и дату окончания, а значит продолжают входить точно так же, как раньше.

Откройте Инструменты → Экспорт / Импорт и выберите свою прежнюю систему в разделе Миграция с другой системы. Как и остальные Инструменты, функция доступна только суперадминистраторам.

Что загружать

Прежняя системаФайлОткуда он берётся
SAS4 / Radius Manager .sql или .sql.gz Резервная копия MySQL старой базы данных
Super Speed Radius .sql или .sql.gz Резервная копия MySQL старой базы данных
Pro Radius .xlsx или .csv Её экспортированный список абонентов — эта система не умеет выгружать резервную копию

Резервные копии баз данных часто занимают несколько гигабайт; это нормально, загружайте файл как есть. Сжатые копии не нужно предварительно распаковывать.

Как это работает

  1. Загрузите файл. Пока ничего не записывается.
  2. Просмотрите предпросмотр. В нём перечислены планы и абоненты, которые будут созданы, отмечено всё, что пришлось пропустить или исправить, и проверено общее количество относительно вашей лицензии — до того, как вы подтвердите.
  3. Выберите, что делать с уже существующими именами пользователей в SAMM — пропустить их и сохранить запись SAMM либо обновить её имя и контакты из прежней системы.
  4. Импортируйте. Каждая строка записывается независимо, поэтому одна плохая строка никогда не откатывает остальные.

Что переносится

  • Планы — название, скорости, цена, срок и квота трафика, если прежняя система их хранит.
  • Абоненты — логин, сервисный пароль, имя, контактные данные, дата окончания, план, статический IP и MAC.
  • Абоненты, отключённые в прежней системе, остаются отключёнными.

Биллинг, счета, предоплаченные карты, заявки, бухгалтерия и журналы администратора намеренно не импортируются — они относятся к модели данных прежней системы и редко переносятся без искажений.

Значения, не соответствующие своему столбцу

Реальные базы данных неаккуратны: адрес, введённый в поле e-mail, заметка в поле мобильного телефона, номер, набранный на арабской клавиатуре. SAMM проверяет каждое значение на соответствие тому, что должно храниться в его столбце. Всё, что не подходит, остаётся вне этого поля и вместо этого сохраняется в служебных заметках абонента с пометкой источника — так ничего не теряется и ни одно поле не засоряется. Предпросмотр сообщит, сколько значений это затронуло.

Pro Radius подробности

Pro Radius экспортирует абонентов, но не планы, поэтому SAMM выводит планы из уровня услуги каждого абонента, беря скорость из его названия (услуга «4MBPS» становится планом на 4 Мбит/с). Трёх вещей в этом файле попросту нет, и они задаются разумными значениями по умолчанию, которые следует потом проверить:

  • Срок — установлен в 1 месяц. Настоящая дата окончания каждого абонента импортируется без изменений, так что это влияет только на будущие продления.
  • Скорость отдачи — приравнена к скорости приёма.
  • Цена — установлена в 0.
Проверьте планы перед выставлением счетов После импорта из Pro Radius откройте Планы и задайте для каждого реальную цену и период. Пока вы этого не сделаете, такие планы будут выставляться по нулю.

Полезно знать

  • Запускать можно многократно и безопасно. Повторный импорт того же файла пропускает всех уже имеющихся, а не дублирует их.
  • Ваша лицензия по-прежнему действует. Если в файле больше абонентов, чем допускает ваш тариф, предпросмотр скажет об этом заранее и укажет, сколько поместится — можно повысить тариф или импортировать часть.
  • Сначала сделайте резервную копию, если импортируете в установку, где уже есть реальные данные.

Абоненты & тарифы

Тарифы & ограничения

План — это описание услуги, назначаемое абонентам — оно задаёт скорость, лимиты и цену. Создавайте планы до добавления пользователей.

Свежая установка уже содержит 9 готовых тарифов — восемь месячных ступеней скорости плюс тариф-ограничитель «Expired» — продавайте сразу или создавайте свои. Посев выполняется только при первой установке и никогда не трогает добавленные вами тарифы.

Создать план

  1. Перейдите в Users → Plans.
  2. Нажмите New plan.
  3. Заполните форму и нажмите Save plan.

Каждый лимит — это переключатель — включайте только нужные вам. То же окно редактирует существующий план (откройте меню ⋮ строки → Edit).

Поля плана

ПолеЗначение
НазваниеУникальное имя плана, например Home-50M
ЦенаВзимается за расчётный период при использовании выставления счетов
Скорость загрузки / отдачинапример 50M, 512K, 1G — применяется как ограничение скорости MikroTik
Одновременные сессииСколько устройств может быть одновременно онлайн на этом тарифе. По умолчанию 1 — второй вход отклоняется, пока активен первый. Укажите 0 для неограниченного числа. Сессия, переставшая передавать данные, игнорируется, поэтому обрыв связи никогда не блокирует абонента
Лимит: Истечение срокаПодписка заканчивается через фиксированный период после активации (дни/месяцы/часы/минуты)
Лимит: КвотаОбщий лимит трафика (совокупный, только загрузка или только отдача) на всю подписку
Лимит: Время в сетиОграничение на суммарное время подключения — сумма длительностей всех сессий
Лимит: Дневное потреблениеЛимит трафика, который сбрасывается каждый день в заданное время ежедневного сброса
Безлимитное окноБыстрое добавление одного окна скорости — полный редактор находится на странице Speed Windows плана
Пул IPНеобязательное имя RADIUS Framed-Pool для назначения адресов
АвтопродлениеНачать новый период по истечении срока вместо смены плана или отключения

Четыре лимита

Каждый лимит независим и необязателен. Когда заданы несколько, SAMM проверяет их в фиксированном порядке — истечение срока → квота → время в сети → дневной — и первый исчерпанный определяет действие.

ЛимитОтслеживаетПри исчерпании
Истечение срокаКалендарное время с момента активацииПереключить на другой план или отключить
КвотаВсего использовано байтовПереключить на другой план или отключить
Время в сетиСуммарные секунды сессийПереключить на другой план или отключить
ДневнойБайты с момента последнего ежедневного сбросаДросселирование — до заданных скоростей или через более медленный тариф — до следующего дневного сброса

Для каждого лимита вы выбираете, что происходит при исчерпании: укажите следующий тариф, на который переключить абонента, или оставьте — отключение —. Дневной лимит дросселирует вместо отключения: по умолчанию вы задаёте скорости напрямую (поля загрузки/отдачи) либо выбираете более медленный «следующий» тариф — в обоих случаях абонент автоматически возвращается к исходному тарифу при следующем дневном сбросе.

Окна скорости

Окно скорости переопределяет базовую скорость плана на заданные часы — например, окно с безлимитной скоростью после полуночи. Нажмите на строку плана, чтобы открыть его редактор Speed Windows, который добавляет управление по дням недели и поддерживает окна, пересекающие полночь. Когда совпадают несколько окон, побеждает самое скоростное.

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

Два понятия потребления

SAMM хранит потребление в двух местах и никогда их не смешивает:

  • Сбрасываемые счётчики — состояние по каждому лимиту. Обнуляются сбросом администратора и ежедневным сбросом.
  • Биллинговые счётчики — несбрасываемые итоги за всё время. Никогда не обнуляются, поэтому отчёты и счета остаются точными.

Управление планами

Список планов показывает скорость каждого плана, число абонентов, активные лимиты и окна скорости. Из меню ⋮ строки вы можете редактировать, открыть его окна скорости, включить/отключить его, перейти к его абонентам или удалить его (только когда у него нет абонентов). Редактирование автопродления предлагает распространить изменение на всех текущих абонентов.

Дублирование точно копирует тариф, включая скорости, лимиты, окна скорости и цену, под новым названием, что гораздо быстрее, чем вручную изменять один номер в тарифном плане. Если вы выберете уже используемое имя, будет использовано следующее доступное число.

Абоненты & тарифы

Абоненты

Абонент (клиент / пользователь) — это учётная запись PPPoE или Hotspot, которая аутентифицируется в SAMM. Каждому абоненту назначается ровно один план.

Создать абонента

  1. Перейдите в Users и нажмите New customer.
  2. Заполните форму и сохраните — абонент может подключиться сразу.
ПолеЗначение
Имя пользователя *Имя для входа PPPoE / Hotspot — должно быть уникальным
Пароль *Пароль для входа (хранится для аутентификации RADIUS PAP/CHAP)
Имя / ФамилияИмя абонента
Мобильный / Email / АдресКонтактные данные — используются для уведомлений и счетов
Тариф *Назначаемый тарифный план
Переопределение срока действияНеобязательная ручная дата истечения вместо вычисленной планом
АвтопродлениеАвтоматически продлевать период плана по истечении срока

Создайте много подписчиков одновременно

Новые пользователи в партии создают нумерованный набор учетных записей за один проход — обычный способ передачи блока логинов для развертывания в деревне, отеля или реселлера. Выберите, сколько, с какого номера начинать и сколько нулей добавлять (3 дает 001, 002, …); все остальное — тариф, срок действия, автоматическое обновление — заполняется один раз и применяется ко всем. Они делят один пароль.

Выбор счетов применяется к каждому пользователю в группе отдельно, поэтому при запуске пятидесяти либо создаются пятнадцать счетов, либо ни одного, и общая сумма отображается перед подтверждением.

Список абонентов

Страница Users перечисляет каждого абонента с наглядной точкой статуса, назначенным планом и тем, сколько осталось от каждого лимита — дневное потребление с индикатором прогресса, остаток квоты, остаток времени в сети и оставшиеся дни. Фильтруйте по статусу (All / Active / Suspended / Expired / Online) или ищите по имени пользователя, имени или мобильному.

Значок смены плана Один значок — это план абонента. Два значка, соединённые стрелкой, означают, что абонент достиг своего дневного лимита и временно переведён на план с ограничением скорости — он вернётся к исходному при следующем ежедневном сбросе.

Управление абонентом

Щёлкните правой кнопкой по строке — или используйте меню ⋮ — для любого действия над абонентом:

ДействиеЧто он делает
Просмотр / РедактированиеОткрыть страницу с подробностями или отредактировать контактные данные, пароль и срок действия
Включить / ОтключитьПриостановить учётную запись — онлайн-абоненты отключаются
Продлить срок действияДобавить длительность плана поверх оставшегося времени; создаёт счёт, если у плана есть цена
Сбросить время в сети / квоту / дневнойОбнулить выбранный счётчик лимита
ИспользованиеОткрыть графики потребления и историю сессий
УдалитьУдалить абонента и всю его историю — активные сессии сначала отключаются
Как действия вступают в силу Сбросы, смены планов и продления ставятся в очередь в журнал аудита и применяются тиком samm-radius — обычно в течение нескольких секунд. Если абонент онлайн, SAMM также отправляет оперативное обновление. См. CoA и оперативные изменения.

Страница деталей также показывает пароль абонента за кнопкой-глазом (с копированием в один клик) — удобно, когда клиент спрашивает свои данные.

Представление Usage

Действие Usage открывает подробную страницу трафика для одного абонента с переключателем периода 7d / 14d / 30d / 90d. Оно сообщает три ключевых показателя — трафик за сегодня (с разбивкой на отдачу/загрузку и минутами онлайн), трафик за этот месяц и суммарное время онлайн за месяц. Под ними — график дневного трафика отдачи против загрузки и полная таблица истории сессий: время начала и окончания, длительность, байты на загрузку и отдачу, NAS и причина завершения каждой сессии.

Массовые операции

Чтобы изменить владельца, срок действия, статус или автопродление для многих абонентов сразу — или удалить многих — используйте инструменты Bulk Changes и Bulk Delete. Чтобы создать абонентов массово из таблицы, используйте Export / Import.

Ограничить подписчика определенными маршрутизаторами

Подписчик (или вся группа карт) может быть привязан к конкретным NAS-маршрутизаторам из формы редактирования. Без выбора маршрутизаторов аккаунт работает на любом NAS; с выбранными одним или несколькими, аутентификация принимается только с этих маршрутизаторов — принудительный отказ внутри RADIUS. Изменение набора немедленно отключает любую активную сессию на запрещенном маршрутизаторе. В сочетании с настройкой администрирования по NAS, это то, как многопрофильные и франчайзинговые структуры поддерживают подписчиков каждого филиала на маршрутизаторах этого филиала.

Абоненты & тарифы

Карты Hotspot

Для предоплаченного доступа Hotspot генерируйте пакет ваучерных карт вместо отдельных абонентов. Каждая карта — это пара имя пользователя/пароль со своей скоростью и лимитами, генерируемая тысячами и печатаемая для раздачи.

Создать группу карт

  1. Перейдите в Users → Hotspot Cards и нажмите New group.
  2. Заполните форму ниже и нажмите Create group — SAMM генерирует учётные данные каждой карты автоматически.
РазделПоля
ИдентификацияУникальное имя группы, описание, необязательный префикс имени пользователя, сколько карт сгенерировать (до 10 000)
Учётные данныеФормат имени пользователя и пароля (цифры / буквы / буквенно-цифровой) и длина
Ограничение скоростиСкорость загрузки и отдачи — 256k, 6M, 1G; 0 = безлимит
Лимит трафикаБезлимитный, совокупный лимит или раздельные лимиты загрузки/отдачи (МБ / ГБ / ТБ)
Лимиты времениЛимит времени в сети, истечение срока после первого входа и групповая дата «действительно до»

Истечение срока отсчитывается от первого входа каждой карты, тогда как действительно до — это жёсткая дата — карты нельзя использовать после неё, независимо от того, были ли они когда-либо активированы.

Управление группой

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

Дублирование группы точно копирует все настройки и генерирует такое же количество карт с новыми кодами. Код карты может принадлежать только одной карте, поэтому копия — это новый тираж, а не клон старого. Это быстрый способ повторного заказа партии купонов, которые распроданы.

Статусы карт

СтатусЗначение
НеиспользованнаяСгенерирована, но вход ни разу не выполнялся
АктивенИспользуется, в пределах своих лимитов
ИсчерпанаДостигнут лимит (квота, время в сети или истечение срока)
ОтключенаОтключена вручную

Печать и отслеживание

Откройте группу, чтобы увидеть её карты, распечатать их в PDF для раздачи (макет печати использует логотип вашего провайдера из Settings) и просмотреть потребление по каждой карте. Трафик карт также отображается в Отчётах на вкладке Cards, и у каждой группы есть собственное представление бухгалтерии.

Абоненты & тарифы

Самообслуживание — гости авторизуются самостоятельно.

Противоположность купона: никто ничего не печатает, и никто не стоит за столом. Посетитель подключается к вашему горячему точке, нажимает Зарегистрироваться на странице входа, вводит свое имя и номер мобильного телефона, и SAMM отправляет им пароль по SMS, WhatsApp или электронной почте. Они вводят его на той же странице, и они онлайн — и вы сохраняете именованную, экспортируемую запись всех, кто использовал гостевую сеть.

Типичные места проведения: рестораны и кафе, отели и гостевые дома, выставки и ярмарки, конференции, торговые центры, клиники и залы ожидания, спортивные залы, коворкинги, салоны, залы ожидания в аэропортах, стадионы, кампусы, библиотеки, автосалоны, места проведения свадеб, курорты и кемпинги.

Включение его

  1. Сначала настройте канал доставки. Центр уведомлений → включите SMS или WhatsApp и отправьте себе тестовое сообщение. Ничто другое не работает, пока не будет настроен хотя бы один канал.
  2. Самообслуживание → Настройки: отметка Разрешить гостям самостоятельную регистрацию, выберите, какие каналы предложить, и установите срок действия пароля и время ожидания гостя перед повторной просьбой.
  3. Оставьте пароли берутся из группы «Самообслуживание» за исключением случаев, когда есть веская причина для изменения — эта группа определяет скорость и сколько устройств могут использовать один пароль.
  4. Включите вкладку «Регистр» для каждого типа входа, который вы используете — см. ниже. Это шаг, который люди часто упускают из виду.

Страница входа — шаг, который люди пропускают

Таб "Регистрация" имеет дизайн по логину и отключена по умолчанию. Откройте Менеджер устройств MikroTik → Маршрутизатор → Страница входа, отредактируйте используемый дизайн и установите флажок Разрешить самосервис. Вы можете изменить каждое предложение, которое видит гость на той же странице — метку вкладки "Регистрация", вводную строку, метки двух полей, кнопку и пять ответов ("Ваш пароль в пути", "У вас уже есть один", "Пожалуйста, попробуйте позже", "Мы не смогли его отправить", "Регистрация недоступна").

Затем нажмите «Нажать» — и нажимайте ее еще раз после каждого обновления SAMM . Страницы входа в горячие точки хранятся в собственном флеш-памяти маршрутизатора, а не в SAMM. При обновлении SAMM они не перезапускаются, поэтому маршрутизатор продолжает обслуживать старую страницу без вкладки Регистрация до тех пор, пока вы не перезапустите. В вкладке «Страница входа» SAMM предупреждает вас, если маршрутизатор отображает страницы, более старые, чем установленная вами версия, и на странице Самообслуживания перечисляются все маршрутизаторы, которые не могут отображать вкладку, и предлагается исправить их все одновременно.

Правила, которые останавливают злоупотребления

  • Один активный пароль на номер. Повторное запросы при действительном коде направляет гостя на проверку сообщений, а не на отправку нового.
  • Затем период ожидания, который вы устанавливаете, перед тем как это число может запросить новое.
  • Срок действия начинается с момента отправки пароля, а не с первого входа в систему, поэтому код, который не использовался в течение недели, больше не работает.
  • Ежедневный лимит, установленный вашей лицензией (см. ниже). После его использования гости просят попробовать позже, а выданные пароли продолжают действовать.
  • Каждая попытка регистрируется против MAC-адреса устройства таким, как это сообщил маршрутизатор — что гость не может подделать из своего браузера.

Лицензия

Self Service лицензируется отдельно от вашего тарифа — по числу кодов доступа, которые установка может выдать в день, и продлевается в свою дату: можно быть на Free с платным дополнением или на Unlimited без него. Каждая установка получает 10 в день бесплатно; Light повышает до 50, Heavy — до 200, а Max снимает ограничение. См. цены.

Страница самообслуживания отображает использованное / разрешённое на сегодня и ясно указывает, когда лимит исчерпан. Купить или обновить можно на панели мониторинга securytik.com, или запросить в разделе Система → Лицензия, и администратор SecuryTik подтвердит его. Код доступа, который не был отправлен, не учитывается в вашем лимите.

Сеть & роутеры

Роутеры (NAS)

NAS (Network Access Server) — это роутер, который аутентифицирует абонентов в SAMM через RADIUS. Каждому роутеру, который несёт абонентский трафик, нужна запись NAS.

Добавить роутер

  1. Перейдите в MikroTik → NAS и нажмите Add Router.
  2. Заполните поля ниже и сохраните.
ПолеЗначение
IP / имя хоста NASАдрес роутера, каким его видит хост SAMM
Короткое имяПонятная метка, отображаемая по всему интерфейсу
Типmikrotik открывает оперативную синхронизацию устройства и отправку конфигурации; другие типы — только RADIUS
СекретОбщий секрет RADIUS — должен точно совпадать с роутером, иначе аутентификация не удастся
Порт CoAUDP-порт, на который SAMM отправляет пакеты Change-of-Authorization (по умолчанию MikroTik 3799)
Порт / пользователь / пароль APIУчётные данные API MikroTik, которые SAMM использует для чтения информации об устройстве и отправки конфигурации
Перезапуск не нужен SAMM определяет NAS-клиентов динамически из базы данных — добавление или удаление роутера никогда не требует перезапуска FreeRADIUS.

Список NAS

Каждый роутер отображается в одной таблице — ID, IP / имя хоста NAS, короткое имя, тип, скрытый секрет (щёлкните по ячейке, чтобы раскрыть его), порты CoA и API, а также оперативный результат ping с временем отклика. Поле поиска фильтрует по IP, короткому имени или описанию.

Меню ⋮ каждой строки содержит действия для роутера — View Device и Refresh Info (только MikroTik), Edit, Push RADIUS config (только MikroTik) и Delete. Открытие строки типа mikrotik сразу переходит на её страницу устройства.

Обнаружить соседей

Нажмите Discover neighbors, чтобы просканировать сеть на устройства MikroTik (по протоколу обнаружения соседей MikroTik) и добавить их как записи NAS, не вводя адреса вручную. Найденный маршрутизатор можно добавить по IP или автодобавить — бутстрап в один клик: создаёт на маршрутизаторе пользователя управления SAMM, задаёт IP управления и убирает заводской мост.

Автодобавление — для чистых маршрутизаторов Бутстрап в один клик предназначен для заводски чистых (или сброшенных) устройств — на уже настроенном маршрутизаторе он может перезаписать или сломать конфигурацию.

Отправить конфигурацию RADIUS на роутер

Для записей NAS MikroTik меню ⋮ строки предлагает Push RADIUS config — SAMM настраивает роутер за вас через API вместо ручного ввода. Вы подтверждаете IP сервера SAMM (он должен быть доступен с роутера) и порты аутентификации, учёта и CoA; затем SAMM создаёт или заменяет запись RADIUS на роутере:

НастройкаЗначение
КомментарийSAMM — тег, который SAMM использует, чтобы найти и обновить эту запись позже
Службаhotspot, ppp
Адрес / секретХост SAMM с общим секретом из этой записи NAS
Тайм-аут3000 ms
Входящий CoAПринимается на подтверждённом вами порту CoA

После завершения отправки диалог показывает журнал результатов.

Настройте сторону MikroTik

Если вместо этого вы настраиваете роутер вручную:

  • Добавьте сервер RADIUS, указывающий на хост SAMM, с тем же общим секретом, включённый для PPP / Hotspot.
  • Используйте порт аутентификации 1812, порт учёта 1813.
  • Принимайте входящий CoA на порту 3799.
  • Установите интервал Interim-Update учёта примерно в 5 минут (значение мастера SAMM) — с этой частотой SAMM накапливает трафик и оценивает лимиты; более короткие интервалы ускоряют срабатывание лимитов ценой большего учётного трафика.

Устройства только для мониторинга

Роутер, добавленный как monitor, появляется в инвентаризации MikroTik, пингуется и синхронизируется, но не имеет роли RADIUS — он не может аутентифицировать абонентов. Используйте его для наблюдения за роутерами, которые не являются абонентскими NAS.

Сеть & роутеры

Менеджер MikroTik

Когда у роутера есть учётные данные API, SAMM управляет им напрямую через API MikroTik — без WinBox, без SSH. Раздел MikroTik — это актуальная инвентаризация каждого роутера, и каждое устройство открывает страницу с подробностями с пятнадцатью вкладками, которые настраивают почти каждую часть RouterOS из вашего браузера.

MikroTik Monitor

MikroTik → Monitor показывает по одной карточке на роутер, расположенных сеткой. Каждая карточка сообщает — обновляется samm-worker и опрашивается оперативно каждые 30 секунд — точку доступности, версию RouterOS, загрузку CPU и число ядер, использование памяти, число активных сессий, время в сети и время последнего замера.

Карточка помечается либо NAS (роутер, который также аутентифицирует абонентов через RADIUS), либо monitor (устройство, добавленное только для мониторинга). Add MikroTik регистрирует новое устройство; Refresh now принудительно выполняет немедленный опрос. Карточки только для мониторинга имеют меню по правому щелчку — Open, Edit, Refresh Info, Delete.

Страница устройства — пятнадцать вкладок

Откройте любое устройство для его полной страницы управления. Вкладки делятся на четыре группы.

Мониторинг

ВкладкаЧто показывает
ОбзорИнформация об устройстве, системная информация и графики истории производительности (CPU, память, сессии во времени)
ИнтерфейсыКаждый интерфейс с его текущим состоянием, плюс история трафика по каждому интерфейсу
Сайты и приложенияТри подвида: Monitor (сайты и приложения, замеченные на маршрутизаторе, с историей трафика), QoS (приоритеты по приложениям, ниже) и App Filter (DNS-блокировка контента из каталога)

Менеджер устройств

Вкладка Manager → General — это служебная страница устройства: Identity (имя роутера), Time (часы, часовой пояс и NTP) и Tools (перезагрузка, ping и другие действия роутера в один клик).

Настройка сети

ВкладкаЧто вы настраиваете
МостСоздавайте мосты LAN и выбирайте, какие физические интерфейсы (порты) относятся к каждому
VLANДобавляйте интерфейсы VLAN и управляйте ими
IPТри подвкладки — Static (статические и динамические адреса), DHCP client (получить адрес от вышестоящего), DHCP server (раздавать адреса, с актуальной таблицей аренды)
DNSСайты и приложения
WiFi / CAPsMANИнтерфейсы Wi-Fi с их конфигурациями и профилями безопасности; и контроллер CAPsMAN — конфигурации, правила провижининга и удалённые CAP

Службы и обслуживание

ВкладкаЧто вы настраиваете
PPPoEСерверы PPPoE, профили PPP, пулы IP и интервал interim-update учёта RADIUS
HotspotСерверы Hotspot, профили hotspot и профили пользователей, пулы DHCP/IP и страница входа captive-портала
ИнтернетВосходящие каналы WAN — управляемые SAMM WAN и маршруты по умолчанию, при этом любые существующие WAN не от SAMM показываются только для чтения
FirewallПравила фильтра, анализ защищённости маршрутизатора, связность и цели, модули безопасности и резервные копии брандмауэра — Auto-Security делает снимок перед применением и может взвести автооткат по таймеру: набор правил, который вас запер, восстановится автоматически
ОбновлениеОбновления RouterOS — выберите канал обновлений, проверьте и примените, а также просмотрите установленные пакеты
МастерПошаговая первичная настройка, ниже

Интервал interim-update PPPoE

На вкладке PPPoE параметр Interim update задаёт, как часто роутер отправляет пакеты Interim-Update учёта RADIUS в SAMM. SAMM использует эти пакеты, чтобы накапливать счётчики байтов и времени в сети и вычислять лимиты квоты, дневной и времени в сети — без них применение лимитов и счётчики активных сессий останавливаются. Рекомендуемое значение — 5m.

Страница входа Hotspot

На вкладке Hotspot вы управляете страницей входа captive-портала: сохраняете стандартные страницы MikroTik, применяете один из встроенных шаблонов или один из ваших сохранённых дизайнов. SAMM включает визуальный редактор дизайна и галерею шаблонов — настройте страницу входа и отправьте её прямо в hotspot маршрутизатора.

QoS с учётом приложений

Представление QoS (подвкладка веб-сайтов и приложений) превращает приложения и сайты в SAMM уже видит на маршрутизаторе план с приоритетом загрузки. Перетащите каждое приложение из пула в один из восьми приоритетных слотов — слот 1 обслуживается первым в случае конкуренции, слот 8 последний; приложения, оставшиеся в пуле, не формируются. При желании можно ограничить скорость загрузки любого приложения (например, 10M ) и установите общий потолок загрузки для приоритета, за который можно бороться. Авторассылка по категории упорядочивает всё в один клик — сначала сообщения, потом ИИ-сервисы, потом магазины, а все остальное ниже.

При отправке SAMM компилирует слоты в дерево очередей MikroTik (с меткой SAMM:qos, parent=global) с соответствующими правилами firewall для пакетных меток, начиная с наивысшего приоритета. Оно построено на том же каталоге фильтра сайтов и приложений, который питает мониторинг, поэтому появляются только приложения, реально замеченные на маршрутизаторе, — а удаление SAMM QoS убирает с маршрутизатора все объекты SAMM:qos, оставляя ваши счётчики нетронутыми.

Мастер настройки

Вкладка Мастер собирает всё за десять коротких шагов и в конце отправляет конфигурацию на маршрутизатор одним пакетом. Ничего не отправляется, пока вы не подтвердите на финальном шаге проверки.

  1. Приветствие и определение — SAMM опрашивает маршрутизатор и показывает, что уже настроено, чтобы вы могли пропустить эти пункты при отправке.
  2. Интерфейс bridge — задайте имя LAN bridge.
  3. Порты bridge — выберите, какие физические интерфейсы войдут в bridge.
  4. DNS — задайте вышестоящие резолверы (пресеты в один клик для Google, Cloudflare, Quad9 и других), размер кэша и, при желании, DNS-фильтр контента.
  5. NTP — источник времени маршрутизатора (клиент NTP, опционально раздача времени в LAN).
  6. Интернет — добавьте одно или несколько WAN-подключений (Static / DHCP / PPPoE).
  7. RADIUS в SAMM — направьте маршрутизатор на ваш хост SAMM для аутентификации, учёта и CoA.
  8. Службы — выберите, создает ли волшебник сервер PPPoE, сервер горячей точки или службу IPoE/DHCP, и по желанию включите двойной стек IPv6 (опционально, отключено по умолчанию): выберите длину префикса делегированного (DHCPv6-PD) и блоки IPv6, и волшебник создаст пулы и прикрепит их к профилю PPP.
  9. Детали PPPoE / Hotspot и брандмауэр — пулы, профили, время аренды, правила брандмауэра и NAT, плюс опциональный пул Expired и блокировка интернета, перенаправляющий истёкших абонентов на страницу SAMM «подписка истекла» вместо мёртвого соединения.
  10. Проверка и отправка — просмотрите точный список команд, которые будут отправлены, затем отправьте их все на маршрутизатор.
Скорость для каждого пользователя приходит из RADIUS Мастер создаёт один профиль PPPoE / hotspot — он не отправляет профили для каждого тарифа. Скорость каждого абонента доставляется SAMM в ответе RADIUS при входе, поэтому смена плана никогда не требует правки маршрутизатора.

Сеть & роутеры

Карта сети, состояние и Data Log

Карта сети

Devices → Network Map строится по тому, что каждый роутер сообщает о своих соседях, — рисовать схему вручную не нужно. Переключайте слои портов, IP-адресов, подсетей и CPU или показывайте путь каждого устройства в интернет. Расставьте узлы и сохраните раскладку; Discover now заново опрашивает соседей.

Состояние сети

Devices → Network Health показывает все роутеры, начиная с худших: исправен, с предупреждениями, отвечает, но неисправен, или недоступен. Каждая находка простыми словами объясняет проблему — CoA отключён, не совпадает секрет RADIUS, часы не синхронизированы, открыт Telnet или FTP. Проверки только читают роутер. В режиме Diagnose роутера для частых находок есть исправление в один клик с предварительным просмотром и возможностью отката. Открытые находки создают оповещения в Alert Center.

Обе страницы включаются одним переключателем в настройках. Когда он выключен, SAMM не обращается к роутерам для них.

Data Log

Откройте пользователя и выберите Data Log, чтобы увидеть, куда идёт его трафик: основные направления по хосту и приложению — YouTube, Facebook, WhatsApp — с отдачей, загрузкой и соединениями, или временную шкалу. SAMM читает экспорт потоков роутера (IPFIX), а при его отсутствии — таблицу соединений, и определяет приложения по тому же каталогу, что и App Filter. SAMM никогда не стоит на пути трафика.

Выключено, пока вы не включите Data Log включает суперадминистратор в настройках и задаёт срок хранения. Цифры ориентировочные; биллинг всегда использует учёт RADIUS.

Сеть & роутеры

CoA & изменения на лету

CoA (Change-of-Authorization) — это то, как SAMM меняет сессию абонента, пока он в сети — чтобы повысить или понизить его скорость либо отключить его — не дожидаясь его переподключения.

Как изменение доходит до активного абонента

SAMM никогда не отправляет изменение на маршрутизатор прямо по нажатию кнопки. Каждое действие администратора идёт по одному безопасному пути:

Действие администратора → Журнал аудита → тик samm-radius → Исходящая очередь CoA → Маршрутизатор
  1. Действие записывается в журнал аудита как команда в очереди.
  2. Служба samm-radius опустошает очередь на своём следующем тике, применяет изменение и — если абонент в сети — ставит в очередь CoA.
  3. Исходящая очередь CoA опустошается, и пакет отправляется на маршрутизатор.

События по времени — истечение срока, границы окон скорости, ежедневные сбросы — питают ту же очередь. Верхняя граница задержки — один тик samm-radius (30 с по умолчанию; уменьшите его в Настройках для более строгого применения).

Гибридный CoA

SAMM сначала отправляет CoA-Update, чтобы изменить сессию на месте. Если маршрутизатор отклоняет его после настроенного числа попыток, SAMM автоматически переходит к Disconnect-Request — абонент переподключается и получает новые настройки. Эта гибридная стратегия работает во всех версиях прошивки MikroTik.

Страница исходящей очереди CoA

Пользователи → Исходящая очередь CoA — это живое отображение этой очереди. samm-radius — единственный отправитель: панель администратора никогда не отправляет CoA напрямую — и она опустошает очередь на каждом тике. Страница автоматически обновляется каждые 30 секунд.

Шесть счётчиков возглавляют страницу — В ожидании, Отправлено, NACK (повтор), Готово, Ошибка и Всего. Фильтруйте таблицу по статусу, по действию (update или disconnect) или ищите по имени пользователя, IP NAS или причине.

СтатусЗначение
в ожиданииВ очереди, ожидает следующего тика samm-radius
отправленоОтправлено (переходное — отправка и её результат записываются в одном тике, строки редко остаются в этом состоянии)
nackМаршрутизатор отклонил CoA-Update — SAMM повторяет попытки, затем переходит к отключению
готовоУспешно применено
ошибкаОтказ после исчерпания лимита попыток — наведите на значок, чтобы увидеть последнюю ошибку

Каждая строка показывает пользователя, маршрутизатор, действие, число попыток, причину, а также время создания и отправки. Действия по строке позволяют Повторить ошибочный или nack-пакет, Отменить ещё выполняющийся или открыть Атрибуты, чтобы изучить точные атрибуты RADIUS, которые несёт пакет. Значок в боковой панели считает строки в ожидании; Панель управления отслеживает ошибки за 24 часа. Исправная система держит эту очередь почти пустой.

Жнец устаревшей сессии

Если маршрутизатор выйдет из строя или потеряет соединение, его пакеты Accounting-Stop могут быть потеряны. и во многих системах эти абоненты остаются «онлайн» навсегда. SAMM опросов по сеансам которые прекратили отправку промежуточных обновлений и автоматически закрывают их (завершить причина Reaped-Stale ), поэтому учитываются список живых сеансов, одновременное использование и данные об использовании остаются правдивыми. Тайм-аут – stale_session_timeout_seconds . настройка (по умолчанию 900 с = 15 минут; установите 0, чтобы отключить), и она вступит в силу в реальном времени — нет необходим перезапуск.

Повседневные операции

Панель управления и активные сессии

Два экрана в разделе Обзор — это то, с чего вы начинаете каждую смену: Панель управления для состояния всей системы, Активные сессии — для того, кто именно подключён прямо сейчас.

Панель мониторинга

Обзор → Панель управления — это главный экран оператора. Селектор периода вверху — Сегодня, 7д, 14д, 30д, 90д — задаёт окно для графика трендов и показателей, ограниченных датами.

Шесть плиток KPI

Каждая плитка — это живой счётчик и ярлык: щёлкните по ней, чтобы сразу перейти к отфильтрованному списку за этим числом.

ПлиткаПоказываетОткрывает
Сейчас в сетиАбоненты с активной сессией RADIUS прямо сейчасПользователи, отфильтрованные по В сети
Активные абонентыАктивные учётные записи, под которыми — общее число абонентовПользователи, отфильтрованные по Активные
ИстёкАбоненты, чья подписка истекла без установленного следующего планаПользователи, отфильтрованные по Истёкшие
Открытые тикетыНерешённые тикеты поддержки (без выполненных и закрытых)Пользователи → Тикеты поддержки
МаршрутизаторыВсего записей NAS, а также число сейчас недоступныхМонитор MikroTik
Неоплаченные счетаСчета, по которым ещё нужно проследить оплатуСчета, отфильтрованные по Неоплаченные

График пользователей и активных сессий

Линейный график на основе ежедневных снимков отображает три ряда за выбранный период — активные пользователи, сессии в сети и истёкшие пользователи — так что рост и отток видны с первого взгляда.

Состояние конвейера

Эта панель — пульс движка применения. В исправной системе очереди держатся на нуле или около него — число, остающееся высоким, указывает на зависшую службу или маршрутизатор, отклоняющий изменения.

МетрикаЧто она означает
samm-radius очередьОжидающие CoA в ожидании следующего тика — должны очиститься за секунды
Сбои CoA (24ч)Ноль в исправной системе; ненулевое число означает, что маршрутизатор отклоняет CoA
Журнал аудита в ожиданииДействия администратора в очереди, ещё не применённые samm-radius
Сессии с ограничением скоростиАбоненты, сейчас удерживаемые на пониженной скорости лимитом — ожидаемо, не ошибка
Снимок сессийЧисло активных сессий — должно совпадать с Сейчас в сети
Активные планыРазмер вашего каталога планов
Путь применения Действия администратора ставятся в очередь в samm.audit_log; тик samm-radius опустошает их и выпускает CoA в samm.coa_outbox. Полный путь описан в CoA и изменения в реальном времени.

Таблицы недавней активности

Четыре таблицы под графиком дают непрерывный обзор того, что только что произошло, каждая со ссылкой Показать все на её полную страницу:

  • Недавняя исходящая очередь CoA — действие, пользователь, статус (готово / в ожидании / nack / ошибка), число попыток, причина и время.
  • Недавние действия администратора — действие, цель, инициатор, применено ли уже, и время.
  • Недавние абоненты — новейшие учётные записи с их статусом и временем последней аутентификации.
  • Маршрутизаторы — каждый NAS с индикатором состояния доступен / недоступен / нет данных.

Активные сессии

Обзор → Активные сессии перечисляет каждого абонента, которого маршрутизаторы сейчас сообщают как находящегося в сети по учёту RADIUS. Страница автоматически обновляется каждые 30 секунд; кнопка ручного Обновления находится в заголовке.

Фильтрация списка

  • Поиск — совпадает с именем пользователя, framed IP или IP NAS, отправляя по мере ввода.
  • Маршрутизатор — сужает список до сессий на одном NAS.
  • Только ограниченные — показать только абонентов, которых лимит удерживает на пониженной скорости.
  • На странице — 20, 50, 100 или 200 строк.

Что показывает каждая строка

СтолбецЗначение
ПользовательИмя пользователя — ссылка на страницу с деталями абонента
Framed IPАдрес, назначенный маршрутизатором этой сессии
МаршрутизаторКороткое имя NAS и его IP-адрес
ТарифТекущий план абонента
Действующая скоростьСкорость, применённая на маршрутизаторе прямо сейчас — скорость плана, скорректированная любым активным окном скорости. Значок с ограничением означает, что лимит удерживает абонента на пониженной скорости.
Приём / ПередачаЖивые счётчики байтов для сессии
В сетиКак долго длится сессия
НачатаКогда началась сессия

Отключение сессии

Кнопка Отключить в строке ставит в очередь CoA-Disconnect именно для этой сессии (причина admin_manual) после запроса подтверждения. Абонент отключается немедленно; если его учётная запись всё ещё активна, он может свободно переподключиться. Отслеживайте пакет в Исходящей очереди CoA.

Повседневные операции

Отчёты и аналитика

Обзор → Отчёты — это аналитическое представление: тренды абонентов, трафик во времени и самые нагруженные пользователи и карты в вашей сети.

Выбор диапазона

Каждый показатель на странице привязан к диапазону дат. Выберите пресет — 7д, 14д, 30д, 90д — или введите явные даты начала и конца и нажмите Применить. Наложение загрузки закрывает страницу, пока выполняется длинный запрос, например 90д.

Тренды абонентов и сессий

Линейный график с тремя рядами за выбранный диапазон: Активные абоненты, сессии В сети и Истёкшие абоненты. Используйте его, чтобы замечать рост, отток и часы пиковой нагрузки вашей сети.

Ежедневный трафик

Столбчатая диаграмма с накоплением байтов передачи и приёма за день. При наведении на день показываются показатели передачи и приёма, а также объединённый итог в нижней части подсказки.

Списки Топ-10

Четыре таблицы выводят учётные записи с наибольшим трафиком, каждая ранжирована по объёму в ГБ:

СписокРанжирует
Топ-10 приёма за сегодняНаибольший приём с момента последнего ежедневного сброса
Топ-10 передачи за сегодняНаибольшая передача с момента последнего ежедневного сброса
Топ-10 приёма за месяцНаибольший приём за этот календарный месяц
Топ-10 передачи за месяцНаибольшая передача за этот календарный месяц

Трафик по объектам

Таблица трафика по учётным записям с постраничной разбивкой и поиском. Две вкладки переключают то, что она перечисляет:

  • Пользователи — каждый абонент с его именем, планом, сегодняшними передачей/приёмом в МБ и передачей/приёмом за этот месяц в ГБ.
  • Карты — каждая карта hotspot с её группой, статусом и той же разбивкой трафика за сегодня / месяц.

Поле поиска фильтрует таблицу по мере ввода; селектор на странице принимает от 20 до 200 строк. Каждая строка ведёт на страницу с деталями этого абонента или карты.

Экспорт Отчёты — это экранное аналитическое представление. Для получения сырых строк для обработки в электронной таблице используйте Инструменты → Экспорт / Импорт, чтобы скачать пользователей, планы или NAS в формате CSV / XLSX.

Повседневные операции

Учёт & выставление счетов

В SAMM встроена полная система двойной бухгалтерии — счета, расходы, поступления, платежи, реселлеры, основные средства и полные финансовые отчёты. Не нужно интегрировать отдельный биллинговый продукт и не нужен бухгалтер, чтобы вести книги в порядке.

Вы никогда не касаетесь дебетов и кредитов Каждое действие — запись платежа, добавление расхода, продажа группы карт — автоматически проводит сбалансированную запись в журнал в главную книгу. Вы работаете простыми понятиями (счета, расходы, поступления); SAMM ведёт двойную бухгалтерию за кулисами и доказывает её сбалансированность в Оборотно-сальдовой ведомости.

Страница Бухгалтерия разбита на одиннадцать вкладок.

Обзор

Финансовый снимок. Четыре ключевых показателя расположены вверху:

ПоказательЗначение
Наличные в кассеОбщий баланс по всем кассовым и банковским счетам
Деньги, которые вам должныДебиторская задолженность — неоплаченные счета клиентов и реселлеров
Деньги, которые должны выКредиторская задолженность — неоплаченные расходы
Прибыль за этот месяцДоходы за вычетом расходов за текущий месяц

Ниже: таблица каждого кассового и банковского счёта с его балансом и график доходов и расходов за последние 1, 2, 3, 6 или 12 месяцев.

Счета

Счёт — это документ на оплату, который вы выставляете. Нажмите Новый счёт и заполните:

ПолеЗначение
КлиентПоиск с автодополнением для учётной записи, которой выставляется счёт
Категория доходаНа какой счёт доходов проводится продажа
Дата выставления / срока оплатыПустая дата выставления = сегодня; пустой срок оплаты = дата выставления
Налоговая ставка % / налоговая группаПо умолчанию — ставка из Настройки → Billing; назначьте группу налогов, чтобы применять несколько ставок (НДС/НДС и др.) одновременно, каждая из которых будет учитываться по отдельному налоговому счету
ПозицииОдна или несколько строк описание / количество / цена за единицу — промежуточный итог, налог и итог вычисляются на лету

Сколько взимать плату — полную, сегментированную или ничего

В любом случае, когда SAMM готов выставить счет абоненту — при активации, обновлении, изменении тарифа, продлении срока действия или выполнении любой из этих действий в массовом порядке — появляется один и тот же селектор счета с указанием суммы, который отображает стоимость до того, как вы подтвердите действие.

ВыборСколько это стоит
Полный счетТолько целые плановые периоды — частичный период округляется до целого.
Сегментированный счетТочное время, пропорционально последнему периоду. Общая сумма округляется до ближайшего целого значения, а разница учитывается как корректировка округления, чтобы книги оставались сбалансированными.
Нет счета-фактурыПоменяйте услугу и ничего не взимайте — продление гудвилла, миграция, исправление.

Установите длину с помощью множителя периодов для всех периодов тарифа или введите точную дату, и SAMM сам рассчитает стоимость. В любом случае панель отображает позиции строки, налог и общую сумму при их изменении, а Оплаченно фиксирует денежный платеж за полную сумму сразу.

«Нет счета»; это право, а не флажок Ничего не взимать — это финансовое решение, поэтому оно ограничено разрешением для каждой роли в Настройки → Администраторы . Это важнее всего с агенты : агент, чьи подписчики выставляют счета на свой собственный предоплаченный баланс. в противном случае можно было бы продлить, изменить планы и продлить срок действия на весь день, даже не заплатив за их. Для новых ролей право отключается .

Даннинг & предоплаченный кошелек

SAMM автоматизирует весь процесс взыскания, выходя за рамки одноразовых счетов. Расписание дуннинга устанавливает день выставления счета, срок оплаты и автоматический блокировочный день — с возможностью начисления штрафных санкций за просрочку — чтобы напоминать подписчикам о просроченных платежах и отключать их без вашего участия в ведении таблицы. Режим предоплаты позволяет подписчикам иметь баланс, который автоматически погашает счета при продлении; они пополняют его сами через портал клиента картой или криптовалютой, а все пополнения и списания отражаются в бухгалтерской книге.

Счета также генерируются автоматически, когда план абонента продлевается (по действию Продлить срок пользователя или автопродлением), при условии, что у плана есть цена. Список фильтруется по статусу — неоплачен, частично, к оплате, оплачен — и ищется по номеру счёта или клиенту. Откройте любой счёт для его страницы с деталями и печатного PDF; абоненты могут скачать свои копии из клиентского портала и Telegram-бота.

Расходы

Расход — это деньги, потраченные на работу ISP. Новый расход записывает категорию (счёт расходов), оплаченного поставщика, сумму, дату возникновения и необязательный срок оплаты. Каждый расход имеет тот же жизненный цикл неоплачен / частично / к оплате / оплачен, что и счёт, страницу с деталями и печатный PDF ваучера.

Поступления и платежи

Эти две вкладки записывают фактическое движение денег — в отличие от счёта или расхода, который его вызвал.

  • Поступления — деньги на входе: наличные, полученные от клиента, реселлера или иного дохода, поступающие на один из ваших кассовых счетов. Счёт — это документ на оплату; поступление — это деньги, поступившие по нему.
  • Платежи — деньги на выходе: наличные, уплаченные по расходу или реселлеру.

Запись поступления или платежа продвигает связанный счёт или расход к статусу оплачен и проводит соответствующую запись в главную книгу.

Клиенты и продажи карт

Вкладка Клиенты перечисляет текущий баланс каждого клиента — то, что он вам должен. Продажи карт охватывают предоплаченную выручку hotspot: она отслеживает проданные группы карт и реселлеров. Реселлер покупает у вас целые группы карт по счёту, затем перепродаёт отдельные карты конечным пользователям; их задолженность — это то, что они ещё должны вам заплатить.

Агенты — оптовый биллинг

Агент перепродаёт вашу услугу конечным клиентам по модели предоплаченного опта — представьте франшизу или субдилера, который ведёт собственную базу абонентов, но работает в вашей сети. Это полностью необязательно: если вы не создаёте агентов, биллинг работает ровно так же, как и раньше.

Два долга, чётко разделённые Агент должен вам оптовую цену (в ваших книгах это ваша выручка); клиент должен агенту розничную цену (вне ваших книг — это собственная дебиторка агента). Ваша комиссия — это разница между ними, проводимая как торговая скидка, а не как расход.

Создайте агента в Настройки → Администраторы, назначив новому администратору встроенную роль Агент. Агент — это администратор с ограниченной областью видимости, у которого есть:

НастройкаЗначение
Комиссия %Доля агента от розничной цены (например, 40% — вы оставляете себе 60% как оптовую выручку). Настраивается для каждого агента в любой момент.
Кредитный лимитНасколько предоплаченный баланс агента может уйти в минус, прежде чем продления будут отклонены. Установите 0 для строгой предоплаты.
Предоплаченный балансПополняйте его, когда агент платит вам; каждое продление списывает с него оптовую цену.

Когда один из абонентов агента продлевается, SAMM списывает с баланса агента оптовую цену, проводит вашу выручку и выставляет реальный розничный счёт конечному клиенту, оплачиваемый агенту и остающийся вне вашей книги. Взыскание на стороне агента — со своим переключателем в Настройки → Биллинг, включённым по умолчанию, с настраиваемым льготным периодом — автоматически приостанавливает неплатящего клиента (отправляя разрыв CoA); когда агент фиксирует оплату клиента, абонент реактивируется мгновенно.

Агент входит в ограниченное представление: собственную панель, страницу кошелька Мой баланс, список Мои клиенты со счетами и платежами каждого клиента и Моя выписка — всё ограничено его собственной книгой. Общие книги компании, другие агенты и клиенты других администраторов остаются скрытыми.

Активы и кассовые счета

  • Активы — регистрируйте основные средства (маршрутизаторы, транспорт, оборудование). SAMM отслеживает их стоимость и амортизацию во времени.
  • Касса — управляйте вашими кассовыми и банковскими счетами и вашими счетами капитала: собственный капитал, где взнос — это деньги, которые владелец вкладывает в бизнес, а изъятие — это деньги, взятые из него. Капитал не является выручкой и никогда не появляется в Отчёте о прибылях и убытках.

Отчёты — финансовая отчётность

Вкладка Отчёты — это представление бухгалтера. Пять отчётов, каждый с диапазоном дат и экспортом в PDF:

ОтчётОтвечает на вопрос
Прибыли и убыткиДоходы против расходов и чистая прибыль за диапазон дат. По методу начисления — доход учитывается при выставлении счёта, расходы при возникновении, а не при движении денег.
Бухгалтерский балансНа дату: то, чем вы владеете (активы), против того, что вы должны (обязательства) плюс капитал. Значок сбалансировано подтверждает, что обе стороны совпадают.
Движение денежных средствПо каждому кассовому счёту — начальный баланс, деньги на входе, деньги на выходе, конечный баланс за диапазон.
Анализ по срокамНепогашенная дебиторская и кредиторская задолженность, распределённая по возрастным группам, чтобы вы могли требовать оплату просроченных счетов и опережать платежи.
РасширенноеСырые книги: Главная книга (каждая строка по одному счёту с текущим сальдо), Оборотно-сальдовая ведомость (проверка сбалансированности книг), Журнал и журнал активности.
Проверка сбалансированности В Оборотно-сальдовой ведомости столбцы дебета и кредита каждого счёта должны в сумме быть равны — это доказательство того, что книги в порядке. Если она когда-либо не сбалансирована, это указывает на ошибку проводки, которую стоит расследовать.

Экспорт в бухгалтерскую программу

В разделе Бухгалтерия → Отчёты → Экспорт скачайте книги в CSV для QuickBooks, Xero или любой таблицы: Общий журнал, План счетов, Счета, Оборотная ведомость, Прибыли и убытки и Баланс. Общий журнал, Счета и P&L используют диапазон дат; остальное — на сегодняшний день. Те же данные доступны через API по адресу GET /api/v1/accounting/export/{kind} (format=json|csv, право accounting:read) для BI-конвейеров и Zapier. Экспорт исключает аннулированные записи, поэтому выгрузка всегда сходится с отчётами на экране.

Повседневные операции

Отменить & одобрения

Большинство ошибок в панели ISP — это ошибки с деньгами: неправильное продление подписки, двойное учетное запись оплаты, изменение тарифа на неверном аккаунте. SAMM предоставляет вам пятиминутное окно отмены для этих действий, а — при возврате денег — проверку суперадминистратора перед вступлением в силу.

Окно отмены

Каждое действие администратора, связанное с перемещением средств или изменения состояния, фиксируется в реальном времени. В течение следующих пяти минут верхняя панель отображает кнопку Отменить и список истории действий — нажмите стрелку, чтобы отменить последнее действие, или откройте историю и вернитесь к любому моменту в окне. Повторить вернет его обратно.

Почему всего пять минут Отмена — это не машина времени, а страховка для только что сделанного клика. Прошло несколько минут, и мир изменился: абонент был онлайн, счет-фактура было оплачено, кто-то другой отредактировал запись. SAMM скорее откажется, чем промолчит перезаписать историю, чтобы этот шаг просто покидал вашу историю при закрытии окна.

Отмена отменяется (с указанием причины на экране), когда реверсирование уничтожает то, что оно не создавало:

ОтказЧто она означает
Этой записи больше не существуетПосле вашего действия абонент, счет или платеж были удалены — вернуть уже нечего.
Эта запись снова существуетЧто-то было воссоздано на своем месте; отмена приведет к перезаписи новой записи.
Эта запись изменилась после вашего действияТем временем кто-то другой отредактировал его — отмена автоматически отменит его редактирование.
Этого шага больше нет в вашей историиПятиминутное окно закрылось.

Отменить — это отмена действия, а не удаление: исходное действие и его отмена сохраняются в журнале аудита, поэтому информация о том, что произошло, никогда не теряется. Действия, создающие что-то, предупреждают вас прямо — отмена этого действия приведёт к удалению созданного — перед их выполнением.

Ворота утверждения агента

Агент оплачивает подписку из своего собственного предоплаченного баланса в момент активации. Это делает возврат действием, способом получения денег обратно — и способом мошенничества: активируйте подписку, дайте им использовать весь месяц, а затем удалите их в последний день и верните зарядку.

Таким образом, SAMM разделяет действия агента по направлениям движения денег:

НаправлениеПримерыПоведение
Стоит агенту денег Активировать, продлить, изменить план, получить оплату от клиента Немедленный. Повседневная работа агента никогда никого не ждет.
Деньги вернули руками Отменить действие, удалить подписчика, удалить счет, аннулировать сбор Припарковался по просьбе. Ничего не изменится, пока суперадмин не одобрит это.

Защищённые действия не выполняются наполовину. Запрос сохраняется со всеми необходимыми данными для его последующего выполнения, и при одобрении он воспроизводит тот же код, который должен был запустить агент — никогда не повторное выполнение, которое могло бы отклониться от первого. Отклонение оставляет мир таким же, как и был, а агент сохраняет ответственность.

Работа с очередью

Запросы поступают в Бухгалтерия → Утверждение агентов вместе с агентом, действием, к чему он относится и сколько денег возвращает — числом, принимающим решение. Фильтруйте по агенту или статусу, ищите, отмечайте несколько и утверждайте или отклоняйте их вместе; отклонение может содержать краткое обоснование, которое видит агент.

Делегируйте это Проверка агентов в течение всего дня редко является обязанностью суперадминистратора. Право утверждения агентов может быть предоставлено любому ролю в Настройках → Администраторы, поэтому человек, который фактически выполняет проверку, получает именно такие полномочия — и ничего больше. Создание и управление агентами остается привилегией суперадминистратора. Никто не может самостоятельно принимать решения по своим запросам.

Что видит агент

Агент получает страницу Мой аккаунт → Ожидающие одобрения, где перечислены все их запросы: что всё ещё ожидает одобрения, а что было одобрено или отклонено — с указанием причины рецензента. Без этого отказ будет неотличим от запроса, который просто исчез, и они будут просто спрашивать снова.

Они могут отозвать свои собственные ожидающие запросы — по одному или несколькими одновременно — так как запрос, который нельзя отозвать, сам по себе является ловушкой. Отозванный запрос никогда не выполнялся, поэтому ничего не меняется; решённый запрос — история и остаётся. Фактор, ожидающий проверки, также об этом указывает на своей странице, поэтому агент, который нажал Удалить и ничего не произошло, понимает, почему.

Для ваших абонентов

Онлайн платежи

SAMM может позволить вашим подписчикам оплачивать счета онлайн с помощью банковской карты (Stripe или PayPal) или криптовалюты/USDT (Binance). Когда подписчик оплачивает счет, SAMM помечает его как оплаченный, регистрирует в вашей бухгалтерии и автоматически восстанавливает доступ тем, кто был отключен за неплатежи. Вам никогда не начисляются комиссии: каждый шлюз использует ваш собственный аккаунт, поэтому деньги напрямую поступают к вам.

Включите его (любой шлюз)

  1. Откройте Финансы → Онлайн-платежи (доступно только суперадминистратору).
  2. Нажмите на шлюз, чтобы расширить его — Stripe, PayPal или Binance / USDT.
  3. Заполните его поля, поставьте флажок у "Включить этот шлюз" и нажмите "Сохранить". SAMM не позволит вам сохранить, пока не будут заполнены необходимые поля.
  4. Нажмите Запустить тест, чтобы подтвердить, что ваши учетные данные работают.
  5. Вы завершили настройку — теперь в портале на неоплаченных фактурах (и на странице "Истекшая подписка") ваши подписчики видят кнопку Оплатить.

Вы можете включить более одного шлюза — абонент выбирает, какой использовать.

Stripe – банковские карты по всему миру.

  1. Создайте бесплатный аккаунт на stripe.com. Оставьте Тестовый режим включённым, пока вы его тестируете.
  2. Перейдите в Разработчики → Ключи API и скопируйте Секретный ключ (он начинается с sk_).
  3. В SAMM расширите Stripe, вставьте Секретный ключ, выберите валюту и счет, на который будут поступать средства, затем Сохранить и Проверить тест.
  4. Рекомендуется: добавьте вебхук для надежного подтверждения платежей. В Stripe перейдите на Разработчики → Вебхуки → Добавить конечную точку, установите URL-адрес на https://YOUR-SAMM/pay/webhook/stripe, выберите событие checkout.session.completed, затем скопируйте секрет подписи вебхука (whsec_…) в поле Секрет подписи вебхука в SAMM.
Выход в эфир Тестовый режим работает где угодно. Для получения реальных денег через Stripe требуется Stripe -поддерживаемый страна и связанный банковский счет.

PayPal – карты и усилители; PayPal баланс

  1. Создайте учетную запись PayPal Business, затем на developer.paypal.com создайте REST приложение и скопируйте его ID клиента и секрет.
  2. В SAMM расширите PayPal, вставьте ID клиента и секрет клиента, выберите Sandbox (тестирование) или Живой, затем Сохранить и Запустить тест.
  3. Рекомендуется: добавьте вебхук на developer.paypal.com → вашу приложение → Вебхуки, URL https://YOUR-SAMM/pay/webhook/paypal, подпишитесь на CHECKOUT.ORDER.APPROVED и PAYMENT.CAPTURE.COMPLETED, затем вставьте ID вебхука в SAMM, чтобы входящие уведомления были криптографически проверены.

Binance / USDT — криптовалюта, работает везде, банк не нужен

Это лучший вариант, когда карты и PayPal недоступны. Ваши подписчики отправляют USDT; SAMM отслеживает ваш аккаунт Binance и автоматически помечает счет-фактуру как оплаченный. Вам нужны три вещи: API-ключ, API-секрет и место для получения — адрес кошелька и/или ID Binance Pay.

Шаг 1. Создайте ключ API только для чтения.

Безопасность прежде всего Создайте ключ с только правами чтения. Никогда не включайте функции Вывод или Трейд — SAMM нуждается только в чтении входящих платежей, никогда не перемещайте средства.
  1. Войдите в Binance → откройте Аккаунт → Управление API (или найдите "Управление API").
  2. Нажмите Создать API → выберите Генерация системой → назовите его, например, "SAMM" → завершите проверку безопасности.
  3. Binance показывает ключ API и секретный ключ — скопируйте оба сейчас (секрет отображается только один раз).
  4. Нажмите Редактировать ограничения и оставьте отмеченным только Включить чтение. Отключите Торговлю по спот-рынку и Выводы. (Опционально: ограничьте ключем IP-адрес вашего сервера.)
  5. Вставьте API-ключ и API-секрет в карту Binance SAMM (ключ сначала, затем секрет — в том же порядке, как их показывает Binance).

Шаг 2 — получите адрес получающего кошелька

  1. На Binance перейдите в Кошелек → Спот → Вклад (Вклад криптовалюты).
  2. Выберите криптовалюту USDT.
  3. Выберите сеть — TRC20 — самый дешёвый и распространённый вариант; также работают BEP20 и ERC20. Используйте тот же, что выбрали в SAMM.
  4. Скопируйте адрес вклада и вставьте его в поле адреса для приёма на цепочке в кошельке SAMM. Убедитесь, что выпадающий список сети в SAMM соответствует выбранной вами сети.

Шаг 3 — (необязательно) Binance Идентификатор платежа

Для подписчиков, предпочитающих Binance Pay (мгновенный, без сетевых комиссий): в приложении Binance откройте раздел Pay и запишите свой Pay ID (также можно использовать электронную почту или номер телефона). Вставьте его в поле ID Binance Pay в SAMM. Подписчики могут оплачивать как через Pay ID, так и через транзакции на блокчейне.

Наконец, поставьте флажок Включить, нажмите Сохранить, затем запустите Тест (он проверяет, что ключ может читать ваш аккаунт). Вы активны.

Точная сумма, правильная сеть Абонент должен отправить точную сумму, которую показывает SAMM (последние маленькие цифры идентифицировать свой счет) в правильной сети . Другая сумма или неправильная сеть задержит или потеряет платеж.

Что видит абонент

  1. Они входят в клиентский портал → Мои счета.
  2. На неоплаченной квитанции они нажимают Оплатить (или "Оплатить · Stripe" / "Оплатить · Binance", если несколько опций активировано).
  3. Карта: они перенаправляются на защищённую страницу шлюза. USDT: они видят точную сумму, ваш адрес с QR-кодом и/или ваш идентификатор платежа.
  4. После оплаты счет становится Оплаченным , он публикуется в ваших книгах, а если срок их действия истек, они автоматически повторно подключаются — подписчики с истекшим сроком действия даже получают кнопку «Оплатить и переподключиться» на странице с истекшим сроком действия.
Ваши книги остаются точными При каждом онлайн-платеже проводится одна сбалансированная двойная запись (Dr Cash / Cr Дебиторская задолженность) и записывает метод ( Stripe / Binance ) в счете, в истории платежей и в PDF-файле, чтобы вы всегда знать, как поступил каждый платеж.

Повседневные операции

Заявки в поддержку

В SAMM встроена служба поддержки. Абоненты создают заявки из клиентского портала или Telegram-бота, администратор может открыть заявку от имени абонента, а ваша команда работает со всеми ими из Пользователи → Заявки в поддержку.

Очередь заявок

Очередь перечисляет каждую заявку — номер, клиент, тема, приоритет, статус, даты открытия и последнего обновления и число сообщений. Фильтруйте её с помощью:

  • Чипы статуса — по одному на статус заявки, каждый несёт живой счётчик, так что нагрузка видна с первого взгляда.
  • Приоритет — Обычный, Умеренный или Критический.
  • Активные / Отозванные — клиент может отозвать заявку, которая ему больше не нужна; отозванные заявки затемнены и скрыты по умолчанию.
  • Поиск — по номеру заявки, теме или клиенту.

Значок в боковой панели считает открытые заявки, чтобы ничего не было упущено.

Открытие заявки

Новая заявка позволяет администратору создать заявку для выбранного клиента — выберите клиента, затем задайте тему, приоритет и описание. Абоненты также открывают свои собственные из клиентского портала или Telegram-бота.

Работа с заявкой

Откройте заявку, чтобы прочитать всю цепочку переписки. Оттуда вы можете:

  • Ответить клиенту — публичное сообщение, которое абонент видит на своём портале и через Telegram-бота.
  • Добавить внутреннюю заметку — сообщение только для персонала, скрытое от клиента, для передаточных заметок внутри вашей команды.
  • Изменить статус и приоритет заявки.

Щёлкните правой кнопкой по любой строке — или используйте её кнопку ⋮ — для тех же действий со статусом, приоритетом, ответом и внутренней заметкой, не покидая очередь.

Повседневные операции

Центр уведомлений

SAMM автоматически информирует подписчиков по электронной почте , Telegram , SMS и WhatsApp — и позволяет транслировать сообщения. Служба samm-notification доставляет все через одну регулируемую очередь. Страница Система → Центр уведомлений содержит шесть вкладок.

Обзор

Начальная вкладка — живые счётчики (в очереди, отправляется, отправлено сегодня, ошибка, пропущено, отписались), состояние каждого канала доставки и лента самых недавних уведомлений.

Каналы

Настройте способ отправки сообщений SAMM . Электронная почта использует собственное уведомление.\n учетную запись, хранящуюся отдельно от SMTP для восстановления пароля в Настройки . Telegram использует токен бота, SMS проходит через общий HTTP-шлюз или Twilio, и WhatsApp использует официальный Meta WhatsApp Cloud API (созданный в Meta для\n Разработчики) с дополнительным неофициальным QR-мостом на свой страх и риск — мост\n устанавливается в один клик на сервер с чистой ОС и поставляется в виде готового к использованию контейнера на Docker .\n Все секреты канала сохраняются\n Зашифровано Fernet. Каждый подписчик на клиентском портале выбирает, какие каналы он хочет\n хотите и можете полностью отказаться.

Сообщения

Шаблоны сообщений, по одному набору на событие. Отредактируйте текст любого уведомления — напоминания о продлении, поступления и остальное — чтобы каждое сообщение уходило вашим собственным голосом и на вашем языке.

Правила и таймеры

Эта вкладка управляет тем, когда и как срабатывают автоматические уведомления. Для каждого события вы управляете:

  • Включено ли правило (вкл).
  • Игнорировать отписку — когда установлено, сообщение доходит до каждого абонента, даже если он отписался. Оставьте это для важных транзакционных сообщений.
  • Тайминг — например, за сколько дней до истечения срока отправляется напоминание о продлении.
  • Доставка и ограничение скорости — воркер опустошает очередь по одному пакету за тик; размер пакета и интервал тика вместе задают темп отправки сообщений, так что большая рассылка никогда не перегружает ваш почтовый сервер.

События, которые SAMM может выпускать самостоятельно, включают напоминание о продлении (перед истечением подписки), уведомление об истечении (когда она истекает), предупреждение о квоте (когда лимит трафика подходит к концу), квитанцию об оплате (когда записан платёж) и план продлён.

Рассылка

Отправьте разовое сообщение — окно технического обслуживания, изменение цены — выбранному набору абонентов. Рассылка проходит через ту же очередь с ограничением скорости, что и автоматические уведомления.

Исходящие

Каждое сообщение, которое SAMM поставил в очередь или отправил, со статусом доставки по каждому сообщению, чтобы вы могли подтвердить, что уведомление дошло до абонента, или увидеть, почему оно не дошло.

Система

WireGuard VPN

SAMM может запускать сервер WireGuard VPN на хосте SAMM — обычно для удалённого административного доступа к машине SAMM и управляющего доступа к MikroTik за ней. Он управляется полностью из Система → VPN; shell не нужен.

Вкладка сервера

  1. Нажмите Сгенерировать ключи, чтобы создать пару ключей сервера. Открытый ключ сервера появляется после генерации — он нужен клиентам.
  2. Задайте Порт прослушивания (UDP, по умолчанию 51820), Адрес туннеля сервера (CIDR на интерфейсе wg0, по умолчанию 10.254.254.1/24) и Диапазон IP клиентов — начальный и конечный адреса, которые SAMM автоматически выдаёт новым пирам.
  3. Включите Включить WireGuard VPN и нажмите Сохранить — SAMM поднимает интерфейс wg0. Переключатель заблокирован, пока не появятся ключи сервера.

Вкладка клиентов

Нажмите Добавить клиента, дайте пиру имя, и SAMM назначит ему следующий адрес из диапазона клиентов. Для каждого пира вы можете скачать его файл конфигурации, отсканировать QR-код с помощью мобильного приложения WireGuard или скопировать готовые команды MikroTik RouterOS, чтобы вывести маршрутизатор на VPN. Пиры можно включать/выключать или удалять; цвета статуса показывают, подключён ли каждый, устарел или никогда не был виден.

Перегенерация ключей разрушительна Перегенерация ключей меняет пару ключей сервера. Каждая уже развёрнутая конфигурация клиента содержит старый открытый ключ сервера и перестанет подключаться, пока вы не раздадите заново обновлённую конфигурацию. Интерфейс защищает это диалогом с вводом для подтверждения.

Система

Туннель Cloudflare

Туннель Cloudflare Zero Trust публикует SAMM в публичный интернет без открытия каких-либо портов firewall — полезно, когда хост SAMM находится за NAT. Он управляется из Система → Cloudflare Tunnel.

Статус службы

Страница открывается на карточке статуса, которая сообщает состояние коннектора:

СостояниеЗначение
РаботаетТуннель активен и передаёт трафик
ОстановленНастроен, но сейчас не работает
Не настроенБинарный файл присутствует — вставьте токен для настройки
Не установленПерезапустите install.sh, чтобы установить бинарный файл cloudflared

Она также показывает версию cloudflared и настроен ли коннектор на автозапуск при загрузке.

Настройте туннель

  1. В панели Cloudflare Zero Trust (one.dash.cloudflare.com) откройте Networks → Tunnels и Create a tunnel.
  2. Выберите коннектор Cloudflared, назовите туннель и сохраните. На шаге установки скопируйте только токен — длинную строку после --token.
  3. Вставьте его в SAMM и нажмите Настроить туннель. SAMM передаёт токен cloudflared и запускает коннектор.
  4. Вернувшись в Cloudflare, добавьте Public hostname: выбранный вами адрес, тип HTTP, URL localhost:80 (проксируется nginx — рекомендуется) или localhost:8000 (напрямую к API).

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

Никаких открытых портов, токен никогда не хранится в базе данных Туннель устанавливает исходящее соединение с edge-узлом Cloudflare — на сервере никогда не открывается ни один порт firewall. Токен передаётся cloudflared и хранится в /etc/cloudflared/; SAMM никогда не сохраняет его в базе данных. TLS завершается на edge-узле Cloudflare, поэтому сам SAMM работает по обычному HTTP на loopback.

Система

Настройки

Система → Настройки содержит живые, перезагружаемые на лету параметры. Демоны перечитывают их на своём следующем тике — перезапуск службы не нужен. Настройки организованы в вкладки.

Общие параметры

НастройкаПо умолчаниюУправляет
samm-radius interval30 sКак часто оцениваются события по времени и отправляются CoA
samm-worker interval5 sПериодичность ping маршрутизатора + синхронизации MikroTik API
Промежуточный интервал учёта60 sИнтервал учёта, отправляемый на маршрутизаторы
Время ежедневного сброса00:00Когда обнуляются счётчики ежедневного использования
Часовой пояс сервераUTCЧасовой пояс для окон скорости и ежедневного сброса
Порт CoA по умолчанию3799UDP-порт по умолчанию для пакетов CoA
Максимум повторов CoA3Число повторов перед переходом к Disconnect-Request

Уменьшите интервал samm-radius для более строгого применения; увеличьте его, чтобы снизить нагрузку.

Данные провайдера, логотип, валюта и биллинг (вкладка ISP)

Всё, о чём операторы спрашивают «где это поменять?», находится в System → Settings → ISP. Измените поле и нажмите Сохранить — изменение действует сразу (без перезапуска) и попадает в счета, квитанции, PDF и клиентский портал.

Что вы меняетеГде отображается
Название провайдераСчета, квитанции, карты hotspot, шапка портала
Телефон и e-mail поддержкиСчета и печатные карты hotspot
Налоговый / регистрационный номерПечатается на счетах
Логотип провайдера (загрузить PNG/JPEG)Автоматически масштабируется; появляется в PDF счетов/квитанций и на печатных картах hotspot. Чтобы удалить, нажмите ✕ на превью.
Код валюты (напр. USD)Валюта ISO на счетах и в книге учёта
Символ валюты (напр. $)Каждая сумма в админ-интерфейсе, клиентском портале и PDF
Налог вкл/выкл, метка и ставкаДобавляет строку VAT/GST в счета (напр. метка VAT, ставка 11 = 11%)
Изменить символ валюты Чтобы сменить валюту, отображаемую везде (напр. с $ на £ или местный символ), задайте Символ валюты на вкладке ISP и сохраните — обновятся админ-панель, клиентский портал и все PDF сразу. Рядом задайте Код валюты (USD, EUR, …) для кода ISO на счетах.

Конфиденциальность — анонимная статистика установок

Когда SAMM проверяет наличие обновлений, он может отправить SecuryTik случайный идентификатор установки, версию SAMM, уровень вашего тарифа и приблизительную страну (определяемую по вашему IP-адресу через Cloudflare) — без передачи данных подписчика или клиента. Это помогает нам подсчитывать активные установки и приоритизировать поддержку и языки. Вы можете отключить эту функцию в любое время в разделе Система → Настройки → Конфиденциальность; см. политику конфиденциальности.

Вкладка Email

Настройте SMTP-сервер, используемый для кодов восстановления пароля, отправляемых администраторам и клиентам (хост, порт, SSL/STARTTLS, имя пользователя, адрес отправителя, пароль). Нажмите Проверить соединение, чтобы проверить учётные данные без отправки почты.

Две учётные записи email Вкладка Email здесь предназначена только для OTP / восстановления пароля. Учётная запись, используемая для уведомлений клиентам, настраивается отдельно в Центре уведомлений.

Система

Администраторы, филиалы и роли

В System → Admins вы решаете, кто может входить в админ-портал, что может делать каждый и каких пользователей он видит. С версии 5.1.0 администраторы образуют дерево филиалов и сотрудников. На странице две вкладки: Admins и Roles.

Филиалы и сотрудники

УзелЧто это
ФилиалМесто — офис, город. Ему принадлежат созданные в нём пользователи. Под филиалом никто не входит: у него нет ни пароля, ни роли.
Администратор (сотрудник)Человек, который входит в систему. Размещённый под филиалом, он его сотрудник: каждый созданный им пользователь и карта принадлежат этому филиалу.
СуперадминВсегда на вершине дерева, никогда не под филиалом. Видит всё и может всё.

Стройте дерево кнопками + Branch и + Admin, а чтобы переместить узел, перетащите его на другой. Администраторы могут быть только под филиалом. Агент — это администратор, который продаёт и владеет тем, что продаёт; сотрудники под агентом используют его кошелёк и правила одобрения.

Кто что видит

Видимость следует дереву. Филиал — и все, кто в нём работает, — видит своих пользователей и пользователей филиалов ниже, но никогда соседний филиал или филиал выше. Центральный офис видит всё. Права администратора никогда не превышают того, что разрешают вышестоящие, и он может выдать только то, что есть у него самого.

Лимиты по филиалам

ЛимитЧто считается
Макс. пользователейСколько пользователей может быть у филиала и филиалов под ним. Удаление пользователя освобождает место.
Макс. картСколько карт хотспота можно напечатать в филиале.

Новый пользователь или карта отклоняется, если достигнут любой лимит на уровне создающего администратора или выше; сообщение называет лимит и остаток. Оставьте пустым — без лимита. Оба можно изменить позже в окне редактирования.

Роли и разрешения

Роль даёт доступ по разделам. SAMM поставляется с четырьмя готовыми ролями, которые можно изменить или удалить, — Manager (повседневная работа), Reseller, Accountant (финансы) и Monitor (только чтение), — и двумя заблокированными встроенными ролями: superadmin (полный доступ) и Agent, превращающей администратора в оптового реселлера с предоплаченным балансом и разделом комиссии (см. Бухгалтерия и биллинг → Агенты).

Для каждого раздела SAMM (пользователи, тарифы, роутеры, бухгалтерия, настройки и т. д.) роль получает один из трёх уровней:

УровеньЗначение
Не разрешеноОбласть полностью скрыта из боковой панели
ПросмотрДоступ только для чтения
РедактированиеПолный доступ — создание, изменение, удаление

Admins & roles, Tools, API и Payments остаются за центральным офисом, что бы ни говорила роль.

Два права находятся рядом с уровнями территорий, потому что каждое из них является денежным решением, а не экраном:

ВерноЧто это позволяет
Разрешить «Нет счета»; Изменить услугу пользователя — продлить, сменить тариф, увеличить срок — ничего не списывая. По умолчанию выключено для каждой новой роли.
Разрешить одобрение агентов Проверьте и решите запросы агентов на отмену платежа. Создание и управление агентами доступно только суперадминистраторам. См. Отменить & одобрения.

Роли также можно разрешить видеть всех пользователей и все карты системы независимо от дерева. Если это выключено, роль видит свой филиал и филиалы под ним.

Приборную панель никогда не убирают В какой бы роли ни было отказано, каждый администратор сохраняет свою собственную панель управления и профиль. вход в систему, который приводит к ошибке разрешения, является сломанным, а не безопасным.
Лицензия всегда доступна Страница System → License — обычный блок прав, но пока устройство в состоянии блокировки (грейс, мягкая или жёсткая) SAMM принудительно делает её доступной каждому вошедшему администратору независимо от роли — путь восстановления никогда не перекрыт.

Система

Инструменты

Раздел Tools объединяет массовые и сервисные инструменты. Он действует на весь массив данных, поэтому доступен только суперадминам.

Резервное копирование и восстановление

Создайте полный снимок базы данных перед любым крупным изменением. Резервная копия — это сжатый gzip архив pg_dump, хранящийся на сервере, каждый с заголовком SAMM.

  • Создать резервную копию — при желании добавьте примечание; отметьте Пропустить использование и историю для меньшего, более быстрого дампа, который опускает объёмные таблицы журналов.
  • Скачайте резервную копию на ваш ПК или загрузите предыдущую резервную копию SAMM обратно на сервер.
  • Восстановление перезаписывает текущую базу данных — защищено диалогом с вводом RESTORE для подтверждения.

Высокая доступность

Для развертывания без единой точки отказа запустите SAMM на двух узлах: Потоковая репликация PostgreSQL (основной узел с задержкой на несколько секунд и горячий резервный узел) плюс резервный узел AAA, и при отказе продвигайте и перенаправляйте. Полный операционный манускрипт — настройка репликации, запланированное и непланируемое переключение при отказе, восстановление после отказа, необязательный режим синхронной репликации и контрольный список проверки после отказа — поставляется как docs/HA.md с исходным кодом. Обратите внимание, что репликация не является резервным копированием (удаление из репликации происходит мгновенно), поэтому также поддерживайте запланированные резервные копии.

Очистка истории

Навсегда удаляйте старые строки журналов и истории, чтобы освободить место в базе данных. Выберите пресет хранения и подтвердите. Очистка урезает закрытые сессии RADIUS, записи post-auth, сводки ежедневного использования, историю маршрутизаторов/интерфейсов, журналы ограничений, применённые записи аудита и завершённые строки CoA. Она никогда не касается активных сессий, команд в очереди, ожидающих CoA или несбрасываемых итогов использования за всё время.

Сначала сделайте резервную копию Очистка истории удаляет навсегда. Сделайте резервную копию перед очисткой, если данные могут понадобиться вам позже.

Экспорт / Импорт

Массовый экспорт и импорт для Пользователей, Планов и NAS в формате .csv или .xlsx. Скачайте шаблон (правильные столбцы плюс образец строки) или снимок текущих данных, заполните его и загрузите обратно. Каждая строка проверяется и показывается на экране предпросмотра — дубликаты и недопустимые строки выявляются, и вы выбираете, пропускать ли дубликаты или обновлять их на месте — прежде чем что-либо записывается.

Массовые изменения

Примените одно изменение — владельца, дату истечения срока действия, статус, автоматическое продление или весь план. периоды — каждому подписчику, соответствующему фильтру, за один проход. Выберите изменение, создайте фильтр (статус/план/владелец/поиск), просмотрите список совпадений и подтвердите.

Добавление целых периодов плана — это опция массового обновления: каждый абонент получает столько же периодов своего собственного плана, так что для 7-дневного плана добавляется 7 дней на период, а для ежемесячного плана — полный календарь месяца — всё в одном запуске, без разделения списка по планам. Абоненты с планами без периода действия пропускаются, а не предполагаются. Добавление дней остаётся доступным, где требуется фиксированное количество дней без сброса счетчика.

Увеличение скорости

Повышайте или снижайте скорость для всех тарифов одновременно в процентах — будь то выходные на двойной скорости или экстренное ограничение при ухудшении связи. Изменения вступают в силу немедленно, как для новых входов, так и для уже активных сессий.

КонтрольЧто он делает
ПроцентПоложительное умножение, отрицательное деление: +100% → двойная скорость, −100% → половина скорости, −500% → шестая часть. Скорость никогда не достигает нуля.
Планы по повышениюОтметьте любое количество планов; В каждой строке показаны плановая скорость, прирост силы и эффективная скорость на данный момент.
Автоматический возврат послеНесколько часов до того, как усиление закончится само по себе. 0 сохраняет его до тех пор, пока вы не сбросите его вручную.
Повышение превосходит окно скорости Повышение измеряется на основе тарифного плана и заменяет любые окно скорости , пока оно активно — план на 20-месячное ночное окно не действует станет 40M, он станет тем, что увеличит его плановую ставку. Windows возобновляет момент повышение прекращается.

Подписчик, который достиг максимального лимита, никогда не вернётся к полной скорости после буста. По той же причине тариф, используемый в качестве целевого ограничителя, будет пропущен через Выбрать все и помечен как такой — буст его ускорит именно тех, кого вы и ограничиваете. Вы всё ещё можете вручную поставить флажок, если это ваши намерения. Сбросить всё в нормальное состояние удаляет все бусты и возвращает активные сессии к скорости тарифа.

Массовое удаление

Навсегда удалите множество абонентов или карт hotspot сразу, выбранных по фильтру. Удаление абонента также удаляет его историю использования, сессии, учёт RADIUS и счета, и отключает любую активную сессию. Защищено диалогом с вводом DELETE для подтверждения.

Система

Языки и темы

Языки

Администраторский и пользовательский порталы полностью переводимы. Встроены восемь языков: английский, арабский (справа налево), русский, персидский (справа налево), турецкий, французский, испанский и немецкий. Каждый пользователь выбирает свой язык из верхней панели или своего профиля; выбор сохраняется для каждого аккаунта.

Редактор переводов

Суперадминистратор может редактировать переводы вживую из Система → Переводы — без перезапуска, без правки файлов. Редактор также создаёт совершенно новые языки и импортирует/экспортирует книги переводов в формате .xlsx, так что вы можете локализовать SAMM на любой язык, который вы обслуживаете.

Темы

SAMM поставляется с 16 визуальными темами, светлыми и тёмными. Каждый пользователь выбирает тему из верхней панели; предпросмотр обновляется мгновенно и сохраняется для каждой учётной записи. IT- терминология никогда не переводится, поэтому технические экраны остаются точными на любом языке.

Система

Журнал аудита и активность

System → Audit Log отвечает на один вопрос: что произошло и кто это сделал. Один список содержит каждое изменение администратора, то, что система сделала сама (например, истечение срока), и изменения, которые пользователи внесли в свой аккаунт в портале или в Telegram, — смену тарифа, продления, платежи, правку профиля и пароля.

СтолбецЧто показывает
КогдаВремя в вашем часовом поясе
КтоАдминистратор, «ali, в портале», «ali, в Telegram», API-токен или System
Что произошлоОдно предложение только с изменившимися полями, старое → новое — например «Изменил пользователя: Срок действия: 01 Oct → 15 Oct»
ОбъектК чему это относится — Пользователь · ali, Тариф · Gold 20M, Роутер · Hamra, Администратор · rami

Фильтруйте по Кто и Период или введите имя в поиск. Входы и экспорты скрыты, пока вы не отметите Show logins & exports. Via, Action, Category, Severity и ID — в выборе столбцов. Выделите строки для Export или Print — в файле те же столбцы, что на экране. Кнопка ⓘ в строке показывает полную таблицу «до и после».

Хронология пользователя

Откройте пользователя и выберите Timeline, чтобы увидеть всё, что происходило с этим аккаунтом, — создание, продление, смена тарифа, приостановка, достижение лимитов — со счетами, платежами, кошельком и списаниями агента в столбце «Сумма». Фильтруйте по типу, периоду или только деньгам и экспортируйте в CSV или Excel. Строки хронологии никогда не удаляются и сохраняются после удаления пользователя.

Accept Log и Access Log

Overview → Accept Log показывает каждую попытку входа от роутеров и ответ RADIUS, сначала новые, с причиной каждого отказа. Это страница, которую нужно открыть, когда пользователь не может подключиться. Повторяющийся отказ — одна строка со счётчиком. Overview → Access Log показывает сессии, которые действительно начались, по данным учёта RADIUS.

А также очередь команд Сбросы, смены тарифа и продления, поставленные в очередь из CLI или API, записываются в ту же таблицу и применяются службой samm-radius на следующем цикле, после чего активная сессия обновляется через CoA. Значок в боковой панели считает ещё не применённые.

Лицензирование

Лицензирование и тарифы

Каждая установка SAMM лицензируется на устройство — план привязан к этой установке, так что вы можете запускать несколько серверов SAMM, каждый на своём уровне. Уровень задаёт три числовых лимита.

УровеньПользователи AAAКарты HotspotNAS / маршрутизаторы
Незарегистрировано252001
Бесплатный100502
Lite5001,5004
Plus1,0003,0006
Pro2,0006,00012
Mega5,00015,00024
Max10,00030,000бесконечный
Unlimitedбесконечныйбесконечныйбесконечный

Свежая установка работает незарегистрированной на минимальном пороге. Каждая функция доступна на каждом уровне — уровень задаёт только лимиты. Создание абонента, карты или NAS сверх лимита блокируется, пока вы не повысите уровень; данные никогда не теряются.

Активация и повышение уровня

  1. Откройте Система → Лицензия.
  2. Активируйте, войдя с вашей учётной записью SecuryTik — или используйте Привязать это устройство, которое показывает код, подтверждаемый вами на samm.securytik.com без ввода вашего пароля на сервере. Устройство активируется на уровне Free.
  3. Чтобы получить больше, выберите тариф на этой же странице или оформите подписку в личном кабинете. Запрос со страницы проверяет и одобряет администратор SecuryTik.

Страница лицензии также перепроверяет лицензию по требованию и показывает ваше текущее использование относительно каждого лимита. Отвязать устройство возвращает установку на незарегистрированный уровень без удаления каких-либо данных.

Если платная лицензия истекает

SAMM никогда не удаляет данные. Истёкшая лицензия понижается плавно:

ЭтапЧто происходит
ПредупреждениеБаннер-напоминание; всё продолжает работать
Льготный периодКороткий период для повторной активации; абоненты остаются онлайн
Мягкая блокировкаФоновые службы останавливаются; RADIUS продолжает аутентификацию около 7 дней
Жёсткая блокировкаСлужбы останавливаются, кроме страницы повторной активации

Повторная активация на любом этапе автоматически перезапускает все службы — все данные и история абонентов сохраняются.

Автоматические обновления

Автообновление не зависит от лицензирования — обновляются все тарифы, и истёкшая лицензия никогда его не блокирует. SAMM ежедневно проверяет наличие нового подписанного выпуска. В разделе System → License вы можете переключаться между режимами notify (по умолчанию — баннер с кнопкой Apply now) и auto (применение без участия оператора). Каждое обновление проверяется, резервируется и применяется на месте. Вы также можете в любой момент повторно запустить установщик — обновление идемпотентно.

Для ваших абонентов

Клиентский портал и бот

SAMM предоставляет каждому абоненту два интерфейса самообслуживания — веб-портал и Telegram- бот — чтобы они могли проверять расход и оплачивать без обращения к вам.

Клиентский портал

Абоненты входят в корневой раздел сайта SAMM (/), используя своё имя пользователя SAMM и пароль. На портале есть:

СтраницаЧто видит абонент
ОбзорСтатус учётной записи, тариф, срок действия, расход за сегодня и за месяц, любые неоплаченные счета
Расход и сессииВсего скачано/загружено, бюджет времени в сети и полная история сессий
Мои тарифыТекущий тариф плюс каталог доступных тарифов
Мои счетаИстория биллинга со скачиванием PDF в один клик
Заявки в поддержкуСоздание и отслеживание обращений в поддержку
ПрофильРедактирование контактных данных, смена пароля, выбор языка и темы, управление уведомлениями

В разделе Profile абонент подключает свою учётную запись Telegram, задаёт приоритет предпочитаемых каналов уведомлений или полностью отказывается от уведомлений. Если он забыл пароль, ему отправляется OTP-код по электронной почте (для этого требуется настроенная вкладка Email).

Telegram-бот

Служба samm-telegram запускает интерактивного бота самообслуживания. Абонент отправляет /start, один раз подтверждает свою учётную запись именем пользователя и паролем SAMM (бот сразу удаляет сообщение с паролем), после чего может полностью из чата:

  • Проверять свой тариф, квоту, расход и срок действия
  • Просматривать и скачивать счета в PDF
  • Обновлять свой профиль и менять пароль
  • Создание и отслеживание обращений в поддержку

Бот также доставляет автоматические уведомления — напоминания о продлении, уведомления об окончании срока, предупреждения о квоте и чеки — абонентам, подключившим Telegram.

Страница для истёкших абонентов

Когда подписка истекает, маршрутизатор (настроенный мастером через «пул Expired и блокировку интернета») перенаправляет браузер абонента на дружелюбную страницу «подписка истекла», которую SAMM отдаёт на порту 81 — с логотипом вашего провайдера и кнопкой входа в портал — вместо молчаливо мёртвого соединения.

Система

REST API

System → API управляет публичным интерфейсом /api/v1. API неактивен, пока не создан первый токен, — установка, которая им не пользуется, ничего не открывает. Всё нижеописанное доступно и как интерактивная документация OpenAPI — с консолью проб и полными схемами — на вашей установке по адресу /api/v1/docs.

Интерактивная документация (Swagger UI)

Каждая установка предоставляет живую консоль API по адресу /api/v1/docs — она доступна прямо из раздела API в панели администратора. Нажмите Authorize, вставьте токен, и любой эндпоинт можно выполнить на ваших собственных данных через Try it out; каждый вызов показывает реальный ответ и готовую к копированию команду curl.

Каждый эндпоинт объявляет полную типизированную схему — как для тел запросов, так и для ответов — поэтому имена полей, типы и примеры видны без единого вызова. Та же схема отдаётся в машиночитаемом формате OpenAPI по адресу /api/v1/openapi.json и позволяет сгенерировать полностью типизированный клиент на выбранном вами языке:

openapi-generator-cli generate \
  -i https://YOUR-SAMM/api/v1/openapi.json \
  -g python -o ./samm-client

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

  1. Откройте System → API (только суперадмин), задайте имя, срок действия и нужные интеграции области, затем нажмите Создать токен.
  2. Скопируйте секрет сразу — он показывается ровно один раз, на сервере хранится только его хеш.
  3. Проверьте, что он работает, и посмотрите, что умеет токен:
curl -H "Authorization: Bearer samm_YOUR_TOKEN" https://YOUR-SAMM/api/v1/me

Выведите активных абонентов, затем создайте одного:

curl -H "Authorization: Bearer samm_YOUR_TOKEN" \
  "https://YOUR-SAMM/api/v1/customers?status=active&limit=20"

curl -X POST -H "Authorization: Bearer samm_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"username":"john","password":"secret1","firstname":"John",
       "lastname":"Doe","plan_id":3}' \
  https://YOUR-SAMM/api/v1/customers

Аутентификация, токены и области

Каждый запрос отправляет Authorization: Bearer <token>. Токен несёт имя, лимит запросов в минуту, срок действия (30–360 дней или бессрочно) и набор областей — права чтения/записи по ресурсам; область write автоматически включает соответствующую read. Секрет показывается ровно один раз; сервер хранит только хеш. Токен можно отозвать (вызовы сразу перестают работать, обратимо) или удалить совсем.

Ответы следуют единым соглашениям: списочные эндпоинты принимают limit/offset и возвращают {"total", "items"}; ошибки используют стандартные коды — 401 отсутствующий/неверный/просроченный токен, 403 нет области, 404 не найдено, 409 дубликат, 422 ошибка валидации и 429 при превышении лимита (с Retry-After и X-RateLimit-*).

Справочник эндпоинтов

РазделЭндпоинтыОбласть
Интроспекция GET /me · GET /commands любой токен
Статистика панели GET /stats/overview stats:read
Абоненты GET/POST /customers · GET/PATCH/DELETE /customers/{id} · POST …/suspend · …/activate · …/renew · …/reset-limit · …/assign-plan · GET …/usage customers:read/write
Отключение POST /customers/{id}/disconnect · POST /sessions/disconnect · /sessions/reconnect coa:write
Тарифы GET/POST /plans · GET/PATCH /plans/{id} plans:read/write
Счета GET/POST /invoices · GET /invoices/{id} · GET /invoices/{id}/pdf · POST …/pay · …/unpay billing:read/write
Бухгалтерские книги GET /accounting/export · GET /accounting/export/{kind} accounting:read
Живые сессии GET /sessions · GET /coa-outbox sessions:read
Маршрутизаторы GET /routers routers:read
Карты Hotspot GET/POST /cards/groups · GET /cards/groups/{id} · GET …/cards · …/print.pdf · POST …/cards · …/enable · …/disable · …/extend · GET /cards/{id} · POST /cards/{id}/enable · …/disable · …/reset/{kind} cards:read/write
Webhooks GET/POST /webhooks · DELETE /webhooks/{id} · POST …/enable · …/disable · …/test webhooks:manage

Команды в очереди

Изменения, затрагивающие живое состояние учёта — сбросы лимитов, включение/отключение карт и групп, продления, — не применяются внутри запроса. Они ставятся в аудируемую очередь команд и применяются samm-radius в течение одного тика (несколько секунд), точно как те же клики в админ-портале. Такие эндпоинты отвечают {"queued": true}; опрашивайте GET /commands, чтобы увидеть, как ваши команды становятся applied.

Webhooks

Зарегистрируйте URL эндпоинта и выберите события (абонент создан/изменён/продлён/истёк, лимит исчерпан, счёт создан/оплачен, опциональные события сессий). Секрет подписи возвращается один раз при создании. Доставки повторяются с нарастающей задержкой; постоянно сбоящий эндпоинт отключается автоматически — включите снова через POST /webhooks/{id}/enable или отправьте себе образец через POST /webhooks/{id}/test.

Каждая доставка несёт X-SAMM-Event и X-SAMM-Signature: sha256=HMAC(body). Проверяйте, прежде чем доверять:

import hmac, hashlib

def verify(body: bytes, signature_header: str, secret: str) -> bool:
    calc = "sha256=" + hmac.new(secret.encode(), body,
                                hashlib.sha256).hexdigest()
    return hmac.compare_digest(calc, signature_header)
Те же правила, что и в портале Изменения через API проходят ту же аудируемую очередь команд и сервисный слой, что и админ-портал: сброс или смена тарифа через API ведёт себя ровно так же, как клик в интерфейсе, включая CoA.

Ссылка

Эксплуатация SAMM

Почти всё выполняется из портала администратора. Эта страница — справочник по командной строке для тех редких случаев, когда она вам нужна.

Управление службами

# Restart all SAMM services
systemctl restart samm-api samm-radius samm-worker samm-notification samm-telegram

# Live logs for one service
journalctl -u samm-api    -f
journalctl -u samm-radius -f

# Validate the FreeRADIUS config after any change
freeradius -CX

# Port 8000 stuck after a crash (admin portal unreachable)
kill -9 $(lsof -ti:8000); systemctl restart samm-api

Admin CLI

Для быстрых операций с абонентами из командной строки. Каждая команда ставится в очередь в журнале аудита и применяется при следующем такте samm-radius — точно так же, как действия в интерфейсе.

CLI="sudo -u samm /opt/samm/venv/bin/python -m samm_radius.cli"

$CLI reset-quota      alice          # reset a limit counter
$CLI reset-daily      alice
$CLI reset-uptime     alice
$CLI reset-expiration alice
$CLI change-plan      alice home-50M # switch a subscriber's plan
$CLI encrypt-pw                       # encrypt a router API password for the DB

Файлы конфигурации

ФайлСодержит
/etc/samm/samm.yamlDSN базы данных, размеры пула соединений, уровень логирования
/etc/samm/api.envСекреты сессий портала и настройки SMTP для восстановления пароля
/etc/samm/secret.keyКлюч шифрования для сохранённых паролей API маршрутизаторов

Эти файлы сохраняются при обновлениях и никогда не перезаписываются при повторном запуске установщика. Настраиваемые во время работы параметры (интервалы циклов, время ежедневного сброса, CoA- порты) вместо этого находятся в Settings и применяются без перезапуска.

Обновление SAMM

Либо позвольте SAMM обновиться самому из System → License, либо повторно запустите установщик — см. Installation → Upgrading. Оба пути повторно применяют миграции и перезапускают службы; ваша конфигурация и данные остаются нетронутыми.

Резервное копирование и восстановление

Используйте Tools → Backup & Restore для полного снимка базы данных перед любым значимым изменением. Чтобы восстановить систему на новом хосте, установите SAMM, а затем восстановите резервную копию.

Инструменты обслуживания (внешние)

Некоторые задачи по обслуживанию достаточно разрушительны, чтобы не относиться к панели администратора, где случайный клик может уничтожить работающий бизнес. SAMM сохраняет их в виде самостоятельных скриптов, доступных только корневому пользователю, которые вы загружаете и запускаете намеренно через оболочку — никогда не как кнопка. Они находятся в публичном репозитории распространения по пути: tools/.

Сброс пароля заблокированного администратора

Потеряли доступ к панели администратора? Задайте новый пароль для учётной записи superadmin прямо в базе данных — рабочий вход не нужен. Отключённая учётная запись будет снова включена; больше ничего не затрагивается.

curl -fsSL -o samm-reset-admin-password.sh \
  https://raw.githubusercontent.com/mhdhaidarah/samm/main/tools/samm-reset-admin-password.sh

sudo bash samm-reset-admin-password.sh --list   # list the superadmin accounts
sudo bash samm-reset-admin-password.sh          # reset (prompts for the new password, twice)

Запускайте от root на сервере SAMM. Если superadmin несколько, укажите --user <name>.

Сбросить бухгалтерские книги (стирать финансовые данные)

Очищает каждую финансовую транзакцию, чтобы интернет-провайдер мог начать учет с нуля. при этом все данные подписчиков и AAA остаются нетронутыми. Полезно при приеме на себя установить или после пробного/тестового периода, когда книги заполнены данными оператора желания исчезли, но клиентская база должна остаться такой, какая она есть.

Опасность — необратимая потеря данных. Это навсегда уничтожает все счета, платежи, квитанции, балансы кошелька и историю учета. Отката нет. Единственный способ вернуться — резервное копирование базы данных. Никогда не запускайте его на производственной установке, не сделав сначала резервную копию и не проверив.

Удаленный: счета-фактуры и их отдельные позиции, книга двойной записи (платежи, поступления, корректировки, пополнения и снятия кошелька), онлайн-платежи операции, расходы, основные средства и журнал бухгалтерской деятельности. Нумерация счетов сбрасывается, поэтому следующий счет начинается с номера 1.

Сохранено: каждый подписчик, план, окно скорости, лимит, счетчик использования, историю планов, карту точки доступа, маршрутизатор, сеанс и учетную запись RADIUS — плюс ваши настройка бухгалтерского учета (план счетов, кассовые счета, налоговые группы, платежные шлюзы). Остатки денежных средств, кошельков и дебиторской задолженности извлекаются из бухгалтерской книги, поэтому они просто прочитайте ноль после этого.

Загрузите его, прочитайте, затем запустите. Всегда сначала делайте пробный прогон:

curl -fsSL -o samm-wipe-financials.sh \
  https://raw.githubusercontent.com/mhdhaidarah/samm/main/tools/samm-wipe-financials.sh

sudo bash samm-wipe-financials.sh --dry-run   # show what would be deleted, change nothing
sudo bash samm-wipe-financials.sh             # do it
Не направляйте его прямо в оболочку. Никогда не запускайте это как curl … | sudo bash . Для сценария, который уничтожает данные, вы хочу сначала прочитать его, а усеченная загрузка не должна быть в состоянии выполнить половину протирать. Загрузите, проверьте и запустите.

Скрипт отказывается запускаться от имени пользователя без полномочий root, печатает именно то, что собирается удалить, затем попросит вас ввести YES , чтобы подтвердить, что у вас есть проверенная резервная копия, и WIPE , чтобы продолжить. Он предлагает сначала сделать дамп собственной базы данных (в /var/backups/samm/ ) и прерывается в случае сбоя этого дампа. Очистка выполняется как одна транзакция по принципу «все или ничего», а RADIUS намеренно оставлен включенным, поэтому подписчики остаются онлайн, пока книги очищаются.

Ссылка

FAQ и устранение неполадок

Какие операционные системы поддерживает SAMM?

Ubuntu 22.04/24.04/26.04 LTS и Debian 12/13. Только серверный уровень Linux — варианты для настольных компьютеров не поддерживаются. Установщик ожидает systemd, свежую Установка PostgreSQL (один из них настроен для вас) и root-доступ.

Нужно ли интернет-соединение для работы SAMM?

Нет. SAMM работает полностью на вашем собственном сервере и аутентифицирует абонентов локально по RADIUS. Единственный исходящий трафик — это периодический сигнал лицензии на сервер лицензий SecuryTik, чтобы ваш тариф оставался подтверждённым.

Можно ли запускать SAMM в облаке или он должен быть локальным (on-prem)?

Подходит любой вариант. Большинство операторов работают локально рядом со своими магистральными маршрутизаторами; некоторые запускают на небольшой облачной ВМ с обратным туннелем Cloudflare Zero Trust. Единственное требование — чтобы маршрутизаторы MikroTik могли обращаться к серверу SAMM по портам RADIUS (1812/1813 UDP), а SAMM мог обращаться к маршрутизаторам через MikroTik API.

Нужно ли перезапускать FreeRADIUS при добавлении или удалении маршрутизатора?

Нет. SAMM определяет клиентов NAS динамически из базы данных, поэтому добавление, редактирование или удаление маршрутизатора в MikroTik → NAS вступает в силу без перезапуска.

Как быстро вступает в силу смена тарифа или сброс счётчика?

Действия администратора ставятся в очередь и применяются службой samm-radius при следующем такте — по умолчанию в течение 30 секунд. Если абонент онлайн, SAMM также отправляет живой CoA для обновления сессии. Уменьшите интервал samm-radius в System → Settings для более точного тайминга.

Что происходит с моими данными, если платная лицензия истекает?

Ничего никогда не удаляется. Истёкшая лицензия последовательно проходит через предупреждение, льготный период, мягкую блокировку (RADIUS продолжает аутентификацию около недели) и, наконец, жёсткую блокировку. Повторная активация на любом этапе перезапускает все службы с сохранением всех данных.

Бесплатен ли SAMM? Что добавляет Pro?

Бесплатный уровень бесплатен навсегда и включает все функции. Платные тарифы не открывают функции — они повышают лимиты пользователей AAA и карт Hotspot и снимают ограничение на роутеры. См. Лицензирование и уровни.

Абонент не может пройти аутентификацию — с чего начать?

Убедитесь, что общий секрет RADIUS маршрутизатора точно совпадает с записью NAS, что на маршрутизаторе включён RADIUS для PPP / Hotspot, а учётная запись абонента активна и не истекла. Следите за journalctl -u samm-api -f и логом FreeRADIUS и убедитесь, что маршрутизатор может обращаться к хосту SAMM по UDP 1812/1813.

Нужна дополнительная помощь?

Напишите на [email protected], чтобы сообщить об ошибке или запросить функцию.