Чтобы включить функционал роутера, в 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 |
Для каждого 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.
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-подсеть.
В 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.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-команд по просмотру текущего состояния роутера. Полный список команд см.
fdpi_cli help router
Также не забывайте, что построением таблицы маршрутизации по BGP, OSPF и пр. занимается BIRD, у которого есть собственная утилита командной строки birdc и собственный конфигурационный файл с развитой системой команд по фильтрации, заданию static-маршрутов и пр.
Кроме того, стандартная утилита Linux ip дает полный контроль над kernel route table. При использовании утилиты ip не забывайте указывать правильный netns (router_netns) и номер таблицы маршрутизации (router_kernel_table).
Настройки router_netns и router_kernel_table задают VRF по умолчанию (default VRF) и применяются при описании других VRF как значения по умолчанию для соответствующих параметров VRF.
При подготовке fastDPI к работе в режиме роутера администратору нужно создать необходимые netns и TAP-интерфейсы для отвода трафика на route-демоны. В конфигурации fastdpi.conf указываются уже готовые (существующие) netns и TAP-интерфейсы, только в этом случае запустится СКАТ.
Каждая 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. При включении этой опции:
bras_egress_filtering - фильтрация исходящего трафика subs→inet (битовая маска). По умолчанию отключена (0). При включении этой опции пакет будет дропнут при выполнении следующих условий:
В описание 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.
router_device должны быть указаны разные tap и peer интерфейсы. Например, для первого — tap=dpi_ospf и peer=rib_ospf, для второго — tap=dpi_bgp и peer=rib_bgp.
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 с тем же атрибутом.