Добрый день! Меня зовут Михолап Константин. Работаю в небольшом операторе связи инженером, а вот в каком уже поймете по AS и страничке в PeeringDB.
В 2025-ом году никого уже не удивить наличием возможности визуализировать входящий трафик для разного рода ISP или ЦОД, поэтому возможно Вы уже слышали что-то про Akvorado.

В рамках этой статьи познакомимся с адаптацией такого программного комплекса инструмента Akvorado. И так, Akvorado - это Netflow-коллектор с функциями визуализации собираемого трафика. К публике он вышел в 2022 году, о нем много кто слышал, я уверен. Были разные материалы например в linkmeup. Очень прост для установки, развертывания и возможно даже обслуживания (если вы чуть-чуть знаете Сlickhouse).

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

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

Нюансы развертывания

Необходимо было адаптировать представленный продукт в сеть оператора, для того чтобы собирать данные о трафике от поставщиков, поэтому в конфиг файле akvorado.yaml зададим заготовленный перечень своих автономных систем.

clickhouse:
  asns:
    31257: Orion Telecom Krk

Далее, чтобы наши данные влезли, пришлось поработать с докером, чтобы использовать свою директорию для контейнеров и данных. Для этого использовал настройку, которую задают в файле /etc/docker/daemon.json

{
    "data-root": "/mnt/disk/akvorado/data"
}

Переходим к файлу inlet.yaml, чтобы отредактировать настройки SNMP, Exporter Classifiers, Interface Classifiers. Можно использовать дефолтный конфиг и адаптировать его под свои нужды. Если у Вас несколько городов очень удобно классифицировать трафик по Exporter.Name и сразу метить его регионом принадлежности.

metadata:
  workers: 10
  provider:
    type: snmp
    communities:
      ::/0: public
core:
  default-sampling-rate: 1000
  workers: 6
  exporter-classifiers:
    - ClassifySiteRegex(Exporter.Name, "^([^-]+)-", "$1")
    - Exporter.Name endsWith ".KRK" && ClassifyRegion("krk")
    - ClassifyTenant("orion")
    - ClassifyRole("clients")
  interface-classifiers:
    - |
      ClassifyConnectivityRegex(Interface.Description, "^(<<|##) (?i)(upstream|transit|peering|pni|ppni|ix):? ", "$2") &&
      ClassifyProviderRegex(Interface.Description, "^(<<|##) (?i)(upstream|transit|peering|pni|ppni|ix):? (\\S+)", "$3") &&
      ClassifyExternal()
    - ClassifyInternal()

Пару слов про импорт сетей, бывает такая потребность если сетей очень много, а их хочется как-то классифицировать, то можно использовать YAML include. Создадим заранее файл network.yaml куда поместим одну сеть для классификации.

109.226.247.0/24:
  name: white-zlgk-clients
  role: clients
  site: white-zlgk
  region: zlgk
  tenant: orion

Чтобы импорт заработал из файла, нам необходимо вернуться в akvorado.yaml и отредактировать его.

clickhouse:
  networks:
    !include "network.yaml"

Суровые реалии российского мелкого провайдеринга будут отображены ниже.

Визуализация данных уже адаптированного akvorado под свои нужды
Визуализация данных уже адаптированного akvorado под свои нужды

Так вот, куча поставщиков, у многих лучшая или худшая связность. Хуже все то, что этим трафиком нужно управлять, потом чувствуешь себя героем мема с Заком Галифианакисом.

Когда планируешь в голове как к тебе придет трафик из этих "ваших" интернетов
Когда планируешь в голове как к тебе придет трафик из этих "ваших" интернетов

Конечно приходится отталкиваться от ширины канала и использовать в лучшем случае BGP Community от магистрального провайдера (например в ещё более лучшем случае использовать BGP Community на Local Preference от той AS откуда идет трафик), в худшем случае использовать самые топорные атрибуты например AS Path...

Или другой мем
Epic Games выпускает обновление Fortnite со Снуп Доггом и мы начинаем смотреть что трафик от Amazon на всех аплинках (P.S. слева Epic Games, справа обычные смертные ISP)
Epic Games выпускает обновление Fortnite со Снуп Доггом и мы начинаем смотреть что трафик от Amazon на всех аплинках (P.S. слева Epic Games, справа обычные смертные ISP)

Необходимость для отслеживания внутреннего трафика

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

Оценка трафика в сторону серых абонентов - сопоставление с NAT-серверами
Оценка трафика в сторону серых абонентов - сопоставление с NAT-серверами

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

Кейс трафика L3-агрегации за L3-агрегацией
Кейс трафика L3-агрегации за L3-агрегацией
Более детальный кейс L3-агрегации за L3-агрегацией

Выводы

Более чем уверен, что большинство из читающих использовали Akvorado по своим нуждам и адаптациям под свою сеть будь то операторы связи или же крупные ЦОД. В рамках статьи постарался показать обычные кейсы только для входящего трафика для тех кто ещё не знаком с этим инструментом. Если вы крупный магистральный оператор с кучей транзитного трафика, конечно Вам не помешает использование BMP благо у Akvorado есть поддержка.

Мое личное мнение, что Akvorado недооцененный продукт, абсолютно бесплатный на данный момент, что немало важно в наше время. Долго наблюдал когда же появится хоть какой-то материал здесь, но его не было.

Всем добра и спасибо за внимание!

Комментарии (5)


  1. ovsp
    14.02.2025 16:39

    Удивительно хабра больше нет но статьи откудато "материализуются".


  1. ZloyKishechnik
    14.02.2025 16:39

    Спасибо за статью. Подскажите, вы сравнивали этот инструмент с elastiflow? Мы активно используем его, однако для нас это довольно "дорого" с точки зрения ресурсов инфраструктуры: нужно держать довольно жирную инсталляцию, так как под капотом elastic.

    Однако основное отличие, почему мы его используем - возможность детально смотреть источник/назначение в развертке по ip-адресам и портам (удобно, например, для детектирования ддосов конкретно в нашем сценарии). Есть ли подобный фунционал тут?


    1. aztec102 Автор
      14.02.2025 16:39

      Добрый день!

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

      Akvorado тоже прожорлив до ресурсов, на данный момент имеется инсталляция с примерно такими спецификациями (16 vCPU, 32 GB RAM, 3 TB SSD). Если следить за таблицами в Clickhouse можно экономить место и не хранить например старые данные.

      В Akvorado есть поля SrcPort и DstPort в случае когда приходится поискать по-конкретному можно так же использовать SrcAddr и DstAddr + есть возможность выбрать протокол через поле Proto.


  1. vurd
    14.02.2025 16:39

    Акворадо умеет сопоставлять IP к AS без наличия поля as origin в flow-данных?


    1. aztec102 Автор
      14.02.2025 16:39

      Приветствую! Не буду врать, точно сказать не могу. Единственный момент что принадлежность страны он определяет через проверку префикса в IPinfo.