Bandwidth Server и Speed Test на MikroTik
MikroTik RouterOS предоставляет несколько встроенных инструментов для тестирования пропускной способности: Bandwidth Server/Client для тестов между двумя MikroTik-устройствами и Speed Test для проверки скорости интернет-соединения. Bandwidth Test — незаменимый инструмент для диагностики сетевых проблем: определения реальной пропускной способности канала, выявления узких мест, проверки QoS-политик и оценки производительности оборудования. В этой статье настроим серверную и клиентскую части, разберём TCP и UDP-тестирование, настроим автоматические тесты по расписанию и разберём типичные ошибки.
Все команды приведены для RouterOS 7.20+.
Описание
Bandwidth Server
Bandwidth Server (/tool/bandwidth-server) — серверная часть, которая слушает входящие соединения на TCP-порту 2000. Должен быть включён на устройстве, к которому вы тестируете скорость. Клиент устанавливает управляющее TCP-соединение, аутентифицируется (логин/пароль пользователя RouterOS) и начинает передачу тестовых данных.
По умолчанию Bandwidth Server включён на новых устройствах MikroTik. Это удобно для внутреннего тестирования, но представляет угрозу безопасности, если сервер доступен из интернета.
Bandwidth Test Client
Bandwidth Test Client (/tool/bandwidth-test) — инициирует тестирование к серверу. Поддерживает протоколы TCP и UDP, направления send/receive/both. Результаты отображаются в реальном времени: скорость отправки (tx), приёма (rx), потери пакетов (для UDP).
Speed Test
Начиная с RouterOS 7.13, доступна команда /tool/speed-test — аналог Speedtest.net/Ookla, но встроенный в роутер. Тестирует скорость до ближайшего сервера MikroTik (или указанного вами). Не требует второго устройства MikroTik.
TCP vs UDP
| Параметр | TCP | UDP |
|---|---|---|
| Контроль потока | Да (TCP congestion control) | Нет |
| Потери пакетов | Авторетрансмиссия | Показываются в статистике |
| Точность | «Безопасная» скорость (TCP overhead) | Ближе к реальной пропускной способности |
| Нагрузка CPU | Выше | Ниже |
| Применение | Тесты через WAN/интернет | Тесты в LAN |
TCP показывает скорость, которую реально получат приложения. UDP показывает «сырую» пропускную способность канала, но часть пакетов может быть потеряна — это нормально.
Настройка
Шаг 1: Настройка Bandwidth Server
[admin@MikroTik] ># Проверить текущий статус сервера /tool/bandwidth-server/print # enabled: yes # authenticate: yes # max-sessions: 100 # allocate-udp-ports-from: 2000 # Включить сервер (если выключен) /tool/bandwidth-server/set enabled=yes # Обязательно включить аутентификацию /tool/bandwidth-server/set authenticate=yes # Ограничить число одновременных сессий /tool/bandwidth-server/set max-sessions=5
Шаг 2: Создание пользователя для тестирования
Не используйте admin-учётку для bandwidth test. Создайте отдельного пользователя:
[admin@MikroTik] ># Группа с минимальными правами (read + test) /user/group add name=btest-group policy=read,test # Пользователь для тестирования /user add name=btest password="BtestP@ss2024!" group=btest-group
Шаг 3: Firewall — разрешить порт 2000 (только из LAN!)
[admin@MikroTik] ># Разрешить Bandwidth Test только из локальной сети /ip/firewall/filter add chain=input protocol=tcp dst-port=2000 \ src-address=192.168.88.0/24 action=accept \ comment="Allow Bandwidth Test from LAN" \ place-before=[find where comment="defconf: drop all not coming from LAN"] # ВАЖНО: НЕ открывайте порт 2000 из интернета!
Шаг 4: Запуск Bandwidth Test (клиент)
Тестирование TCP (download — приём данных от сервера):
[admin@MikroTik] >/tool/bandwidth-test address=192.168.88.1 \ user=btest password="BtestP@ss2024!" \ protocol=tcp direction=receive duration=10s # STATUS: running # tx-current: 0bps # rx-current: 943.2Mbps # tx-total-average: 0bps # rx-total-average: 938.7Mbps
Тестирование TCP (upload — отправка данных серверу):
[admin@MikroTik] >/tool/bandwidth-test address=192.168.88.1 \ user=btest password="BtestP@ss2024!" \ protocol=tcp direction=send duration=10s
Тестирование full-duplex (одновременно в обе стороны):
[admin@MikroTik] >/tool/bandwidth-test address=192.168.88.1 \ user=btest password="BtestP@ss2024!" \ protocol=tcp direction=both duration=10s
Тестирование UDP с ограничением скорости:
[admin@MikroTik] >/tool/bandwidth-test address=192.168.88.1 \ user=btest password="BtestP@ss2024!" \ protocol=udp direction=receive duration=10s \ local-tx-speed=100M remote-tx-speed=100M # STATUS: running # tx-current: 0bps # rx-current: 99.8Mbps # lost-packets: 12 # tx-total-average: 0bps # rx-total-average: 99.1Mbps
Важно для UDP: всегда указывайте local-tx-speed и remote-tx-speed, иначе тест попытается отправить данные на максимальной скорости, что может перегрузить канал и CPU.
Шаг 5: Speed Test (Ookla-подобный)
[admin@MikroTik] ># Тест до ближайшего сервера MikroTik /tool/speed-test address=speed.mikrotik.com # Тест до конкретного сервера /tool/speed-test address=speed-test.example.com # Результат: # status: done # ping: 4ms # jitter: 1ms # download: 94.5Mbps # upload: 47.2Mbps
Автоматический тест скорости по расписанию
Полезный скрипт для ISP: каждый час тестировать скорость канала и записывать результаты в лог:
[admin@MikroTik] >/system/script add name=auto-speed-test dont-require-permissions=no source={ :local ts [/system/clock/get time] :local ds [/system/clock/get date] :log info ("Speed test started at ".$ds." ".$ts) :do { /tool/bandwidth-test address=192.168.88.1 \ user=btest password="BtestP@ss2024!" \ protocol=tcp direction=receive duration=10s \ as-value :local result [/tool/bandwidth-test address=192.168.88.1 \ user=btest password="BtestP@ss2024!" \ protocol=tcp direction=receive duration=10s] :log info ("Speed test result: ".$result) } on-error={ :log error "Speed test FAILED" } } # Запуск каждый час /system/scheduler add name=hourly-speed-test interval=1h \ on-event="/system/script/run auto-speed-test"
Альтернативный вариант — сохранение результата в глобальную переменную для мониторинга:
[admin@MikroTik] >/system/script add name=speed-test-log dont-require-permissions=no source={ :local ts [/system/clock/get time] :do { :local pingResult [/ping 192.168.88.1 count=5] :log info ("Ping test: ".$pingResult."/5 packets received at ".$ts) } on-error={ :log error "Ping test failed" } }
Bandwidth Test Server для абонентов ISP
ISP может предоставить своим абонентам bandwidth test сервер для проверки скорости внутри сети провайдера (без учёта интернет-канала):
[admin@MikroTik] ># На сервере провайдера (мощный роутер CCR/CHR) /tool/bandwidth-server/set enabled=yes authenticate=yes max-sessions=20 # Создать группу и пользователя для абонентов /user/group add name=subscriber-test policy=read,test /user add name=speedtest password="TestMySpeed!" group=subscriber-test # Firewall: разрешить только из абонентских подсетей /ip/firewall/filter add chain=input protocol=tcp dst-port=2000 \ src-address=10.0.0.0/8 action=accept \ comment="Allow BTest from subscriber networks" add chain=input protocol=tcp dst-port=2000 \ action=drop comment="Drop BTest from everywhere else"
Безопасность: отключение на WAN
Критически важно: Bandwidth Server на порту 2000, доступный из интернета, позволяет злоумышленнику:
- Нагрузить канал и CPU роутера (DoS).
- Измерить вашу пропускную способность.
- Подобрать пароль (brute-force) к учётной записи RouterOS.
[admin@MikroTik] ># Вариант 1: Полностью отключить BTest Server /tool/bandwidth-server/set enabled=no # Вариант 2: Заблокировать порт 2000 на WAN (если сервер нужен внутри) /ip/firewall/filter add chain=input protocol=tcp dst-port=2000 \ in-interface=ether1-WAN action=drop \ comment="Block BTest from WAN" \ place-before=[find where comment="defconf: drop all not coming from LAN"] # Вариант 3: Разрешить только из списка доверенных IP /ip/firewall/address-list add list=btest-allowed address=192.168.88.0/24 add list=btest-allowed address=10.0.0.0/24 /ip/firewall/filter add chain=input protocol=tcp dst-port=2000 \ src-address-list=btest-allowed action=accept \ comment="Allow BTest from trusted networks" add chain=input protocol=tcp dst-port=2000 \ action=drop comment="Drop BTest from all others"
Проверка
[admin@MikroTik] ># Статус сервера /tool/bandwidth-server/print # Активные сессии (если кто-то тестирует прямо сейчас) /tool/bandwidth-server/sessions/print # Проверка firewall-правила /ip/firewall/filter/print where dst-port=2000 # Проверка, что порт 2000 слушает /ip/service/print # (BTest Server не в списке /ip/service, он управляется отдельно) # Быстрый тест к локальному серверу /tool/bandwidth-test address=127.0.0.1 \ user=admin password="yourpassword" \ protocol=tcp direction=receive duration=5s
Типичные ошибки
1. CPU-bound тест (результаты ограничены процессором)
Проблема: на устройствах начального уровня (hAP lite, hAP ac lite) процессор не справляется с генерацией/обработкой тестового трафика. Результат показывает не скорость канала, а производительность CPU.
Признаки:
- CPU загрузка 100% во время теста.
- Скорость значительно ниже заявленной для интерфейса (например, 300 Mbps вместо 1 Gbps на гигабитном порту).
Решение:
[admin@MikroTik] ># Проверить загрузку CPU во время теста /system/resource/print # cpu-load: 100% <-- тест ограничен CPU # Используйте UDP вместо TCP (меньше нагрузка на CPU) /tool/bandwidth-test address=192.168.88.1 \ user=btest password="BtestP@ss2024!" \ protocol=udp direction=receive duration=10s \ remote-tx-speed=500M
Для точного тестирования гигабитных каналов используйте мощные модели: RB5009, CCR2004, CCR2116 или CHR на мощном сервере.
2. Firewall блокирует порт 2000
Проблема: клиент не может подключиться к серверу — connection timeout.
Диагностика:
[admin@MikroTik] ># На сервере: проверить, что BTest Server включён /tool/bandwidth-server/print # На сервере: проверить firewall /ip/firewall/filter/print where action=drop # Временно отключить firewall для теста (только для диагностики!) # /ip/firewall/filter/disable [find where chain=input] # НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ОБРАТНО! # Проверить с клиента /tool/bandwidth-test address=192.168.88.1 \ user=btest password="BtestP@ss2024!" \ protocol=tcp direction=receive duration=5s
3. Ошибка аутентификации
Проблема: login failure при попытке запустить bandwidth test.
Решение:
[admin@MikroTik] ># Проверить, что пользователь существует и имеет право test /user/print where name=btest # GROUP: btest-group /user/group/print where name=btest-group # POLICY: read,test <-- должен быть "test" # Если authenticate=no, пароль не проверяется (небезопасно!) /tool/bandwidth-server/print # authenticate: yes <-- должно быть yes
4. UDP-тест показывает огромные потери пакетов
Проблема: UDP-тест без ограничения скорости отправляет максимум, перегружая канал.
Решение: всегда указывайте ожидаемую скорость:
[admin@MikroTik] ># Неправильно (без ограничения) /tool/bandwidth-test address=192.168.88.1 \ user=btest password="BtestP@ss2024!" \ protocol=udp direction=receive duration=10s # lost-packets: 50000+ <-- канал перегружен # Правильно (с ограничением) /tool/bandwidth-test address=192.168.88.1 \ user=btest password="BtestP@ss2024!" \ protocol=udp direction=receive duration=10s \ remote-tx-speed=100M # lost-packets: 5 <-- нормально
5. Speed Test не работает
Проблема: /tool/speed-test возвращает ошибку или timeout.
Возможные причины:
- Нет доступа к интернету (проверьте gateway и DNS).
- Firewall блокирует исходящие соединения.
- Указанный сервер недоступен.
[admin@MikroTik] ># Проверить DNS /ping speed.mikrotik.com count=3 # Проверить доступность сервера /tool/fetch url="https://speed.mikrotik.com" mode=https keep-result=no # Попробовать другой сервер /tool/speed-test address=speed2.mikrotik.com
Bandwidth Test — мощный диагностический инструмент, но используйте его с осторожностью в production-сетях. Тест генерирует значительную нагрузку на канал и CPU, что может повлиять на работу других сервисов. Всегда отключайте Bandwidth Server на WAN-интерфейсах и ограничивайте доступ списками адресов.
# Проверить текущий статус сервера
/tool/bandwidth-server/print
# enabled: yes
# authenticate: yes
# max-sessions: 100
# allocate-udp-ports-from: 2000
# Включить сервер (если выключен)
/tool/bandwidth-server/set enabled=yes
# Обязательно включить аутентификацию
/tool/bandwidth-server/set authenticate=yes
# Ограничить число одновременных сессий
/tool/bandwidth-server/set max-sessions=5
# Группа с минимальными правами (read + test)
/user/group
add name=btest-group policy=read,test
# Пользователь для тестирования
/user
add name=btest password="BtestP@ss2024!" group=btest-group
# Разрешить Bandwidth Test только из локальной сети
/ip/firewall/filter
add chain=input protocol=tcp dst-port=2000 \
src-address=192.168.88.0/24 action=accept \
comment="Allow Bandwidth Test from LAN" \
place-before=[find where comment="defconf: drop all not coming from LAN"]
# ВАЖНО: НЕ открывайте порт 2000 из интернета!
/tool/bandwidth-test address=192.168.88.1 \
user=btest password="BtestP@ss2024!" \
protocol=tcp direction=receive duration=10s
# STATUS: running
# tx-current: 0bps
# rx-current: 943.2Mbps
# tx-total-average: 0bps
# rx-total-average: 938.7Mbps
/tool/bandwidth-test address=192.168.88.1 \
user=btest password="BtestP@ss2024!" \
protocol=tcp direction=send duration=10s
/tool/bandwidth-test address=192.168.88.1 \
user=btest password="BtestP@ss2024!" \
protocol=tcp direction=both duration=10s
/tool/bandwidth-test address=192.168.88.1 \
user=btest password="BtestP@ss2024!" \
protocol=udp direction=receive duration=10s \
local-tx-speed=100M remote-tx-speed=100M
# STATUS: running
# tx-current: 0bps
# rx-current: 99.8Mbps
# lost-packets: 12
# tx-total-average: 0bps
# rx-total-average: 99.1Mbps
# Тест до ближайшего сервера MikroTik
/tool/speed-test address=speed.mikrotik.com
# Тест до конкретного сервера
/tool/speed-test address=speed-test.example.com
# Результат:
# status: done
# ping: 4ms
# jitter: 1ms
# download: 94.5Mbps
# upload: 47.2Mbps
/system/script
add name=auto-speed-test dont-require-permissions=no source={
:local ts [/system/clock/get time]
:local ds [/system/clock/get date]
:log info ("Speed test started at ".$ds." ".$ts)
:do {
/tool/bandwidth-test address=192.168.88.1 \
user=btest password="BtestP@ss2024!" \
protocol=tcp direction=receive duration=10s \
as-value
:local result [/tool/bandwidth-test address=192.168.88.1 \
user=btest password="BtestP@ss2024!" \
protocol=tcp direction=receive duration=10s]
:log info ("Speed test result: ".$result)
} on-error={
:log error "Speed test FAILED"
}
}
# Запуск каждый час
/system/scheduler
add name=hourly-speed-test interval=1h \
on-event="/system/script/run auto-speed-test"
/system/script
add name=speed-test-log dont-require-permissions=no source={
:local ts [/system/clock/get time]
:do {
:local pingResult [/ping 192.168.88.1 count=5]
:log info ("Ping test: ".$pingResult."/5 packets received at ".$ts)
} on-error={
:log error "Ping test failed"
}
}
# На сервере провайдера (мощный роутер CCR/CHR)
/tool/bandwidth-server/set enabled=yes authenticate=yes max-sessions=20
# Создать группу и пользователя для абонентов
/user/group
add name=subscriber-test policy=read,test
/user
add name=speedtest password="TestMySpeed!" group=subscriber-test
# Firewall: разрешить только из абонентских подсетей
/ip/firewall/filter
add chain=input protocol=tcp dst-port=2000 \
src-address=10.0.0.0/8 action=accept \
comment="Allow BTest from subscriber networks"
add chain=input protocol=tcp dst-port=2000 \
action=drop comment="Drop BTest from everywhere else"
# Вариант 1: Полностью отключить BTest Server
/tool/bandwidth-server/set enabled=no
# Вариант 2: Заблокировать порт 2000 на WAN (если сервер нужен внутри)
/ip/firewall/filter
add chain=input protocol=tcp dst-port=2000 \
in-interface=ether1-WAN action=drop \
comment="Block BTest from WAN" \
place-before=[find where comment="defconf: drop all not coming from LAN"]
# Вариант 3: Разрешить только из списка доверенных IP
/ip/firewall/address-list
add list=btest-allowed address=192.168.88.0/24
add list=btest-allowed address=10.0.0.0/24
/ip/firewall/filter
add chain=input protocol=tcp dst-port=2000 \
src-address-list=btest-allowed action=accept \
comment="Allow BTest from trusted networks"
add chain=input protocol=tcp dst-port=2000 \
action=drop comment="Drop BTest from all others"
# Статус сервера
/tool/bandwidth-server/print
# Активные сессии (если кто-то тестирует прямо сейчас)
/tool/bandwidth-server/sessions/print
# Проверка firewall-правила
/ip/firewall/filter/print where dst-port=2000
# Проверка, что порт 2000 слушает
/ip/service/print
# (BTest Server не в списке /ip/service, он управляется отдельно)
# Быстрый тест к локальному серверу
/tool/bandwidth-test address=127.0.0.1 \
user=admin password="yourpassword" \
protocol=tcp direction=receive duration=5s
# Проверить загрузку CPU во время теста
/system/resource/print
# cpu-load: 100% <-- тест ограничен CPU
# Используйте UDP вместо TCP (меньше нагрузка на CPU)
/tool/bandwidth-test address=192.168.88.1 \
user=btest password="BtestP@ss2024!" \
protocol=udp direction=receive duration=10s \
remote-tx-speed=500M
# На сервере: проверить, что BTest Server включён
/tool/bandwidth-server/print
# На сервере: проверить firewall
/ip/firewall/filter/print where action=drop
# Временно отключить firewall для теста (только для диагностики!)
# /ip/firewall/filter/disable [find where chain=input]
# НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ОБРАТНО!
# Проверить с клиента
/tool/bandwidth-test address=192.168.88.1 \
user=btest password="BtestP@ss2024!" \
protocol=tcp direction=receive duration=5s
# Проверить, что пользователь существует и имеет право test
/user/print where name=btest
# GROUP: btest-group
/user/group/print where name=btest-group
# POLICY: read,test <-- должен быть "test"
# Если authenticate=no, пароль не проверяется (небезопасно!)
/tool/bandwidth-server/print
# authenticate: yes <-- должно быть yes
# Неправильно (без ограничения)
/tool/bandwidth-test address=192.168.88.1 \
user=btest password="BtestP@ss2024!" \
protocol=udp direction=receive duration=10s
# lost-packets: 50000+ <-- канал перегружен
# Правильно (с ограничением)
/tool/bandwidth-test address=192.168.88.1 \
user=btest password="BtestP@ss2024!" \
protocol=udp direction=receive duration=10s \
remote-tx-speed=100M
# lost-packets: 5 <-- нормально
# Проверить DNS
/ping speed.mikrotik.com count=3
# Проверить доступность сервера
/tool/fetch url="https://speed.mikrotik.com" mode=https keep-result=no
# Попробовать другой сервер
/tool/speed-test address=speed2.mikrotik.com