Traffic Flow (NetFlow) на MikroTik — экспорт статистики
Traffic Flow (NetFlow) на MikroTik — экспорт статистики трафика
Traffic Flow — встроенная функция MikroTik RouterOS для экспорта статистики сетевого трафика в формате NetFlow/IPFIX. Она позволяет отправлять данные о каждом соединении (source IP, destination IP, порты, протокол, объём трафика) на внешний коллектор для анализа. Это незаменимый инструмент для ответа на вопросы: «кто потребляет трафик?», «какие приложения нагружают канал?», «откуда идёт аномальный трафик?». В отличие от Torch (анализ в реальном времени) и IP Accounting (упрощённая статистика), Traffic Flow экспортирует полные flow-записи с историей хранения на коллекторе. В этом руководстве настроим Traffic Flow на MikroTik, развернём коллектор ntopng через Docker и визуализируем трафик.
Руководство актуально для RouterOS 7.20+.
Описание
Что такое Traffic Flow
Traffic Flow — реализация протоколов NetFlow v5, NetFlow v9 и IPFIX на MikroTik RouterOS. Роутер собирает информацию о каждом IP-потоке (flow), проходящем через него, и периодически отправляет агрегированные записи на внешний коллектор.
Flow — это набор пакетов с одинаковыми параметрами:
- Source IP / Destination IP
- Source Port / Destination Port
- Protocol (TCP, UDP, ICMP)
- Ingress/Egress interface
- ToS/DSCP
Для каждого flow записываются:
- Количество пакетов и байт
- Время начала и окончания потока
- TCP flags (для TCP-потоков)
- Next-hop IP
Версии протоколов
| Версия | Описание | Поддержка MikroTik |
|---|---|---|
| NetFlow v5 | Классический формат, только IPv4 | Да |
| NetFlow v9 | Template-based, IPv4 + IPv6, расширяемый | Да |
| IPFIX | Стандарт IETF (RFC 7011), эволюция NetFlow v9 | Да |
Рекомендация: используйте NetFlow v9 или IPFIX. Они поддерживают IPv6, шаблоны (templates) и потребляют меньше ресурсов за счёт оптимизированного формата.
Traffic Flow vs Torch vs IP Accounting
| Параметр | Traffic Flow | Torch | IP Accounting |
|---|---|---|---|
| Тип анализа | Экспорт на коллектор | Реальное время | Реальное время |
| История | На коллекторе (дни, месяцы, годы) | Нет (только live) | Нет (таблица ограничена) |
| Детализация | Полная (IP, порт, протокол, AS) | Полная | Только IP + bytes |
| Влияние на CPU | Минимальное (v9/IPFIX) | Значительное | Минимальное |
| Визуализация | Внешний софт (ntopng, Grafana) | Winbox/CLI | CLI/API |
| Масштаб | Enterprise | Диагностика | Простой учёт |
| Назначение | Постоянный мониторинг трафика | Диагностика в моменте | Подсчёт трафика по IP |
Когда использовать Traffic Flow:
- Нужна историческая статистика трафика (кто, когда, сколько)
- Анализ top talkers и приложений
- Обнаружение аномалий и DDoS
- Отчётность для руководства или клиентов
- Планирование ёмкости каналов
Коллекторы (приёмники данных)
Traffic Flow отправляет данные по UDP на внешний коллектор. Популярные коллекторы:
| Коллектор | Лицензия | Описание |
|---|---|---|
| ntopng | Community (бесплатно) / Enterprise | Веб-интерфейс, анализ в реальном времени, top talkers |
| Elastiflow | Open / Enterprise | Интеграция с Elasticsearch + Kibana |
| nfdump/nfsen | Open-source | CLI-утилиты + веб-интерфейс (классика) |
| PRTG | Коммерческий | Windows-система мониторинга с NetFlow-сенсором |
| Grafana + flow plugin | Open-source | Визуализация через Grafana |
| ManageEngine NetFlow | Коммерческий | Enterprise-решение |
| Akvorado | Open-source | Современный коллектор (Go + ClickHouse) |
Настройка
Шаг 1: включение Traffic Flow на MikroTik
Базовая настройка — экспорт flow-данных со всех интерфейсов на коллектор:
[admin@MikroTik] ># Включаем Traffic Flow /ip/traffic-flow/set enabled=yes \ interfaces=all \ cache-entries=256k \ active-flow-timeout=1m \ inactive-flow-timeout=15s # Проверяем настройки /ip/traffic-flow/print
Параметры:
interfaces— на каких интерфейсах собирать flow.all— все интерфейсы. Для экономии ресурсов можно указать только WAN:
[admin@MikroTik] ># Только WAN-интерфейс /ip/traffic-flow/set interfaces=ether1 # Несколько интерфейсов /ip/traffic-flow/set interfaces=ether1,ether2,sfp1
-
cache-entries— размер кэша (количество активных flow в памяти). 256k подходит для большинства случаев. Для ISP с 10+ Gbps трафика — увеличьте до 512k или 1M. -
active-flow-timeout— максимальное время жизни активного flow перед отправкой на коллектор. 1 минута — хороший баланс между детализацией и нагрузкой. -
inactive-flow-timeout— через сколько секунд без пакетов flow считается завершённым. 15 секунд — стандартное значение.
Шаг 2: добавление коллектора (target)
[admin@MikroTik] ># Добавляем коллектор (ntopng на сервере 10.0.1.50) /ip/traffic-flow/target add dst-address=10.0.1.50 port=2055 version=9 # Для IPFIX /ip/traffic-flow/target add dst-address=10.0.1.50 port=4739 version=ipfix # Можно отправлять на несколько коллекторов одновременно /ip/traffic-flow/target add dst-address=10.0.1.51 port=2055 version=9 # Проверяем targets /ip/traffic-flow/target/print
Параметры target:
dst-address— IP-адрес сервера с коллекторомport— UDP-порт коллектора (стандартные: 2055 для NetFlow, 4739 для IPFIX)version— протокол:5(NetFlow v5),9(NetFlow v9),ipfix(IPFIX)
Важно: трафик от MikroTik к коллектору идёт по UDP. Убедитесь, что firewall не блокирует этот трафик.
[admin@MikroTik] ># Разрешаем исходящий UDP к коллектору (если есть output filter) /ip/firewall/filter add chain=output action=accept protocol=udp \ dst-address=10.0.1.50 dst-port=2055 \ comment="Allow Traffic Flow to collector"
Шаг 3: развёртывание ntopng через Docker
ntopng — один из лучших open-source коллекторов NetFlow с веб-интерфейсом. Развернём его через Docker.
bashmkdir -p /opt/ntopng && cd /opt/ntopng
Файл docker-compose.yml:
yamlversion: '3.8' services: ntopng: image: ntop/ntopng:stable container_name: ntopng restart: unless-stopped ports: - "3000:3000" # Web UI - "2055:2055/udp" # NetFlow v5/v9 - "4739:4739/udp" # IPFIX command: > --http-port=3000 --disable-login=0 --community -i=tcp://127.0.0.1:5556 -F=nindex volumes: - ntopng-data:/var/lib/ntopng environment: - TZ=Europe/Moscow nprobe: image: ntop/nprobe:stable container_name: nprobe restart: unless-stopped ports: - "2056:2055/udp" command: > --zmq=tcp://ntopng:5556 --collector-port=2055 -i=none -n=none depends_on: - ntopng volumes: ntopng-data:
Запустите стек:
bashdocker compose up -d
Откройте http://<IP-сервера>:3000. Логин по умолчанию: admin / admin. Смените пароль после первого входа.
Альтернатива: ntopng без nprobe (simplified):
Для приёма NetFlow напрямую в ntopng (без nprobe):
yamlservices: ntopng: image: ntop/ntopng:stable container_name: ntopng restart: unless-stopped network_mode: host command: > --http-port=3000 --disable-login=0 --community -i=ntopng -i="nProbe;nprobe -i none --collector-port 2055 -n none" volumes: - ntopng-data:/var/lib/ntopng volumes: ntopng-data:
Примечание: ntopng Community Edition бесплатна, но имеет ограничения: нет исторических данных за период более 5 минут, нет отчётов. Enterprise Edition снимает эти ограничения.
Шаг 4: проверка приёма flow-данных
После настройки MikroTik и запуска коллектора проверьте, что данные поступают.
На MikroTik:
[admin@MikroTik] ># Проверяем статистику Traffic Flow /ip/traffic-flow/print # Должны расти значения: # active-flow-count — количество активных flow # flows-exported — количество экспортированных flow # packets-exported — количество отправленных пакетов
На сервере коллектора:
[admin@MikroTik] ># Проверяем, что UDP-пакеты приходят tcpdump -i any -n udp port 2055 -c 10 # Должны появиться пакеты от IP MikroTik
В ntopng: откройте веб-интерфейс → Flows → должны появиться активные flow с IP-адресами из вашей сети.
Шаг 5: настройка Elastiflow (альтернативный коллектор)
Elastiflow — коллектор NetFlow/IPFIX с визуализацией в Kibana. Подходит для организаций, уже использующих ELK Stack.
yaml# docker-compose.yml для Elastiflow version: '3.8' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0 container_name: elasticsearch environment: - discovery.type=single-node - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms2g -Xmx2g" volumes: - es-data:/usr/share/elasticsearch/data ports: - "9200:9200" elastiflow: image: elastiflow/flow-collector:latest container_name: elastiflow environment: EF_FLOW_SERVER_UDP_IP: "0.0.0.0" EF_FLOW_SERVER_UDP_PORT: "2055" EF_OUTPUT_ELASTICSEARCH_ENABLE: "true" EF_OUTPUT_ELASTICSEARCH_ADDRESSES: "http://elasticsearch:9200" ports: - "2055:2055/udp" depends_on: - elasticsearch kibana: image: docker.elastic.co/kibana/kibana:8.12.0 container_name: kibana environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 ports: - "5601:5601" depends_on: - elasticsearch volumes: es-data:
После запуска откройте Kibana (http://<IP>:5601), импортируйте дашборды Elastiflow и наслаждайтесь визуализацией трафика.
Шаг 6: настройка nfdump/nfsen (CLI-анализ)
Для серверов без GUI или для скриптовой обработки:
[admin@MikroTik] ># Установка nfdump apt install -y nfdump # Запуск коллектора nfcapd -w -D -l /var/lib/nfcapd -p 2055 # Анализ: top talkers за последние 5 минут nfdump -R /var/lib/nfcapd -s srcip -n 10 -o extended # Top протоколы nfdump -R /var/lib/nfcapd -s proto -n 10 # Фильтр по IP nfdump -R /var/lib/nfcapd 'src ip 192.168.88.100' # Top destinations для конкретного хоста nfdump -R /var/lib/nfcapd 'src ip 192.168.88.100' -s dstip -n 10
Шаг 7: анализ трафика
После настройки Traffic Flow и коллектора можно анализировать:
Top Talkers (кто потребляет трафик):
В ntopng: Hosts → Top Local Hosts — показывает хосты с наибольшим объёмом трафика.
Через nfdump:
[admin@MikroTik] ># Top 20 источников трафика nfdump -R /var/lib/nfcapd -s srcip -n 20 -o extended # Top 20 с фильтром по времени (последний час) nfdump -R /var/lib/nfcapd -t "2026/03/28.13:00:00-2026/03/28.14:00:00" \ -s srcip -n 20
Анализ приложений (по портам):
В ntopng: Flows → Application Protocol — показывает распределение по приложениям (HTTP, HTTPS, DNS, YouTube, Netflix и т.д.).
[admin@MikroTik] ># Top порты назначения nfdump -R /var/lib/nfcapd -s dstport -n 20 # Только HTTP/HTTPS трафик nfdump -R /var/lib/nfcapd 'dst port 80 or dst port 443' -s srcip -n 20
Обнаружение аномалий:
[admin@MikroTik] ># Хосты с аномально большим количеством flow (возможна DDoS-атака или сканирование) nfdump -R /var/lib/nfcapd -s srcip -n 10 -o "fmt:%sa %fl" -S1 # Подозрительные порты (сканирование) nfdump -R /var/lib/nfcapd 'packets < 3' -s dstport -n 20
Шаг 8: Sampling (для высоконагруженных линков)
При очень большом объёме трафика (10+ Gbps) полная обработка всех пакетов создаёт нагрузку на CPU. Sampling отправляет каждый N-й пакет в flow cache.
[admin@MikroTik] ># Включаем sampling 1:100 (анализируется каждый 100-й пакет) /ip/traffic-flow/set enabled=yes \ interfaces=ether1 \ cache-entries=512k \ active-flow-timeout=1m \ inactive-flow-timeout=15s # В target указываем sampling /ip/traffic-flow/target add dst-address=10.0.1.50 port=2055 version=9
Примечание: Sampling снижает точность, но значительно уменьшает нагрузку. Коллектор учитывает sampling rate и пересчитывает объёмы. Для каналов до 1 Gbps sampling не нужен.
Проверка
Проверка на MikroTik
[admin@MikroTik] ># Статус Traffic Flow /ip/traffic-flow/print # Ожидаемый вывод: # enabled: yes # interfaces: all (или конкретные) # cache-entries: 256k # active-flow-count: > 0 (если есть трафик) # Список targets /ip/traffic-flow/target/print # Проверяем, что target добавлен и адрес корректный # Мониторинг экспорта в реальном времени /ip/traffic-flow/print stats # flows-exported и packets-exported должны расти
Проверка на коллекторе
[admin@MikroTik] ># Проверяем, приходят ли UDP-пакеты tcpdump -i any -n udp port 2055 -c 5 # Проверяем порт (если коллектор уже запущен) ss -tulnp | grep 2055 # Логи ntopng docker logs ntopng --tail 20
Проверка через Torch (сравнение)
Параллельно с Traffic Flow можно запустить Torch и сравнить данные:
[admin@MikroTik] ># Torch — анализ трафика в реальном времени на ether1 /tool/torch interface=ether1 src-address=0.0.0.0/0 \ dst-address=0.0.0.0/0 duration=30s
Top talkers в Torch должны совпадать с данными коллектора.
Типичные ошибки
1. Данные не приходят на коллектор
Симптомы: В ntopng/nfdump пусто, нет flow-записей.
Причины и решения:
- Неправильный IP/порт target:
[admin@MikroTik] ># Проверяем target /ip/traffic-flow/target/print # dst-address и port должны совпадать с настройками коллектора
- Firewall блокирует UDP:
[admin@MikroTik] ># На сервере коллектора iptables -L -n | grep 2055 # Если заблокирован — разрешите iptables -A INPUT -p udp --dport 2055 -j ACCEPT
- Traffic Flow отключён:
[admin@MikroTik] >/ip/traffic-flow/print # enabled: yes ?
- Нет трафика на указанных интерфейсах:
[admin@MikroTik] ># Проверяем, что интерфейс указан правильно /ip/traffic-flow/print # interfaces: all или конкретный интерфейс с трафиком
2. Неправильная версия протокола
Симптомы: Коллектор получает пакеты (tcpdump видит), но не может декодировать.
Причина: Версия протокола на MikroTik не совпадает с ожидаемой коллектором.
Решение:
[admin@MikroTik] ># Проверяем версию /ip/traffic-flow/target/print # Меняем на совместимую /ip/traffic-flow/target/set [find] version=9 # Или для IPFIX /ip/traffic-flow/target/set [find] version=ipfix
ntopng поддерживает все версии. nfdump — v5 и v9. Elastiflow — v9 и IPFIX.
3. Высокая нагрузка на CPU
Симптомы: После включения Traffic Flow CPU загрузка выросла на 10-30%.
Причины:
- NetFlow v5 менее эффективен, чем v9/IPFIX
- Слишком маленький
active-flow-timeout(частая отправка) - Слишком большой объём трафика для данной модели роутера
Решение:
[admin@MikroTik] ># Переключитесь на v9 или IPFIX /ip/traffic-flow/target/set [find] version=ipfix # Увеличьте timeout /ip/traffic-flow/set active-flow-timeout=2m inactive-flow-timeout=30s # Ограничьте interfaces (только WAN) /ip/traffic-flow/set interfaces=ether1 # Для высоконагруженных линков — включите sampling
4. Потеря flow-записей (gaps в данных)
Симптомы: В коллекторе видны пробелы в данных.
Причины:
- Переполнение cache на MikroTik
- Потери UDP-пакетов на пути к коллектору
- Коллектор не справляется с объёмом данных
Решение:
[admin@MikroTik] ># Увеличьте cache /ip/traffic-flow/set cache-entries=512k # Проверяем потери (если active-flow-count близок к cache-entries — кэш переполнен) /ip/traffic-flow/print
На коллекторе проверьте, что UDP-буфер достаточного размера:
[admin@MikroTik] ># Увеличиваем UDP-буфер на Linux sysctl -w net.core.rmem_max=33554432 sysctl -w net.core.rmem_default=33554432
5. Traffic Flow не работает с FastTrack
Симптомы: Включён FastTrack, но Traffic Flow не видит большую часть трафика.
Причина: FastTrack обрабатывает пакеты в обход обычного pipeline, и Traffic Flow не видит эти пакеты.
Решение:
[admin@MikroTik] ># Вариант 1: отключите FastTrack (увеличится нагрузка на CPU) /ip/firewall/filter/disable [find where action=fasttrack-connection] # Вариант 2: используйте connection-mark для исключения из FastTrack # только трафик, который нужно анализировать через Traffic Flow /ip/firewall/mangle add chain=forward action=mark-connection new-connection-mark=no-fasttrack \ src-address=192.168.88.0/24 passthrough=yes # Вариант 3: смириться с неполными данными # FastTrack-трафик = established+related, его объём можно оценить по интерфейсным счётчикам
Важно: Это основное ограничение Traffic Flow на MikroTik. Если вам нужна полная статистика по всему трафику — FastTrack придётся отключить.
6. Время flow не совпадает с реальным
Причина: Рассинхронизация времени на MikroTik. Flow записи содержат timestamp роутера.
[admin@MikroTik] ># Настройте NTP /system/ntp/client/set enabled=yes /system/ntp/client/servers add address=pool.ntp.org add address=time.google.com # Проверяем время /system/clock/print
7. Docker-контейнер ntopng не стартует
[admin@MikroTik] ># Проверяем логи docker logs ntopng # Частая ошибка: порт занят ss -tulnp | grep 3000 # Проверяем, что UDP-порт 2055 свободен ss -tulnp | grep 2055 # Перезапуск docker compose down && docker compose up -d
Traffic Flow — мощный и при этом легковесный инструмент для экспорта статистики трафика с MikroTik. Настройка занимает 5 минут: включили Traffic Flow, указали target-коллектор — и данные пошли. Для визуализации рекомендуем ntopng (быстрый старт) или Elastiflow (если уже есть ELK). Главное ограничение — несовместимость с FastTrack: если он включён, часть трафика не попадёт в flow-статистику. Для полного покрытия используйте Traffic Flow совместно с интерфейсными счётчиками (SNMP) и Torch для точечной диагностики.
# Включаем Traffic Flow /ip/traffic-flow/set enabled=yes \ interfaces=all \ cache-entries=256k \ active-flow-timeout=1m \ inactive-flow-timeout=15s # Проверяем настройки /ip/traffic-flow/print # Только WAN-интерфейс /ip/traffic-flow/set interfaces=ether1 # Несколько интерфейсов /ip/traffic-flow/set interfaces=ether1,ether2,sfp1 # Добавляем коллектор (ntopng на сервере 10.0.1.50) /ip/traffic-flow/target add dst-address=10.0.1.50 port=2055 version=9 # Для IPFIX /ip/traffic-flow/target add dst-address=10.0.1.50 port=4739 version=ipfix # Можно отправлять на несколько коллекторов одновременно /ip/traffic-flow/target add dst-address=10.0.1.51 port=2055 version=9 # Проверяем targets /ip/traffic-flow/target/print # Разрешаем исходящий UDP к коллектору (если есть output filter) /ip/firewall/filter add chain=output action=accept protocol=udp \ dst-address=10.0.1.50 dst-port=2055 \ comment="Allow Traffic Flow to collector" mkdir -p /opt/ntopng && cd /opt/ntopng Запустите стек: Откройте `http://<IP-сервера>:3000`. Логин по умолчанию: `admin` / `admin`. Смените пароль после первого входа. **Альтернатива: ntopng без nprobe (simplified):** Для приёма NetFlow напрямую в ntopng (без nprobe): > **Примечание:** ntopng Community Edition бесплатна, но имеет ограничения: нет исторических данных за период более 5 минут, нет отчётов. Enterprise Edition снимает эти ограничения. #### Шаг 4: проверка приёма flow-данных После настройки MikroTik и запуска коллектора проверьте, что данные поступают. На MikroTik: На сервере коллектора: В ntopng: откройте веб-интерфейс → **Flows** → должны появиться активные flow с IP-адресами из вашей сети. #### Шаг 5: настройка Elastiflow (альтернативный коллектор) Elastiflow — коллектор NetFlow/IPFIX с визуализацией в Kibana. Подходит для организаций, уже использующих ELK Stack. После запуска откройте Kibana (`http://<IP>:5601`), импортируйте дашборды Elastiflow и наслаждайтесь визуализацией трафика. #### Шаг 6: настройка nfdump/nfsen (CLI-анализ) Для серверов без GUI или для скриптовой обработки: #### Шаг 7: анализ трафика После настройки Traffic Flow и коллектора можно анализировать: **Top Talkers (кто потребляет трафик):** В ntopng: **Hosts → Top Local Hosts** — показывает хосты с наибольшим объёмом трафика. Через nfdump: **Анализ приложений (по портам):** В ntopng: **Flows → Application Protocol** — показывает распределение по приложениям (HTTP, HTTPS, DNS, YouTube, Netflix и т.д.). **Обнаружение аномалий:** #### Шаг 8: Sampling (для высоконагруженных линков) При очень большом объёме трафика (10+ Gbps) полная обработка всех пакетов создаёт нагрузку на CPU. Sampling отправляет каждый N-й пакет в flow cache. > **Примечание:** Sampling снижает точность, но значительно уменьшает нагрузку. Коллектор учитывает sampling rate и пересчитывает объёмы. Для каналов до 1 Gbps sampling не нужен. ### Проверка #### Проверка на MikroTik #### Проверка на коллекторе #### Проверка через Torch (сравнение) Параллельно с Traffic Flow можно запустить Torch и сравнить данные: Top talkers в Torch должны совпадать с данными коллектора. ### Типичные ошибки #### 1. Данные не приходят на коллектор **Симптомы:** В ntopng/nfdump пусто, нет flow-записей. **Причины и решения:** - **Неправильный IP/порт target:** - **Firewall блокирует UDP:** - **Traffic Flow отключён:** - **Нет трафика на указанных интерфейсах:** #### 2. Неправильная версия протокола **Симптомы:** Коллектор получает пакеты (tcpdump видит), но не может декодировать. **Причина:** Версия протокола на MikroTik не совпадает с ожидаемой коллектором. **Решение:** ntopng поддерживает все версии. nfdump — v5 и v9. Elastiflow — v9 и IPFIX. #### 3. Высокая нагрузка на CPU **Симптомы:** После включения Traffic Flow CPU загрузка выросла на 10-30%. **Причины:** - NetFlow v5 менее эффективен, чем v9/IPFIX - Слишком маленький `active-flow-timeout` (частая отправка) - Слишком большой объём трафика для данной модели роутера **Решение:** #### 4. Потеря flow-записей (gaps в данных) **Симптомы:** В коллекторе видны пробелы в данных. **Причины:** - Переполнение cache на MikroTik - Потери UDP-пакетов на пути к коллектору - Коллектор не справляется с объёмом данных **Решение:** На коллекторе проверьте, что UDP-буфер достаточного размера: #### 5. Traffic Flow не работает с FastTrack **Симптомы:** Включён FastTrack, но Traffic Flow не видит большую часть трафика. **Причина:** FastTrack обрабатывает пакеты в обход обычного pipeline, и Traffic Flow не видит эти пакеты. **Решение:** > **Важно:** Это основное ограничение Traffic Flow на MikroTik. Если вам нужна полная статистика по всему трафику — FastTrack придётся отключить. #### 6. Время flow не совпадает с реальным **Причина:** Рассинхронизация времени на MikroTik. Flow записи содержат timestamp роутера. #### 7. Docker-контейнер ntopng не стартует