PPP Profiles на MikroTik — управление тарифами
PPP Profiles на MikroTik — управление тарифами и ограничениями
PPP Profile — шаблон параметров для PPP-подключений (PPPoE, L2TP, PPTP, SSTP). Каждый PPP-клиент при подключении получает настройки из профиля: IP-адрес, DNS-серверы, ограничение скорости, таймауты, скрипты. Это основной инструмент для управления тарифными планами в провайдерских сетях: создаёте профиль «Тариф 50 Мбит/с» с rate-limit=50M/50M и назначаете его абонентам. При смене тарифа достаточно переключить профиль — все параметры применятся автоматически. В этом руководстве подробно разберём создание PPP-профилей для разных сценариев: тарифные планы ISP, корпоративные VPN, детский контроль через DNS, скрипты on-up/on-down и интеграцию с RADIUS.
Руководство актуально для RouterOS 7.20+.
Описание
Что такое PPP Profile
PPP Profile — это набор параметров, который применяется к PPP-соединению в момент подключения клиента. Один профиль может обслуживать тысячи абонентов с одинаковыми настройками.
Основные параметры профиля:
| Параметр | Описание | Пример |
|---|---|---|
| local-address | IP-адрес сервера (gateway для клиента) | 10.0.0.1 |
| remote-address | Пул IP-адресов для клиентов | pool-subscribers |
| rate-limit | Ограничение скорости (upload/download) | 50M/100M |
| dns-server | DNS-серверы для клиентов | 8.8.8.8,8.8.4.4 |
| bridge | Bridge для L2-подключения | none |
| incoming-filter | Firewall-фильтр для входящего трафика | — |
| outgoing-filter | Firewall-фильтр для исходящего трафика | — |
| session-timeout | Максимальное время сессии | 24h |
| idle-timeout | Время простоя до отключения | 30m |
| on-up | Скрипт при подключении | — |
| on-down | Скрипт при отключении | — |
PPP Profile vs PPP Secret
| Сущность | Назначение | Количество |
|---|---|---|
| PPP Profile | Шаблон тарифа (скорость, DNS, пул) | Десятки (по числу тарифов) |
| PPP Secret | Учётная запись абонента (логин/пароль) | Тысячи (по числу абонентов) |
Каждый PPP Secret ссылается на один PPP Profile. При подключении абонент получает параметры из своего профиля.
codePPP Profile "tariff-50M" ├── rate-limit = 50M/50M ├── dns-server = 8.8.8.8 └── remote-address = pool-main │ ├── PPP Secret "user001" → profile=tariff-50M ├── PPP Secret "user002" → profile=tariff-50M └── PPP Secret "user003" → profile=tariff-50M
rate-limit в Profile vs Queue
Параметр rate-limit в PPP Profile автоматически создаёт Simple Queue для каждого подключенного клиента. Это удобно, но имеет ограничения:
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| rate-limit в Profile | Автоматическая Simple Queue | Просто, не нужна доп. настройка | Нет burst, нет приоритетов |
| Отдельная Queue | Ручная или скриптовая Queue | Полный контроль: burst, PCQ, priority | Сложнее настройка |
| RADIUS Rate-Limit | Скорость из RADIUS-атрибута | Централизованное управление | Нужен RADIUS-сервер |
Формат rate-limit: rx-rate/tx-rate (с точки зрения сервера) или расширенный формат:
coderx-rate/tx-rate [rx-burst-rate/tx-burst-rate] [rx-burst-threshold/tx-burst-threshold] [rx-burst-time/tx-burst-time] [priority] [rx-limit-at/tx-limit-at]
С точки зрения сервера:
rx-rate= upload абонента (то, что сервер получает от клиента)tx-rate= download абонента (то, что сервер отправляет клиенту)
Настройка
Шаг 1: Создание IP-пулов для тарифов
Разные тарифы могут использовать разные пулы IP-адресов. Это позволяет применять правила firewall или маршрутизации по подсетям тарифов.
[admin@MikroTik] ># Общий пул для обычных тарифов /ip/pool/add name=pool-standard ranges=10.10.0.2-10.10.7.254 \ comment="Standard tariffs pool (2046 addresses)" # Отдельный пул для VIP-тарифов (статические IP) /ip/pool/add name=pool-vip ranges=10.10.100.2-10.10.100.254 \ comment="VIP tariff pool (253 addresses)" # Пул для заблокированных абонентов /ip/pool/add name=pool-blocked ranges=10.10.200.2-10.10.200.254 \ comment="Blocked subscribers pool" # Резервный пул /ip/pool/add name=pool-reserve ranges=10.10.8.2-10.10.15.254 \ comment="Reserve pool" /ip/pool/set pool-standard next-pool=pool-reserve
Шаг 2: Создание тарифных профилей
[admin@MikroTik] ># --- Тариф «Старт» — 10 Мбит/с --- /ppp/profile/add name=tariff-start \ local-address=10.0.0.1 \ remote-address=pool-standard \ rate-limit=10M/10M \ dns-server=8.8.8.8,8.8.4.4 \ comment="Tariff Start: 10 Mbit/s" # --- Тариф «Оптимальный» — 50 Мбит/с --- /ppp/profile/add name=tariff-optimal \ local-address=10.0.0.1 \ remote-address=pool-standard \ rate-limit=50M/50M \ dns-server=8.8.8.8,8.8.4.4 \ comment="Tariff Optimal: 50 Mbit/s" # --- Тариф «Максимальный» — 100 Мбит/с --- /ppp/profile/add name=tariff-max \ local-address=10.0.0.1 \ remote-address=pool-standard \ rate-limit=100M/100M \ dns-server=8.8.8.8,8.8.4.4 \ comment="Tariff Max: 100 Mbit/s" # --- Тариф «VIP» — 200 Мбит/с, отдельный пул --- /ppp/profile/add name=tariff-vip \ local-address=10.0.0.1 \ remote-address=pool-vip \ rate-limit=200M/200M \ dns-server=8.8.8.8,8.8.4.4 \ comment="Tariff VIP: 200 Mbit/s, dedicated pool" # --- Профиль «Заблокирован» — минимальная скорость --- /ppp/profile/add name=tariff-blocked \ local-address=10.0.0.1 \ remote-address=pool-blocked \ rate-limit=128K/128K \ dns-server=10.10.200.1 \ comment="Blocked: redirect to billing page"
Шаг 3: rate-limit с Burst
Burst позволяет абоненту кратковременно превышать лимит — страницы грузятся быстрее, а длительные скачивания ограничиваются до базовой скорости.
[admin@MikroTik] ># Тариф 50 Мбит/с с burst до 100 Мбит/с /ppp/profile/add name=tariff-50m-burst \ local-address=10.0.0.1 \ remote-address=pool-standard \ rate-limit="50M/50M 100M/100M 40M/40M 16/16" \ dns-server=8.8.8.8,8.8.4.4 \ comment="50M with burst to 100M" # Расшифровка: rx-rate/tx-rate rx-burst/tx-burst rx-threshold/tx-threshold burst-time # 50M/50M — базовая скорость # 100M/100M — burst-скорость (кратковременно) # 40M/40M — порог отключения burst # 16/16 — время расчёта средней (секунды)
Шаг 4: Профили с разными DNS (фильтрация контента)
Для детских тарифов или тарифов с фильтрацией можно указать DNS-серверы с блокировкой нежелательного контента:
[admin@MikroTik] ># Тариф «Детский» — фильтрованный DNS /ppp/profile/add name=tariff-kids \ local-address=10.0.0.1 \ remote-address=pool-standard \ rate-limit=50M/50M \ dns-server=77.88.8.7,77.88.8.3 \ comment="Kids tariff: Yandex Family DNS (filtered)" # dns-server=77.88.8.7 — Яндекс.DNS «Семейный» (блокирует взрослый контент) # Альтернативы: # 9.9.9.9 — Quad9 (блокирует malware) # 1.1.1.3 — Cloudflare for Families (malware + adult) # 185.228.168.168 — CleanBrowsing Family Filter
Чтобы абоненты не могли обойти DNS-фильтрацию, перехватывайте DNS-запросы:
[admin@MikroTik] ># Перехват DNS-запросов из подсети «Детских» абонентов # (если детские абоненты в отдельном пуле) /ip/firewall/nat/add chain=dstnat protocol=udp dst-port=53 \ src-address=10.10.0.0/21 \ action=dst-nat to-addresses=77.88.8.7 to-ports=53 \ comment="Redirect DNS for kids tariff" /ip/firewall/nat/add chain=dstnat protocol=tcp dst-port=53 \ src-address=10.10.0.0/21 \ action=dst-nat to-addresses=77.88.8.7 to-ports=53 \ comment="Redirect DNS for kids tariff (TCP)"
Шаг 5: Session Timeout и Idle Timeout
[admin@MikroTik] ># Профиль с таймаутами /ppp/profile/add name=tariff-with-timeouts \ local-address=10.0.0.1 \ remote-address=pool-standard \ rate-limit=50M/50M \ dns-server=8.8.8.8,8.8.4.4 \ session-timeout=24h \ idle-timeout=30m \ comment="50M with session timeout 24h"
| Параметр | Описание | Рекомендация |
|---|---|---|
| session-timeout | Максимальное время PPP-сессии | 24h для ISP (принудительное переподключение) |
| idle-timeout | Время без трафика до отключения | 30m–1h (экономит ресурсы BRAS) |
session-timeout=24h — стандартная практика ISP: абонент принудительно переподключается раз в сутки. Это позволяет обновить тариф, применить новые правила и освободить ресурсы.
Шаг 6: Скрипты on-up и on-down
Скрипты выполняются при подключении (on-up) и отключении (on-down) PPP-клиента. Доступны переменные:
| Переменная | Описание |
|---|---|
$user | Логин абонента |
$local-address | IP-адрес сервера |
$remote-address | IP-адрес клиента |
$caller-id | MAC-адрес клиента |
$interface | Имя PPP-интерфейса |
Скрипт логирования подключений:
[admin@MikroTik] ># Создаём скрипт on-up /ppp/profile/set tariff-optimal on-up="/log info message=\"PPPoE UP: user=$user ip=$remote-address mac=$caller-id interface=$interface\"" # Создаём скрипт on-down /ppp/profile/set tariff-optimal on-down="/log info message=\"PPPoE DOWN: user=$user ip=$remote-address session-time=$session-time\""
Скрипт добавления абонента в address-list:
[admin@MikroTik] ># on-up: добавляем IP абонента в address-list для firewall /ppp/profile/set tariff-optimal on-up={ /ip/firewall/address-list/add list=active-subscribers \ address=quot;remote-address" comment=$user timeout=1d /log info message="PPPoE UP: $user ($\"remote-address\")" } # on-down: удаляем из address-list /ppp/profile/set tariff-optimal on-down={ /ip/firewall/address-list/remove [find where address=quot;remote-address" list=active-subscribers] /log info message="PPPoE DOWN: $user ($\"remote-address\")" }
Скрипт отправки уведомлений в Telegram (on-up):
[admin@MikroTik] ># Предварительно: создайте скрипт для отправки в Telegram /system/script/add name=telegram-notify source={ :local botToken "123456:ABCDEF..." :local chatId "-100123456789" :local msg $1 /tool/fetch url="https://api.telegram.org/bot$botToken/sendMessage" \ http-method=post http-data="chat_id=$chatId&text=$msg" \ output=none } # В профиле on-up: /ppp/profile/set tariff-vip on-up={ :local msg "VIP subscriber connected: $user from $caller-id, IP: $\"remote-address\"" /system/script/run telegram-notify $msg }
Шаг 7: Привязка абонентов к профилям (PPP Secrets)
[admin@MikroTik] ># Создание абонентов /ppp/secret/add name=ivanov password=Secure123! \ profile=tariff-optimal service=pppoe \ comment="Ivanov A.S. — kv.15" /ppp/secret/add name=petrov password=Secure456! \ profile=tariff-max service=pppoe \ comment="Petrov I.V. — kv.23" /ppp/secret/add name=sidorov password=Secure789! \ profile=tariff-vip service=pppoe \ remote-address=10.10.100.50 \ comment="Sidorov M.N. — kv.5, static IP" # Абонент со статическим IP (remote-address в secret переопределяет pool из profile)
Шаг 8: Смена тарифа абоненту
[admin@MikroTik] ># Смена тарифа (без разрыва сессии — применится при следующем подключении) /ppp/secret/set [find name=ivanov] profile=tariff-max # Принудительное применение — разрыв текущей сессии /ppp/active/remove [find name=ivanov] # Абонент автоматически переподключится и получит новый профиль
Шаг 9: RADIUS Override
При использовании RADIUS сервер может переопределять параметры профиля. RADIUS-атрибуты имеют приоритет над локальным профилем:
[admin@MikroTik] ># Включаем RADIUS для PPP /radius/add service=ppp address=172.16.0.10 secret=RadiusSecret! timeout=3s /ppp/aaa/set use-radius=yes accounting=yes interim-update=5m # Профиль-заглушка (RADIUS переопределит rate-limit) /ppp/profile/add name=radius-default \ local-address=10.0.0.1 \ remote-address=pool-standard \ dns-server=8.8.8.8,8.8.4.4 \ comment="Default for RADIUS subscribers (rate from RADIUS)"
RADIUS-атрибуты для управления тарифом:
[admin@MikroTik] ># RADIUS Reply-атрибуты: Mikrotik-Rate-Limit = "50M/100M" # Скорость upload/download Mikrotik-Rate-Limit = "50M/100M 75M/150M 40M/80M 16/16" # С burst Framed-Pool = "pool-vip" # Пул адресов Mikrotik-Group = "tariff-vip" # PPP Profile Session-Timeout = 86400 # Таймаут сессии
Приоритет: RADIUS-атрибут > PPP Secret > PPP Profile.
Проверка
Просмотр профилей
[admin@MikroTik] ># Список всех профилей /ppp/profile/print # Подробная информация /ppp/profile/print detail # Конкретный профиль /ppp/profile/print where name=tariff-optimal
Просмотр активных сессий
[admin@MikroTik] ># Все активные PPP-сессии /ppp/active/print # С деталями (IP, uptime, трафик) /ppp/active/print detail # Количество активных сессий /ppp/active/print count-only # Фильтр по профилю /ppp/active/print where profile=tariff-optimal # Сессии конкретного абонента /ppp/active/print where name=ivanov
Ожидаемый вывод:
codeFlags: R - radius # NAME SERVICE CALLER-ID ADDRESS UPTIME ENCODING 0 ivanov pppoe AA:BB:CC:DD:EE 10.10.0.5 2h15m ... 1 petrov pppoe 11:22:33:44:55 10.10.0.12 5h30m ...
Проверка автоматических очередей
При использовании rate-limit в профиле MikroTik автоматически создаёт Simple Queue:
[admin@MikroTik] ># Просмотр автоматических очередей /queue/simple/print where dynamic=yes # Статистика по очереди конкретного абонента /queue/simple/print stats where name~"pppoe-ivanov"
Проверка скриптов on-up/on-down
[admin@MikroTik] ># Просмотр логов (если on-up пишет в лог) /log/print where message~"PPPoE UP" # Проверка address-list (если on-up добавляет в address-list) /ip/firewall/address-list/print where list=active-subscribers
Мониторинг трафика абонента
[admin@MikroTik] ># Трафик конкретного абонента через Torch /tool/torch interface=<pppoe-ivanov> duration=10 # Или через profile traffic counters /ppp/active/print stats where name=ivanov
Типичные ошибки
Ошибка 1: rate-limit не применяется
Симптомы: абонент подключается, но скорость не ограничена. Simple Queue не создаётся.
Возможные причины:
- Профиль не назначен абоненту (в PPP Secret указан другой profile или default)
- RADIUS переопределяет rate-limit пустым значением
- Синтаксическая ошибка в формате rate-limit
Решение:
[admin@MikroTik] ># Проверяем профиль абонента /ppp/secret/print where name=ivanov # Убедитесь, что profile= указывает на нужный тариф # Проверяем, что профиль содержит rate-limit /ppp/profile/print where name=tariff-optimal # Должно быть rate-limit=50M/50M # Проверяем наличие dynamic queue /queue/simple/print where dynamic=yes
Ошибка 2: Неправильный формат rate-limit
Симптомы: ошибка при создании профиля или rate-limit работает некорректно.
Причина: неправильный формат. Распространённые ошибки:
[admin@MikroTik] ># Неправильно: rate-limit=50Mbps/100Mbps # Нет суффикса «bps» rate-limit=50m/100m # Строчная «m» = мили, а не мега rate-limit=50 M/100 M # Пробелы недопустимы # Правильно: rate-limit=50M/50M # Мега = заглавная M rate-limit=512K/1M # Килобиты = K rate-limit=50M/100M # upload 50M / download 100M
Ошибка 3: local-address конфликтует между профилями
Симптомы: некоторые абоненты не могут подключиться, ошибка «address already in use».
Причина: если у каждого профиля свой local-address, и они из одной подсети, может возникнуть конфликт ARP.
Решение: используйте один local-address для всех профилей (обычно /32-адрес на loopback):
[admin@MikroTik] ># Один local-address для всех /ip/address/add address=10.0.0.1/32 interface=lo # Все профили: local-address=10.0.0.1
Ошибка 4: on-up скрипт не выполняется
Симптомы: абонент подключается, но скрипт не срабатывает, записей в логе нет.
Возможные причины:
- Синтаксическая ошибка в скрипте
- Скрипт использует команды, требующие прав (проверьте /system/script permissions)
- Переменные скрипта не экранированы правильно
Решение:
[admin@MikroTik] ># Тестируем скрипт вручную /log info message="test" # Проверяем on-up в профиле /ppp/profile/print detail where name=tariff-optimal # Проверяем системные логи на ошибки скриптов /log/print where topics~"script"
Ошибка 5: Pool исчерпан — новые абоненты не получают IP
Симптомы: абонент аутентифицируется, но PPP-сессия не устанавливается, в логах ошибка «no free address».
Решение:
[admin@MikroTik] ># Проверяем использование пула /ip/pool/used/print where pool=pool-standard # Количество использованных адресов /ip/pool/used/print count-only where pool=pool-standard # Добавляем резервный пул /ip/pool/add name=pool-reserve ranges=10.10.16.2-10.10.31.254 /ip/pool/set pool-standard next-pool=pool-reserve
Ошибка 6: Session-timeout отключает абонентов в неудобное время
Симптомы: абоненты жалуются на обрывы связи (особенно при видеозвонках или онлайн-играх).
Причина: session-timeout=24h приводит к принудительному отключению ровно через 24 часа. Если абонент подключился в 20:00, он будет отключён в 20:00 следующего дня — в прайм-тайм.
Решение: установить session-timeout с небольшим случайным разбросом или использовать скрипт для переподключения в ночное время:
[admin@MikroTik] ># Увеличиваем session-timeout (например, 48h) /ppp/profile/set tariff-optimal session-timeout=48h # Или используем scheduler для массового переподключения ночью /system/scheduler/add name=reconnect-subscribers \ start-time=04:00:00 interval=1d \ on-event="/ppp/active/remove [find where profile=tariff-optimal]" \ comment="Reconnect subscribers at 4 AM"
Ошибка 7: Изменение профиля не применяется к активным сессиям
Симптомы: изменили rate-limit в профиле, но активные абоненты работают на старой скорости.
Причина: изменения профиля применяются только при новом подключении. Активные сессии используют параметры, полученные в момент подключения.
Решение: переподключить абонентов:
[admin@MikroTik] ># Переподключить всех абонентов на конкретном профиле /ppp/active/remove [find where profile=tariff-optimal] # Переподключить конкретного абонента /ppp/active/remove [find where name=ivanov]
Итоги
PPP Profiles — основа тарифного управления в провайдерских сетях на MikroTik. Ключевые правила:
- Один профиль = один тариф. Не смешивайте параметры разных тарифов в одном профиле
- rate-limit в профиле автоматически создаёт Simple Queue — это самый простой способ ограничения
- Для burst используйте расширенный формат rate-limit:
rx/tx rx-burst/tx-burst threshold/threshold time/time - local-address — один для всех профилей (на loopback)
- Используйте next-pool для защиты от исчерпания пула
- on-up/on-down скрипты — для логирования, address-list, уведомлений
- Изменения профиля не применяются к активным сессиям — нужно переподключение
- RADIUS Override имеет приоритет над локальным профилем и secret
PPP Profile "tariff-50M"
├── rate-limit = 50M/50M
├── dns-server = 8.8.8.8
└── remote-address = pool-main
│
├── PPP Secret "user001" → profile=tariff-50M
├── PPP Secret "user002" → profile=tariff-50M
└── PPP Secret "user003" → profile=tariff-50M
rx-rate/tx-rate [rx-burst-rate/tx-burst-rate] [rx-burst-threshold/tx-burst-threshold] [rx-burst-time/tx-burst-time] [priority] [rx-limit-at/tx-limit-at]
# Общий пул для обычных тарифов
/ip/pool/add name=pool-standard ranges=10.10.0.2-10.10.7.254 \
comment="Standard tariffs pool (2046 addresses)"
# Отдельный пул для VIP-тарифов (статические IP)
/ip/pool/add name=pool-vip ranges=10.10.100.2-10.10.100.254 \
comment="VIP tariff pool (253 addresses)"
# Пул для заблокированных абонентов
/ip/pool/add name=pool-blocked ranges=10.10.200.2-10.10.200.254 \
comment="Blocked subscribers pool"
# Резервный пул
/ip/pool/add name=pool-reserve ranges=10.10.8.2-10.10.15.254 \
comment="Reserve pool"
/ip/pool/set pool-standard next-pool=pool-reserve
# --- Тариф «Старт» — 10 Мбит/с ---
/ppp/profile/add name=tariff-start \
local-address=10.0.0.1 \
remote-address=pool-standard \
rate-limit=10M/10M \
dns-server=8.8.8.8,8.8.4.4 \
comment="Tariff Start: 10 Mbit/s"
# --- Тариф «Оптимальный» — 50 Мбит/с ---
/ppp/profile/add name=tariff-optimal \
local-address=10.0.0.1 \
remote-address=pool-standard \
rate-limit=50M/50M \
dns-server=8.8.8.8,8.8.4.4 \
comment="Tariff Optimal: 50 Mbit/s"
# --- Тариф «Максимальный» — 100 Мбит/с ---
/ppp/profile/add name=tariff-max \
local-address=10.0.0.1 \
remote-address=pool-standard \
rate-limit=100M/100M \
dns-server=8.8.8.8,8.8.4.4 \
comment="Tariff Max: 100 Mbit/s"
# --- Тариф «VIP» — 200 Мбит/с, отдельный пул ---
/ppp/profile/add name=tariff-vip \
local-address=10.0.0.1 \
remote-address=pool-vip \
rate-limit=200M/200M \
dns-server=8.8.8.8,8.8.4.4 \
comment="Tariff VIP: 200 Mbit/s, dedicated pool"
# --- Профиль «Заблокирован» — минимальная скорость ---
/ppp/profile/add name=tariff-blocked \
local-address=10.0.0.1 \
remote-address=pool-blocked \
rate-limit=128K/128K \
dns-server=10.10.200.1 \
comment="Blocked: redirect to billing page"
# Тариф 50 Мбит/с с burst до 100 Мбит/с
/ppp/profile/add name=tariff-50m-burst \
local-address=10.0.0.1 \
remote-address=pool-standard \
rate-limit="50M/50M 100M/100M 40M/40M 16/16" \
dns-server=8.8.8.8,8.8.4.4 \
comment="50M with burst to 100M"
# Расшифровка: rx-rate/tx-rate rx-burst/tx-burst rx-threshold/tx-threshold burst-time
# 50M/50M — базовая скорость
# 100M/100M — burst-скорость (кратковременно)
# 40M/40M — порог отключения burst
# 16/16 — время расчёта средней (секунды)
# Тариф «Детский» — фильтрованный DNS
/ppp/profile/add name=tariff-kids \
local-address=10.0.0.1 \
remote-address=pool-standard \
rate-limit=50M/50M \
dns-server=77.88.8.7,77.88.8.3 \
comment="Kids tariff: Yandex Family DNS (filtered)"
# dns-server=77.88.8.7 — Яндекс.DNS «Семейный» (блокирует взрослый контент)
# Альтернативы:
# 9.9.9.9 — Quad9 (блокирует malware)
# 1.1.1.3 — Cloudflare for Families (malware + adult)
# 185.228.168.168 — CleanBrowsing Family Filter
# Перехват DNS-запросов из подсети «Детских» абонентов
# (если детские абоненты в отдельном пуле)
/ip/firewall/nat/add chain=dstnat protocol=udp dst-port=53 \
src-address=10.10.0.0/21 \
action=dst-nat to-addresses=77.88.8.7 to-ports=53 \
comment="Redirect DNS for kids tariff"
/ip/firewall/nat/add chain=dstnat protocol=tcp dst-port=53 \
src-address=10.10.0.0/21 \
action=dst-nat to-addresses=77.88.8.7 to-ports=53 \
comment="Redirect DNS for kids tariff (TCP)"
# Профиль с таймаутами
/ppp/profile/add name=tariff-with-timeouts \
local-address=10.0.0.1 \
remote-address=pool-standard \
rate-limit=50M/50M \
dns-server=8.8.8.8,8.8.4.4 \
session-timeout=24h \
idle-timeout=30m \
comment="50M with session timeout 24h"
# Создаём скрипт on-up
/ppp/profile/set tariff-optimal on-up="/log info message=\"PPPoE UP: user=$user ip=$remote-address mac=$caller-id interface=$interface\""
# Создаём скрипт on-down
/ppp/profile/set tariff-optimal on-down="/log info message=\"PPPoE DOWN: user=$user ip=$remote-address session-time=$session-time\""
# on-up: добавляем IP абонента в address-list для firewall
/ppp/profile/set tariff-optimal on-up={
/ip/firewall/address-list/add list=active-subscribers \
address=quot;remote-address" comment=$user timeout=1d
/log info message="PPPoE UP: $user ($\"remote-address\")"
}
# on-down: удаляем из address-list
/ppp/profile/set tariff-optimal on-down={
/ip/firewall/address-list/remove [find where address=quot;remote-address" list=active-subscribers]
/log info message="PPPoE DOWN: $user ($\"remote-address\")"
}
# Предварительно: создайте скрипт для отправки в Telegram
/system/script/add name=telegram-notify source={
:local botToken "123456:ABCDEF..."
:local chatId "-100123456789"
:local msg $1
/tool/fetch url="https://api.telegram.org/bot$botToken/sendMessage" \
http-method=post http-data="chat_id=$chatId&text=$msg" \
output=none
}
# В профиле on-up:
/ppp/profile/set tariff-vip on-up={
:local msg "VIP subscriber connected: $user from $caller-id, IP: $\"remote-address\""
/system/script/run telegram-notify $msg
}
# Создание абонентов
/ppp/secret/add name=ivanov password=Secure123! \
profile=tariff-optimal service=pppoe \
comment="Ivanov A.S. — kv.15"
/ppp/secret/add name=petrov password=Secure456! \
profile=tariff-max service=pppoe \
comment="Petrov I.V. — kv.23"
/ppp/secret/add name=sidorov password=Secure789! \
profile=tariff-vip service=pppoe \
remote-address=10.10.100.50 \
comment="Sidorov M.N. — kv.5, static IP"
# Абонент со статическим IP (remote-address в secret переопределяет pool из profile)
# Смена тарифа (без разрыва сессии — применится при следующем подключении)
/ppp/secret/set [find name=ivanov] profile=tariff-max
# Принудительное применение — разрыв текущей сессии
/ppp/active/remove [find name=ivanov]
# Абонент автоматически переподключится и получит новый профиль
# Включаем RADIUS для PPP
/radius/add service=ppp address=172.16.0.10 secret=RadiusSecret! timeout=3s
/ppp/aaa/set use-radius=yes accounting=yes interim-update=5m
# Профиль-заглушка (RADIUS переопределит rate-limit)
/ppp/profile/add name=radius-default \
local-address=10.0.0.1 \
remote-address=pool-standard \
dns-server=8.8.8.8,8.8.4.4 \
comment="Default for RADIUS subscribers (rate from RADIUS)"
# RADIUS Reply-атрибуты:
Mikrotik-Rate-Limit = "50M/100M" # Скорость upload/download
Mikrotik-Rate-Limit = "50M/100M 75M/150M 40M/80M 16/16" # С burst
Framed-Pool = "pool-vip" # Пул адресов
Mikrotik-Group = "tariff-vip" # PPP Profile
Session-Timeout = 86400 # Таймаут сессии
# Список всех профилей
/ppp/profile/print
# Подробная информация
/ppp/profile/print detail
# Конкретный профиль
/ppp/profile/print where name=tariff-optimal
# Все активные PPP-сессии
/ppp/active/print
# С деталями (IP, uptime, трафик)
/ppp/active/print detail
# Количество активных сессий
/ppp/active/print count-only
# Фильтр по профилю
/ppp/active/print where profile=tariff-optimal
# Сессии конкретного абонента
/ppp/active/print where name=ivanov
Flags: R - radius
# NAME SERVICE CALLER-ID ADDRESS UPTIME ENCODING
0 ivanov pppoe AA:BB:CC:DD:EE 10.10.0.5 2h15m ...
1 petrov pppoe 11:22:33:44:55 10.10.0.12 5h30m ...
# Просмотр автоматических очередей
/queue/simple/print where dynamic=yes
# Статистика по очереди конкретного абонента
/queue/simple/print stats where name~"pppoe-ivanov"
# Просмотр логов (если on-up пишет в лог)
/log/print where message~"PPPoE UP"
# Проверка address-list (если on-up добавляет в address-list)
/ip/firewall/address-list/print where list=active-subscribers
# Трафик конкретного абонента через Torch
/tool/torch interface=<pppoe-ivanov> duration=10
# Или через profile traffic counters
/ppp/active/print stats where name=ivanov
# Проверяем профиль абонента
/ppp/secret/print where name=ivanov
# Убедитесь, что profile= указывает на нужный тариф
# Проверяем, что профиль содержит rate-limit
/ppp/profile/print where name=tariff-optimal
# Должно быть rate-limit=50M/50M
# Проверяем наличие dynamic queue
/queue/simple/print where dynamic=yes
# Неправильно:
rate-limit=50Mbps/100Mbps # Нет суффикса «bps»
rate-limit=50m/100m # Строчная «m» = мили, а не мега
rate-limit=50 M/100 M # Пробелы недопустимы
# Правильно:
rate-limit=50M/50M # Мега = заглавная M
rate-limit=512K/1M # Килобиты = K
rate-limit=50M/100M # upload 50M / download 100M
# Один local-address для всех
/ip/address/add address=10.0.0.1/32 interface=lo
# Все профили: local-address=10.0.0.1
# Тестируем скрипт вручную
/log info message="test"
# Проверяем on-up в профиле
/ppp/profile/print detail where name=tariff-optimal
# Проверяем системные логи на ошибки скриптов
/log/print where topics~"script"
# Проверяем использование пула
/ip/pool/used/print where pool=pool-standard
# Количество использованных адресов
/ip/pool/used/print count-only where pool=pool-standard
# Добавляем резервный пул
/ip/pool/add name=pool-reserve ranges=10.10.16.2-10.10.31.254
/ip/pool/set pool-standard next-pool=pool-reserve
# Увеличиваем session-timeout (например, 48h)
/ppp/profile/set tariff-optimal session-timeout=48h
# Или используем scheduler для массового переподключения ночью
/system/scheduler/add name=reconnect-subscribers \
start-time=04:00:00 interval=1d \
on-event="/ppp/active/remove [find where profile=tariff-optimal]" \
comment="Reconnect subscribers at 4 AM"
# Переподключить всех абонентов на конкретном профиле
/ppp/active/remove [find where profile=tariff-optimal]
# Переподключить конкретного абонента
/ppp/active/remove [find where name=ivanov]