{{indexmenu_n>3}}
====== Параметры и значения ======
===== Обязательные параметры =====
Чтобы включить функционал роутера, в 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. При включении этой опции:
- ARP абонента к шлюзу - обрабатывается fastDPI только если абонент и шлюз в одном VRF
- ICMP ping шлюза - обрабатывается fastDPI только если абонент и шлюз в одном VRF
- local interconnect - применяется только если оба абонента в одном VRF
''bras_egress_filtering'' - фильтрация исходящего трафика subs→inet (битовая маска). По умолчанию отключена (0). При включении этой опции пакет будет дропнут при выполнении следующих условий:
- IP-адрес абонента (srcIP) неизвестный для L2 BRAS
- bras_term_by_as = 0
- 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 с тем же атрибутом.