Параметры и значения [Документация VAS Experts]

Параметры и значения

Обязательные параметры

Чтобы включить функционал роутера, в fastdpi.conf необходимо активировать параметр:

Параметр Обязательный Описание По умолчанию Тип
router Да Включение роутера:
1/true/on — включён,
0/false/off — выключен
0 cold
router_netns Да Имя network namespace, в котором запущен роут-демон. Используется как netns VRF по умолчанию — cold
router_kernel_table Да Номер таблицы маршрутизации ядра, которую строит роут-демон и читает fastDPI. Используется как таблица VRF по умолчанию — cold
bras_arp_mac Да Виртуальный MAC-адрес СКАТ. Нужен, даже если режимы BRAS не используются —
bras_arp_ip Да Виртуальный IP-адрес СКАТ. Нужен, даже если режимы BRAS не используются —
bras_ipv6_address Да, при IPv6 Глобальный IPv6-адрес СКАТ —
bras_ipv6_link_local Да, при IPv6 IPv6 link-local адрес СКАТ (префикс FE80::/10) вычисляется по bras_arp_mac

Дополнительные параметры

Параметр Описание По умолчанию Тип
router_max_ip4_route_count Максимум маршрутов IPv4 в одной VRF. Память выделяется при старте, задавайте с запасом 20–30% 1000000 cold
router_max_ip6_route_count Максимум маршрутов IPv6 в одной VRF. Память выделяется при старте, задавайте с запасом 20–30% 200000 cold
router_multipath_page Максимальное число страниц для multi-path маршрутов (64 маршрута на страницу) 8192
router_fib_refresh Период проверки изменений и пересборки FIB, секунд.
Не рекомендуем устанавливать значение меньше чем 5 секунд
15 hot
router_arp_cache_size Максимальный размер ARP-кеша; СКАТ содержит отдельные кеши этого размера для IPv4 и IPv6.
Максимум — 32000
1024 cold
router_sched_add_prio Повышение приоритета служебного потока роутера. Менять только в крайнем случае 0 cold
router_bind_core Ядро CP, к которому привязан поток роутера
-1 — автоопределение.
Можно привязать к ядру другого служебного потока (ajb, ctl), НО не к ядру рабочего потока или диспетчера!
-1 cold

Конфигурирование подсетей TAP

Для каждого router_device обязательно должно быть указано, какие подсети отводятся на TAP (фактически, это отведение пакетов протоколов маршрутизации на BIRD). СКАТ будет выделять из общего трафика на девайсе обращения к этим подсетям и направлять все такие пакеты на соответствующий TAP-интерфейс.

Подсети задаются параметрами subnet (для IPv4) и subnet6 (для IPv6) в описании router_device. Каждая подсеть задается отдельным параметром subnet/subnet6. Всего в описании router_device может быть до 16 разных subnet параметров и до 16 разных subnet6. Например, конфигурация ниже задает две IPv4-подсети для девайса 41-00.1, которые будут отводиться на TAP-интерфейс bng-w и одну IPv6-подсеть + link-local адрес интерфейса, с которым взаимодействует bird.

router_device {
    device=41-00.1
    tap=bng-w
    peer=rib-w
    subnet=10.0.2.0/30
    subnet=8.8.8.0/29
    subnet6=2001::1/124
    subnet6=fe80::82d:cff:fe5f:9453/128
}

Где:

  • device — имя девайса из in_dev/out_dev.
  • tap — имя TAP-интерфейса для девайса. По умолчанию — dpi + имя девайса.
  • peer — имя парного TAP-интерфейса в netns. По умолчанию — rib + имя девайса.
  • subnet — IPv4-подсеть, которая отводится на TAP-интерфейс. В примере их две: 10.0.2.0/30 и 8.8.8.0/29.
  • subnet6 — IPv6-подсеть, которая отводится на TAP-интерфейс. В примере 2001::1/124 — это IPv6-подсеть, а fe80::82d:cff:fe5f:9453/128 — link-local адрес интерфейса, с которым взаимодействует BIRD.

Каждая подсеть задаётся отдельным параметром subnet или subnet6.

Если используется IPv6, следует учитывать, что в IPv6 большую роль играют link-local адреса, которые также должны быть указаны в параметрах subnet6.

OSPF использует мультикастные адреса 224.0.0.5 и 224.0.0.6, поэтому если на router_device используется протокол OSPF, эти адреса тоже следует задать в описании router_device:

router_device {
    device=41-00.1
    tap=bng-w
    peer=rib-w

    # OSPF multicast
    subnet=224.0.0.5/32
    subnet=224.0.0.6/32
}
В параметре router_device должна быть указана хотя бы одна IPv4 или IPv6-подсеть.

Задание имен veth-интерфейсов

В fastdpi.conf описываются все TAP-интерфейсы, связанные с девайсами:

router_device {
    device=
    #tap=
    #peer=
}

Где:

  • device — имя девайса из in_dev/out_dev. Обязательный параметр.
  • tap — имя TAP-интерфейса для девайса. Необязательный параметр. По умолчанию — dpi + имя девайса.
  • peer — имя парного TAP-интерфейса в netns. Необязательный параметр. По умолчанию — rib + имя девайса.

