{{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 с тем же атрибутом.