mikrotik-wiki.ru
Главная
Загрузка...

PPP Profiles на MikroTik — управление тарифами

RouterOS 7.xДля провайдеров11 мин130 мар. 2026 г.
TelegramVK

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-addressIP-адрес сервера (gateway для клиента)10.0.0.1
remote-addressПул IP-адресов для клиентовpool-subscribers
rate-limitОграничение скорости (upload/download)50M/100M
dns-serverDNS-серверы для клиентов8.8.8.8,8.8.4.4
bridgeBridge для L2-подключенияnone
incoming-filterFirewall-фильтр для входящего трафика
outgoing-filterFirewall-фильтр для исходящего трафика
session-timeoutМаксимальное время сессии24h
idle-timeoutВремя простоя до отключения30m
on-upСкрипт при подключении
on-downСкрипт при отключении

PPP Profile vs PPP Secret

СущностьНазначениеКоличество
PPP ProfileШаблон тарифа (скорость, DNS, пул)Десятки (по числу тарифов)
PPP SecretУчётная запись абонента (логин/пароль)Тысячи (по числу абонентов)

Каждый PPP Secret ссылается на один PPP Profile. При подключении абонент получает параметры из своего профиля.

code
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

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 (с точки зрения сервера) или расширенный формат:

code
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]

С точки зрения сервера:

  • 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-addressIP-адрес сервера
$remote-addressIP-адрес клиента
$caller-idMAC-адрес клиента
$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

Ожидаемый вывод:

code
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     ...

Проверка автоматических очередей

При использовании 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 не создаётся.

Возможные причины:

  1. Профиль не назначен абоненту (в PPP Secret указан другой profile или default)
  2. RADIUS переопределяет rate-limit пустым значением
  3. Синтаксическая ошибка в формате 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 скрипт не выполняется

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

Возможные причины:

  1. Синтаксическая ошибка в скрипте
  2. Скрипт использует команды, требующие прав (проверьте /system/script permissions)
  3. Переменные скрипта не экранированы правильно

Решение:

[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. Ключевые правила:

  1. Один профиль = один тариф. Не смешивайте параметры разных тарифов в одном профиле
  2. rate-limit в профиле автоматически создаёт Simple Queue — это самый простой способ ограничения
  3. Для burst используйте расширенный формат rate-limit: rx/tx rx-burst/tx-burst threshold/threshold time/time
  4. local-address — один для всех профилей (на loopback)
  5. Используйте next-pool для защиты от исчерпания пула
  6. on-up/on-down скрипты — для логирования, address-list, уведомлений
  7. Изменения профиля не применяются к активным сессиям — нужно переподключение
  8. RADIUS Override имеет приоритет над локальным профилем и secret
[admin@MikroTik] >
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]
Для провайдеров / PPP Profiles на MikroTik — управление тарифами