:!: Правила синтаксиса секции router_device:

  • открывающая скобка { должна стоять на той же строке, что и имя секции router_device;
  • закрывающая скобка } должна стоять на отдельной строке.

Например, для такой конфигурации:

in_dev=41-00.0
out_dev=41-00.1

где к роутеру подключен только out_dev, описание будет такое:

in_dev=41-00.0
out_dev=41-00.1

router_device {
    device=41-00.1
    tap=bng-w
    peer=rib-w
}

Где:

  • device=41-00.1 — девайс из out_dev, подключённый к роутеру. Для in_dev секция router_device не задаётся.
  • tap=bng-w — имя TAP-интерфейса со стороны СКАТ.
  • peer=rib-w — имя парного интерфейса со стороны роут-демона, в netns.

Имена tap и peer можно не задавать явно — тогда будут использованы имена по умолчанию (‘dpi’/‘rib’ + device). Однако рекомендуется всегда явно задавать понятные имена, например так:

in_dev=41-00.0
out_dev=41-00.1

   # TAP для out_dev:
router_device {
    device=41-00.1
    tap=bng-w
    peer=rib-w
}

   # TAP для in_dev
router_device {
    device=41-00.0
    tap=bng-l
    peer=rib-l
}

Рекомендуемые имена TAP-интерфейсов (стандарт именования для всех примеров):

  • для in_dev (LAN, абонентская сторона): со стороны СКАТ — bng-l, со стороны роут-демона — rib-l;
  • для out_dev (WAN, аплинк): со стороны СКАТ — bng-w, со стороны роут-демона — rib-w.

Отладка и диагностика

Трафик TAP-интерфейса можно записать и утилитой tcpdump, указав имя интерфейса. Но tcpdump не работает с интерфейсами в состоянии DOWN, поэтому записать трафик в момент перехода интерфейса из DOWN в UP с его помощью не получится.
Параметр Описание По умолчанию Тип
router_tap_pcap Запись pcap с TAP-интерфейсов:
all записывает со всех TAP-интерфейсов, либо имена TAP-интерфейсов перечисляются через ;.
Для каждого TAP-интерфейса создаётся отдельный pcap-файл с именем tap_<имя_интерфейса>_xxx.pcap в каталоге, который задаётся параметром ajb_udpi_path (по умолчанию /var/dump/dpi).
— hot
router_tap_pcap_dir Направление записи:
1 — от TAP,
2 — на TAP,
0 или 3 — оба
0 hot
router_tap_pcap_rotate Интервал ротации TAP pcap, секунд. 0 — берётся из ajb_udpi_ftimeout 0 hot
router_rtnl_pcap Запись сообщений rtnetlink в pcap:
1 — да,
0 — нет
Имена pcap-файлов начинаются с префикса rtnl.
Кроме того, если включена запись пакетов в pcap по маске адреса (ajb_save_ip), роутер записывает в pcap ещё и результирующий пакет после маршрутизации. В итоге для одного входящего пакета в pcap будут две записи: исходный пакет и отправленный пакет.
0 hot
router_trace Флаги трассировки отдельных частей роутера
Битовая маска:
0x0001 — переходы состояний FSM обработки rtnetlink (оповещения от роут-демона)
0x0002 — события FSM обработчика rtnetlink (оповещения от роут-демона)
0x0004 — дамп данных rtnetlink
0x0010 — RIB (построение Routing Information Base)
0x0020 — таблица маршрутизации
0x0040 — FIB
0x0080 — ARP-кеш
0x0100 — TAP
0x0200 — TAP pcap
0x0400 — объявления (анонсы)
0 hot

CLI-команды

СКАТ имеет набор CLI-команд по просмотру текущего состояния роутера. Полный список команд см.

fdpi_cli help router
Команды дампа RIB и FIB выводят очень много данных, так как эти структуры могут содержать сотни тысяч записей в случае BGP full view. Поэтому при вызове этих команд советуем перенаправлять вывод в файл.

Также не забывайте, что построением таблицы маршрутизации по BGP, OSPF и пр. занимается BIRD, у которого есть собственная утилита командной строки birdc и собственный конфигурационный файл с развитой системой команд по фильтрации, заданию static-маршрутов и пр.

Кроме того, стандартная утилита Linux ip дает полный контроль над kernel route table. При использовании утилиты ip не забывайте указывать правильный netns (router_netns) и номер таблицы маршрутизации (router_kernel_table).

Параметры VRF

Конфигурирование VRF

Настройки router_netns и router_kernel_table задают VRF по умолчанию (default VRF) и применяются при описании других VRF как значения по умолчанию для соответствующих параметров VRF.

При подготовке fastDPI к работе в режиме роутера администратору нужно создать необходимые netns и TAP-интерфейсы для отвода трафика на route-демоны. В конфигурации fastdpi.conf указываются уже готовые (существующие) netns и TAP-интерфейсы, только в этом случае запустится СКАТ.

Каждая VRF задается отдельной новой секцией в конфигурации роутера:

Описание таблицы маршрутизации (VRF)

router_vrf {
      id=
      netns=
      kernel_table=
      neighbor_cache=
      }
router_default_vrf=

id — строка, уникальный id VRF. Для абонента в Радиус VSA авторизации может быть указана VRF — это и есть данный id. Максимальный размер — 15 символов.
netns — имя netns, из которого вычитывается VRF. Если не задано — считается равным опции router_netns. В этом netns находятся peer TAP-интерфейсы для данной VRF.
kernel_table — номер таблицы маршрутизации ядра для данной VRF. Если не задано — считается равным опции router_kernel_table.
router_default_vrf — строка, id default VRF. Default VRF используется для абонентов, у которых нет свойства vrf_id.
neighbor_cache — cтрока, имя ARP кеша для данной VRF по умолчанию, каждый VRF имеет свой собственный, изолированный от других ARP/Neighbor кеш. Если нужно, чтобы несколько разных VRF имели общий ARP/Neighbor кеш, то следует задать в описании этих VRF одно и то же значение опции neighbor_cache.

Параметры для данной VRF:

max_ip4_route_count — максимальное количество маршрутов IPv4.
max_ip6_route_count — максимальное количество маршрутов IPv6.
multipath_page — максимальное число страниц для распределения multi-path маршрутов. Одна страница вмещает 64 разных multi-path маршрута. На одной странице могут размещаться маршруты нескольких ECMP-групп. Одна группа может быть размещена по нескольким страницам (если количество маршрутов в группе более 64, если нет ограничений на количество маршрутов в демоне роутера)
fib_refresh — интервал обновления FIB.
arp_cache_size — размер ARP-кеша.

Эти параметры определяют требуемую память и частоту обновления для данного VRF. Здесь можно указать значения по умолчанию (берутся из глобальных опций) или переопределить их.

  • Если в конфигурации нет секций router_vrf, режим работы остается прежним: back compatibility, это означает, что в СКАТ описана одна VRF, которая является дефолтной.
  • Если в конфигурации есть секции router_vrf, режим работы — поддержка VRF. При этом ровно одна VRF должна быть дефолтной, то есть должна быть задана опция router_default_vrf=id дефолтной VRF.

bras_vrf_isolation - изоляция VRF. L2 BRAS не изолирует абонентов из разных VRF: Если данный режим включен (1), то абоненты из разных VRF будут изолированы друг от друга. Значение по умолчанию: 0. При включении этой опции:

  1. ARP абонента к шлюзу - обрабатывается fastDPI только если абонент и шлюз в одном VRF
  2. ICMP ping шлюза - обрабатывается fastDPI только если абонент и шлюз в одном VRF
  3. local interconnect - применяется только если оба абонента в одном VRF

bras_egress_filtering - фильтрация исходящего трафика subs→inet (битовая маска). По умолчанию отключена (0). При включении этой опции пакет будет дропнут при выполнении следующих условий:

  1. IP-адрес абонента (srcIP) неизвестный для L2 BRAS
  2. bras_term_by_as = 0
  3. AS абонента не local

Описание router_device

В описание router_device добавляется id VRF. Описание одного интерфейса роутера:

router_device {
      device=
      tap=
      peer=
      vrf=
      subnet=
      subnet=
      subnet6=
      subnet6=
}

device — имя девайса из in_dev/out_dev.
tap — имя TAP-интерфейса для девайса (default='DPI' + device).
peer — имя парного TAP-интерфейса в netns для VRF (default='rib' + device).
vrf — идентификатор VRF, в котором находится peer. Если не указан — считается равным default VRF.

subnet и subnet6 — подсети, отводимые из общего трафика на TAP-девайс. Для router_device обязательно должен быть задан хотя бы один параметр subnet или subnet6!

subnet — перечисление IPv4-подсетей, отводимых из общего трафика на TAP-девайс.
subnet6 — перечисление IPv6-подсетей, отводимых из общего трафика на TAP-девайс.

Каждая IPv4 и IPv6 подсеть указывается отдельно в параметре subnet и subnet6 соответственно. Всего может быть не более 16 параметров subnet и 16 параметров subnet6 для одного router_device.

Подсети для одного порта не должны пересекаться.
Например, BGP1 из VRF1 — подсеть 10.20.30.0/24, BGP2 из VRF2 — подсеть 10.20.30.0/20.
Для каждого router_device должны быть указаны разные tap и peer интерфейсы. Например, для первого — tap=dpi_ospf и peer=rib_ospf, для второго — tap=dpi_bgp и peer=rib_bgp.

Управление VRF абонентами

VRF ID поступает в fastDPI при авторизации, в услуге 254.

VasExperts-Service-Profile = "254:VRF_ID"

Здесь VRF_ID — идентификатор VRF из параметра id секции router_vrf.

Например, чтобы поместить абонента в VRF vrf-iptv из полного примера конфигурации, в ответе RADIUS передаётся атрибут:

VasExperts-Service-Profile = "254:vrf-iptv"

Если атрибут не передан, абонент попадает в VRF по умолчанию (router_default_vrf). Перевести абонента в другой VRF после авторизации можно через CoA с тем же атрибутом.

Была ли полезна эта информация?