Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| dpi:dpi_components:router:start [2023/09/08 14:34] – внешнее изменение 127.0.0.1 | dpi:dpi_components:router:start [Дата неизвестна] (текущий) – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== Маршрутизатор Soft-Router ====== | ||
| - | {{indexmenu_n> | ||
| - | ===== Общее описание ===== | ||
| - | <note tip> | ||
| - | Сам СКАТ не занимается построением таблицы маршрутизации. Он делегирует эту работу проверенным специализированным инструментам, | ||
| - | |||
| - | <note tip> | ||
| - | |||
| - | В будущих версиях в целях экономии памяти возможно появление опциональных специализированных API для связи с тем или иным демоном, | ||
| - | |||
| - | Так как BIRD строит таблицу маршрутизации в ядре ОС, то, во избежание применения этих правил самим Linux-сервером, | ||
| - | |||
| - | Системные требования описаны в разделе [[dpi: | ||
| - | |||
| - | ==== Внутренняя архитектура роутера ==== | ||
| - | {{ : | ||
| - | |||
| - | Данные из kernel route table вычитываются (rtnetlink) в RIB роутера. RIB - это префиксное дерево, | ||
| - | |||
| - | Рабочие потоки используют FIB. Эта структура заточена на многопоточный поиск (LPM - longest prefix match), но не предназначена для модификаций (удаления/ | ||
| - | |||
| - | === Значения по умолчанию в роутере === | ||
| - | |||
| - | **'' | ||
| - | **'' | ||
| - | **'' | ||
| - | **'' | ||
| - | **'' | ||
| - | |||
| - | ==== Общее описание VRF ==== | ||
| - | |||
| - | <note tip>В СКАТ реализован VRF Lite — он разделяет таблицы маршрутизации, | ||
| - | |||
| - | VRF (Virtual Routing and Forwarding instance) — это механизм виртуализации маршрутизации. VRF позволяет создавать виртуальные маршрутизаторы на одном физическом устройстве с независимыми таблицами маршрутизации, | ||
| - | |||
| - | Каждый VRF представляет собой отдельный VPN и не пересекается с другими VRF. | ||
| - | |||
| - | Примером может служить выделение трафика от IPTV приставки, | ||
| - | |||
| - | VRF может называться Virtual Routing Instance в Juniper, VRF в Cisco и MikroTik, но всё это — механизм виртуализации маршрутизации с аналогичными функциями. | ||
| - | |||
| - | ==== Реализация VRF Lite в СКАТ | ||
| - | {{ : | ||
| - | |||
| - | Приставка Lite означает, | ||
| - | |||
| - | Реализация VRF Lite в СКАТ выполнена с помощью Soft-Router, | ||
| - | |||
| - | Демон маршрутизации работает в изолированном пространстве для того, чтобы операционная система не стала роутером. СКАТ направляет всю сигнализацию в роутер, | ||
| - | |||
| - | В текущей версии на данный момент нет поддержки L3VPN и MPLS, но при необходимости можно настроить особую контекстную маршрутизацию. | ||
| - | VRF Lite в СКАТ — это отдельная услуга 254, которая может быть как подключена абоненту, | ||
| - | |||
| - | === Логика работы === | ||
| - | Маршрутизация в СКАТ может происходить с помощью демонов маршрутизации FRR или BIRD — это отдельный процесс, | ||
| - | |||
| - | В этом разделе рассмотрены варианты с одним пространством имен и несколькими таблицами маршрутизации, | ||
| - | |||
| - | GRT (Global routing table) на данной схеме — условное название, | ||
| - | |||
| - | Все правила и фильтры настраиваются в роутере (в данном случае — в BIRD). При запуске BIRD, когда работает СКАТ и поднимается BGP-соседство, | ||
| - | |||
| - | В СКАТ описаны всё те же N VRF, направленные на определенные таблицы с правилами маршрутизации. Каждый инстанс читает из таблиц, | ||
| - | |||
| - | СКАТ имеет свой уникальный ARP-кеш, который он строит на основе ответов на ARP-запросы. В СКАТ может быть несколько ARP-таблиц, | ||
| - | |||
| - | Вследствие **изоляции** в рамках СКАТ одна и та же подсеть может быть доступна через разные hop и разные роутеры и маршрутизироваться по-разному. После того как построится FIB, когда пойдет трафик — сначала авторизуется абонент и помещается в нужный VRF. FIB может обновляться уже после того, как абонент авторизовался. Перемещать абонента между VRF можно динамически после авторизации абонента с помощью CoA. | ||
| - | |||
| - | <note important> | ||
| - | |||
| - | Действия при исходящем от абонента трафике: | ||
| - | - Найти, к какому VRF принадлежит абонент. | ||
| - | - Найти, куда направлен пакет. | ||
| - | - Найти в FIB, на какой hop затерминировать пакет и терминировать. **Актуально только при создании flow, далее nexthop запоминается для flow.** | ||
| - | |||
| - | Действия при входящем трафике: | ||
| - | - Анализ dest. | ||
| - | - Проверка состояния абонента. | ||
| - | - Тест на оригинацию пакета. | ||
| - | |||
| - | Для других групп абонентов все происходит аналогично изолированно, | ||
| - | |||
| - | ===== Конфигурирование подсетей TAP ===== | ||
| - | Для каждого '' | ||
| - | |||
| - | Подсети задаются параметрами '' | ||
| - | Например, | ||
| - | <code bash> | ||
| - | router_device { | ||
| - | # Имя девайса из in_dev/ | ||
| - | device=41-00.1 | ||
| - | # Имя TAP-интерфейса для девайса (default=' | ||
| - | tap=dpi41 | ||
| - | # Имя парного TAP-интерфейса в netns для девайса (default=' | ||
| - | peer=rib41 | ||
| - | |||
| - | # Какие IPv4-подсети отводим на TAP | ||
| - | subnet=10.0.2.0/ | ||
| - | subnet=8.8.8.0/ | ||
| - | |||
| - | # Какие IPv6-подсети отводим на TAP | ||
| - | subnet6=2001:: | ||
| - | # link-local адрес интерфейса, | ||
| - | subnet6=fe80:: | ||
| - | } | ||
| - | </ | ||
| - | задает две IPv4-подсети для девайса '' | ||
| - | |||
| - | <note important> | ||
| - | |||
| - | OSPF использует мультикастные адреса 224.0.0.5 и 224.0.0.6, поэтому если на '' | ||
| - | <code bash> | ||
| - | router_device { | ||
| - | device=41-00.1 | ||
| - | tap=dpi41 | ||
| - | peer=rib41 | ||
| - | |||
| - | # OSPF multicast | ||
| - | subnet=224.0.0.5/ | ||
| - | subnet=224.0.0.6/ | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <note warning> | ||
| - | |||
| - | ===== Создание veth-интерфейсов ===== | ||
| - | <note important> | ||
| - | |||
| - | Пусть у нас в fastdpi.conf заданы следующие девайсы: | ||
| - | <code bash> | ||
| - | in_dev=41-00.0 | ||
| - | out_dev=41-00.1 | ||
| - | </ | ||
| - | Предположим, | ||
| - | <note tip> | ||
| - | Чтобы перенаправить BGP-трафик c '' | ||
| - | |||
| - | Создаем '' | ||
| - | <code bash> | ||
| - | ip netns add bird | ||
| - | </ | ||
| - | |||
| - | Создаем veth пару: | ||
| - | <code bash> | ||
| - | ip link add dpi41-00.1 type veth peer name rib41-00.1 netns bird | ||
| - | </ | ||
| - | |||
| - | rib-интерфейс должен иметь IP-адрес (и IPv6, если IPv6 поддерживается). Этот адрес будет адресом BGP-пира для BGP-соседа. | ||
| - | <code bash> | ||
| - | ip netns exec bird ip address add 10.0.0.4/24 broadcast 10.0.0.255 dev rib41-00.1 | ||
| - | ip netns exec bird ip address add 2098::4/124 dev rib41-00.1 | ||
| - | # включаем ARP на интерфейсе | ||
| - | ip netns exec bird ip link set dev rib41-00.1 arp on | ||
| - | |||
| - | # set tx checksum offload off - выключаем расчет контрольной суммы на интерфейсе | ||
| - | # замечено, | ||
| - | ip netns exec bird ethtool -K rib41-00.1 tx off | ||
| - | </ | ||
| - | <note warning> | ||
| - | |||
| - | dpi-интерфейс **не должен** иметь ни IPv4, ни IPv6 адреса, | ||
| - | <code bash> | ||
| - | ip link set dev dpi41-00.1 arp off | ||
| - | # Disable IPv6 on dpiXXX interfaces (чтобы не было даже link-local адреса) | ||
| - | echo 1>/ | ||
| - | </ | ||
| - | |||
| - | Наконец, | ||
| - | <code bash> | ||
| - | ip link set dpi41-00.1 up | ||
| - | ip netns exec bird ip link set lo up | ||
| - | ip netns exec bird ip link set rib41-00.1 up | ||
| - | </ | ||
| - | |||
| - | Не забываем про firewall: | ||
| - | <code bash> | ||
| - | firewall-cmd --zone=internal --add-source=10.0.0.1/ | ||
| - | </ | ||
| - | |||
| - | Не забывайте, | ||
| - | <code bash> | ||
| - | ip netns exec bird / | ||
| - | </ | ||
| - | |||
| - | <note important> | ||
| - | |||
| - | < | ||
| - | |||
| - | СКАТ пересылает пакеты в rib-интерфейсы " | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | |||
| - | СКАТ **не** выставляет MTU на veth-интерфейсах. При конфигурировании veth-интерфейсов следует задать MTU штатными средствами Linux. | ||
| - | </ | ||
| - | |||
| - | ===== Настройка СКАТ ===== | ||
| - | ==== Конфигурирование СКАТ ==== | ||
| - | === Обязательные параметры === | ||
| - | Чтобы включить функционал роутера, | ||
| - | <code bash> | ||
| - | # [cold] Включение функционала роутера | ||
| - | # Булевый параметр: | ||
| - | # 0, false, off - функционал роутера отключен (default) | ||
| - | # 1, true, on - функционал роутера включен | ||
| - | # Не допускает изменения "на лету" | ||
| - | router=1 | ||
| - | </ | ||
| - | |||
| - | Далее необходимо указать, | ||
| - | <code bash> | ||
| - | # [cold] Имя net namespace, в котором запущен BIRD | ||
| - | router_netns=bird | ||
| - | # [cold] Номер таблицы маршрутизации ядра, которую использует fastDPI | ||
| - | router_kernel_table=1 | ||
| - | </ | ||
| - | |||
| - | Также обязательно должны быть заданы следующие параметры BRAS, даже если никакой из режимов BRAS не включен: | ||
| - | <code bash> | ||
| - | # Виртуальный MAC-адрес СКАТ | ||
| - | bras_arp_mac=00: | ||
| - | |||
| - | # Виртуальный IP-адрес СКАТ | ||
| - | bras_arp_ip=188.227.73.40 | ||
| - | |||
| - | # Если используется IPv6, необходимо задать виртуальные IPv6-адреса: | ||
| - | |||
| - | # Задает глобальный IPv6 адрес СКАТа | ||
| - | bras_ipv6_address=2098:: | ||
| - | |||
| - | # Задает IPv6 link-local адрес СКАТа (префикс FE80::/10) | ||
| - | # Если данный параметр не задан явно, он вычисляется по bras_arp_mac | ||
| - | # | ||
| - | </ | ||
| - | |||
| - | <note tip> | ||
| - | Прочие параметры, | ||
| - | |||
| - | === Дополнительные параметры === | ||
| - | Максимальное число маршрутов задается параметрами: | ||
| - | <code bash> | ||
| - | # [cold] Максимальное число маршрутов в IPv4 route table | ||
| - | # По умолчанию = 1000000 | ||
| - | # | ||
| - | |||
| - | # [cold] Максимальное число маршрутов в IPv6 route table | ||
| - | # По умолчанию = 200000 | ||
| - | # | ||
| - | </ | ||
| - | СКАТ при старте в режиме роутера преаллоцирует память для внутренних route table в соответствии с этими параметрами. Советуем устанавливать эти опции (если необходимо) с запасом в 20-30%, чтобы в процессе работы роутера гарантированно хватило преаллоцированной памяти. | ||
| - | |||
| - | Рабочая таблица маршрутизации (FIB) СКАТ обновляется раз в '' | ||
| - | <code bash> | ||
| - | # [hot] Период обновления FIB, секунд | ||
| - | # По умолчанию - раз в 15 секунд | ||
| - | # | ||
| - | </ | ||
| - | Устанавливать данный параметр слишком маленьким (меньше 5 секунд) особого смысла нет. | ||
| - | |||
| - | Максимальный размер neighbor cache (ARP cache) и тайм-аут обновления записей этого кеша задается параметрами: | ||
| - | <code bash> | ||
| - | # [cold] Max размер ARP cache (neighbor сache для IPv6) | ||
| - | # По умолчанию - 1024, max = 32K | ||
| - | # | ||
| - | </ | ||
| - | СКАТ содержит отдельные neighbor-кеши для IPv4 и IPv6, каждый размером '' | ||
| - | |||
| - | СКАТ сам не посылает ARP-запросы для устаревших записей кеша. Вместо этого он полагается на обновление кеша со стороны ядра Linux: СКАТ мониторит ARP-ответы, | ||
| - | |||
| - | Роутер работает в отдельном потоке на отдельном ядре CPU. При старте СКАТ задает параметры этого потока по умолчанию, | ||
| - | <code bash> | ||
| - | # [cold] Добавление к приоритету служебного потока роутера (повышение приоритета) | ||
| - | # | ||
| - | |||
| - | # [cold] Ядро привязки потока роутера, | ||
| - | # | ||
| - | </ | ||
| - | Изменять эти параметры надо только в крайнем случае, | ||
| - | <note warning> | ||
| - | |||
| - | === Конфигурирование VRF === | ||
| - | Настройки '' | ||
| - | |||
| - | При подготовке fastDPI к работе в режиме роутера администратору нужно создать необходимые netns и TAP-интерфейсы для отвода трафика на route-демоны. В конфигурации '' | ||
| - | |||
| - | Каждая VRF задается отдельной новой секцией в конфигурации роутера: | ||
| - | |||
| - | == Описание таблицы маршрутизации (VRF) == | ||
| - | <code bash> | ||
| - | router_vrf { | ||
| - | id= | ||
| - | netns= | ||
| - | kernel_table= | ||
| - | neighbor_cache= | ||
| - | } | ||
| - | </ | ||
| - | <code bash> | ||
| - | router_default_vrf= | ||
| - | </ | ||
| - | |||
| - | **'' | ||
| - | **'' | ||
| - | **'' | ||
| - | **'' | ||
| - | **'' | ||
| - | |||
| - | Параметры для данной VRF: | ||
| - | |||
| - | **'' | ||
| - | **'' | ||
| - | **'' | ||
| - | **'' | ||
| - | **'' | ||
| - | |||
| - | Эти параметры определяют требуемую память и частоту обновления для данного VRF. Здесь можно указать значения по умолчанию (берутся из глобальных опций) или переопределить их. | ||
| - | |||
| - | * Если в конфигурации **нет** секций '' | ||
| - | * Если в конфигурации **есть** секции '' | ||
| - | |||
| - | **'' | ||
| - | При включении этой опции: | ||
| - | - ARP абонента к шлюзу - обрабатывается fastDPI только если абонент и шлюз в одном VRF | ||
| - | - ICMP ping шлюза - обрабатывается fastDPI только если абонент и шлюз в одном VRF | ||
| - | - local interconnect - применяется только если оба абонента в одном VRF | ||
| - | |||
| - | **'' | ||
| - | При включении этой опции пакет будет дропнут при выполнении следующих условий: | ||
| - | - IP-адрес абонента (srcIP) неизвестный для L2 BRAS | ||
| - | - bras_term_by_as = 0 | ||
| - | - AS абонента не local | ||
| - | |||
| - | == Описание router_device == | ||
| - | |||
| - | В описание '' | ||
| - | Описание одного интерфейса роутера: | ||
| - | |||
| - | <code bash> | ||
| - | router_device { | ||
| - | device= | ||
| - | tap= | ||
| - | peer= | ||
| - | vrf= | ||
| - | subnet= | ||
| - | subnet= | ||
| - | subnet6= | ||
| - | subnet6= | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | **'' | ||
| - | **'' | ||
| - | **'' | ||
| - | **'' | ||
| - | |||
| - | **'' | ||
| - | |||
| - | **'' | ||
| - | **'' | ||
| - | |||
| - | Каждая IPv4 и IPv6 подсеть указывается отдельно в параметре '' | ||
| - | |||
| - | <note important> | ||
| - | Например, | ||
| - | |||
| - | == Управление VRF абонентами == | ||
| - | VRF ID поступает в fastDPI при авторизации, | ||
| - | |||
| - | '' | ||
| - | |||
| - | Здесь “VRF_ID” — идентификатор VRF. | ||
| - | |||
| - | === Пример настройки VRF в СКАТ === | ||
| - | <code bash> | ||
| - | in_dev=0b-00.0 | ||
| - | out_dev=13-00.0 | ||
| - | |||
| - | scale_factor=1 | ||
| - | |||
| - | ctrl_port=29000 | ||
| - | ctrl_dev=lo | ||
| - | |||
| - | federal_black_list=0 | ||
| - | black_list_sm=1 | ||
| - | black_list_redirect=http:// | ||
| - | |||
| - | num_threads=1 | ||
| - | |||
| - | router=1 | ||
| - | router_vrf { | ||
| - | id=ROUTER | ||
| - | netns=router | ||
| - | kernel_table=100 | ||
| - | neighbor_cache=shared | ||
| - | } | ||
| - | |||
| - | router_vrf { | ||
| - | id=ROUTER2 | ||
| - | netns=router | ||
| - | kernel_table=101 | ||
| - | neighbor_cache=shared | ||
| - | } | ||
| - | router_device { | ||
| - | device=13-00.0 | ||
| - | vrf=ROUTER | ||
| - | tap=dpi | ||
| - | peer=rib | ||
| - | subnet=224.0.0.5/ | ||
| - | subnet=192.168.123.69/ | ||
| - | } | ||
| - | router_device { | ||
| - | device=13-00.0 | ||
| - | vrf=ROUTER2 | ||
| - | tap=dpi | ||
| - | peer=rib | ||
| - | subnet=192.168.123.70/ | ||
| - | } | ||
| - | router_subs_announce=6 | ||
| - | |||
| - | enable_auth=1 | ||
| - | auth_servers=127.0.0.1%lo: | ||
| - | bras_enable=1 | ||
| - | bras_arp_ip=10.10.102.189 | ||
| - | bras_arp_mac=00: | ||
| - | bras_dhcp_mode=1 | ||
| - | bras_dhcp_server=10.10.99.3%ens256; | ||
| - | bras_pppoe_enable=1 | ||
| - | bras_pppoe_session=100 | ||
| - | bras_ppp_auth_list=2, | ||
| - | |||
| - | enable_acct=1 | ||
| - | netflow=4 | ||
| - | netflow_timeout=300 | ||
| - | bras_pppoe_service_name=demoDPI | ||
| - | </ | ||
| - | |||
| - | ==== Задание имен veth-интерфейсов ==== | ||
| - | В fastdpi.conf описываются все TAP-интерфейсы, | ||
| - | <code bash> | ||
| - | # Описание одного интерфейса роутера | ||
| - | # ВНИМАНИЕ! ' | ||
| - | router_device { | ||
| - | # Имя девайса из in_dev/ | ||
| - | device= | ||
| - | # Имя TAP-интерфейса для девайса (default=' | ||
| - | #tap= | ||
| - | # Имя парного TAP-интерфейса в netns для девайса (default=' | ||
| - | #peer= | ||
| - | # ВНИМАНИЕ! ' | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Например, | ||
| - | <code bash> | ||
| - | in_dev=41-00.0 | ||
| - | out_dev=41-00.1 | ||
| - | </ | ||
| - | где к роутеру подключен только '' | ||
| - | <code bash> | ||
| - | in_dev=41-00.0 | ||
| - | out_dev=41-00.1 | ||
| - | |||
| - | router_device { | ||
| - | # Имя девайса из in_dev/ | ||
| - | device=41-00.1 | ||
| - | # Имя TAP-интерфейса для девайса (default=' | ||
| - | tap=dpi41 | ||
| - | # Имя парного TAP-интерфейса в netns для девайса (default=' | ||
| - | peer=rib41 | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Можно не задавать имена '' | ||
| - | <code bash> | ||
| - | in_dev=41-00.0 | ||
| - | out_dev=41-00.1 | ||
| - | |||
| - | # TAP для out_dev: | ||
| - | router_device { | ||
| - | device=41-00.1 | ||
| - | } | ||
| - | |||
| - | # TAP для in_dev | ||
| - | router_device { | ||
| - | device=41-00.0 | ||
| - | } | ||
| - | </ | ||
| - | В этом случае предполагаются такие имена TAP-интерфейсов: | ||
| - | * для '' | ||
| - | * для '' | ||
| - | |||
| - | ==== Поддержка LAG ==== | ||
| - | В СКАТ 10.1 добавлена поддержка агрегации каналов в роутере. | ||
| - | |||
| - | Для агрегированных каналов пакеты, | ||
| - | |||
| - | Каждый LAG задается отдельной секцией в fastdpi.conf, | ||
| - | <code bash> | ||
| - | # Входные/ | ||
| - | in_dev=01-00.0: | ||
| - | out_dev=01-00.1: | ||
| - | |||
| - | # Описываем LAG в сторону inet | ||
| - | lag { | ||
| - | # Необязательное имя LAG, используется только для вывода в лог | ||
| - | name=inet | ||
| - | # Каждый девайс, | ||
| - | device=01-00.1 | ||
| - | device=02-00.1 | ||
| - | } | ||
| - | |||
| - | # Описание одного интерфейса роутера | ||
| - | router_device { | ||
| - | # Имя девайса из out_dev. Только для этого девайса делаем veth-пару TAP-интерфейсов | ||
| - | device=01-00.1 | ||
| - | # Имя TAP-интерфейса для девайса (default=' | ||
| - | tap=dpi0 | ||
| - | # Имя парного TAP-интерфейса в netns для девайса (default=' | ||
| - | peer=rib0 | ||
| - | # Подсети, | ||
| - | subnet=10.0.10.0/ | ||
| - | # | ||
| - | } | ||
| - | </ | ||
| - | При таком описании отвод трафика на TAP '' | ||
| - | |||
| - | В секции '' | ||
| - | Если роутер работает как в сторону inet, так и в сторону subs (например, | ||
| - | <code bash> | ||
| - | # LAG в сторону inet | ||
| - | lag { | ||
| - | name=inet | ||
| - | device=01-00.1 | ||
| - | device=02-00.1 | ||
| - | } | ||
| - | |||
| - | # LAG в сторону subs | ||
| - | lag { | ||
| - | name=subs | ||
| - | device=01-00.0 | ||
| - | device=02-00.0 | ||
| - | } | ||
| - | </ | ||
| - | и для каждой конфигурируется отдельная секция '' | ||
| - | |||
| - | Всего возможно задать не более 10 различных lag-секций. | ||
| - | |||
| - | <note tip> | ||
| - | |||
| - | ===== Поддержка Multi-path routing (ECMP) ===== | ||
| - | В СКАТ 10.2 добавлена поддержка multi-path routing ([[https:// | ||
| - | |||
| - | СКАТ делает балансировку трафика (round-robin) на уровне flow по всем маршрутам из multi-path. | ||
| - | Балансировка на уровне flow означает, | ||
| - | |||
| - | Для включения multi-path в СКАТ не требуется никакой настройки. Поддержка ECMP включается в конфигурационных параметрах демона маршрутизации. | ||
| - | Например, | ||
| - | |||
| - | ===== Особенности анонсирования адресов ===== | ||
| - | ==== Анонсы абонентов и NAT pool ==== | ||
| - | Включение анонсирования адресов абонентов производится параметром в fastdpi.conf: | ||
| - | <code bash> | ||
| - | # [cold] Флаги анонса адресов абонентов | ||
| - | # Битовая маска | ||
| - | # Значения: | ||
| - | # 1 - анонсировать адрес абонента в сторону subs | ||
| - | # 2 - анонсировать адрес абонента в сторону inet (если у абонента не подключен NAT) | ||
| - | # 4 - анонсировать NAT-подсети в сторону inet | ||
| - | # 8 - анонсировать абонентские шлюзы (направление задается флагами 1 и 2) | ||
| - | # Значение по умолчанию: | ||
| - | # | ||
| - | |||
| - | # [hot] Метрика для анонсов адресов абонентов | ||
| - | # Значение по умолчанию = 32 | ||
| - | # | ||
| - | </ | ||
| - | {{ : | ||
| - | Подсети белых адресов NAT анонсируются только в сторону inet при старте СКАТа и при добавлении/ | ||
| - | |||
| - | {{ : | ||
| - | Адреса абонентов могут анонсироваться как в сторону inet, так и в сторону subs. Но если IP адрес абонента [[dpi: | ||
| - | |||
| - | [СКАТ 10.2+] Если в fastdpi.conf задано '' | ||
| - | |||
| - | ==== Анонс адресов L3-абонентов ==== | ||
| - | |||
| - | В СКАТ 10.2 действует следующий алгоритм анонсов IP-адресов [[dpi: | ||
| - | * по умолчанию, | ||
| - | * fastdpi.conf-параметр '' | ||
| - | <code bash> | ||
| - | # [hot] Анонсировать (1) или нет (0) неавторизованных (Reject) абонентов | ||
| - | # Значение по умолчанию - 0 (не анонсировать) | ||
| - | # | ||
| - | </ | ||
| - | * добавлен новый Радиус-атрибут '' | ||
| - | |||
| - | Итого при решении вопроса, | ||
| - | * если в ответе Радиуса (Accept или Reject) явно задан атрибут '' | ||
| - | * если атрибута '' | ||
| - | * Для Access-Accept (успешная авторизация) IP-адрес абонента анонсируется | ||
| - | * Для Access-Reject (неуспешная авторизация) IP-адрес анонсируется только если fastdpi.conf-параметр '' | ||
| - | |||
| - | < | ||
| - | |||
| - | Данный алгоритм также применяется для ARP-авторизации и GTP-авторизации, | ||
| - | |||
| - | Для прочих видов L2-авторизации (DHCP, PPP, — всех, где явно **выдается** IP-адрес) атрибут '' | ||
| - | |||
| - | ===== Конфигурирование Роут-демона (BIRD, FRR, etc.) ===== | ||
| - | Настройки Роут-демона (BIRD, FRR, etc.) и СКАТ **должны быть согласованы**: | ||
| - | Поддерживаемые роут-демоны: | ||
| - | - [[https:// | ||
| - | - [[http:// | ||
| - | - [[https:// | ||
| - | - [[https:// | ||
| - | |||
| - | <note tip>В примере приведен частный случай, | ||
| - | |||
| - | ==== Пример настройки BIRD ==== | ||
| - | <code bash> | ||
| - | # Указать дополнительные функции для проверки: | ||
| - | |||
| - | # Любой публичный адрес | ||
| - | function is_public() { | ||
| - | if net !~ [ 10.0.0.0/ | ||
| - | return true; | ||
| - | return false; | ||
| - | } | ||
| - | |||
| - | # Любой приватный адрес | ||
| - | function is_private() { | ||
| - | if net ~ [ 10.0.0.0/ | ||
| - | return true; | ||
| - | return false; | ||
| - | } | ||
| - | |||
| - | # Шлюз по умолчанию | ||
| - | filter default_gw { | ||
| - | if net ~ [0.0.0.0/0] then | ||
| - | accept; | ||
| - | reject; | ||
| - | } | ||
| - | |||
| - | # Описать фильтры: | ||
| - | # Маршруты, | ||
| - | filter exclude_external_routes { | ||
| - | if (source = RTS_INHERIT) && (net.len != 32) then | ||
| - | accept; | ||
| - | reject; | ||
| - | } | ||
| - | |||
| - | # Исключить маршруты из других протоколов маршрутизации, | ||
| - | filter exclude_ext_1_ip { | ||
| - | if (source = RTS_INHERIT) && (is_public() || (is_private() && (net.len != 32))) then | ||
| - | accept; | ||
| - | reject; | ||
| - | } | ||
| - | |||
| - | |||
| - | log "/ | ||
| - | router id 192.168.123.65; | ||
| - | |||
| - | debug protocols all; | ||
| - | |||
| - | # Описать таблицы | ||
| - | ipv4 table grt; | ||
| - | ipv4 table bird00; | ||
| - | ipv4 table bird01; | ||
| - | |||
| - | protocol device { | ||
| - | } | ||
| - | |||
| - | |||
| - | protocol direct { | ||
| - | disabled; | ||
| - | ipv4; # Подключение к таблице IPv4 по умолчанию | ||
| - | ipv6; # ... и к таблице IPv6 по умолчанию | ||
| - | } | ||
| - | |||
| - | # Описать " | ||
| - | protocol kernel kernel_grt { | ||
| - | ipv4 { # Подключить протокол к таблице IPv4 по каналу | ||
| - | table grt; | ||
| - | import all; # Импорт в таблицу, | ||
| - | export all; # Экспорт в протокол. Значение по умолчанию - экспорт отсутствует | ||
| - | }; | ||
| - | scan time 5; | ||
| - | learn; # Изучить пришедшие маршруты из kernel-таблицы | ||
| - | kernel table 99; # Kernel-таблица для синхронизации с (по умолчанию: | ||
| - | } | ||
| - | protocol kernel kernel_bird00 { | ||
| - | ipv4 { # Подключить протокол к таблице IPv4 по каналу | ||
| - | table bird00; | ||
| - | import all; # Импорт в таблицу, | ||
| - | export all; # Экспорт в протокол. Значение по умолчанию - экспорт отсутствует | ||
| - | }; | ||
| - | scan time 5; | ||
| - | learn; # Изучить пришедшие маршруты из kernel-таблицы | ||
| - | kernel table 100; # Kernel-таблица для синхронизации с (по умолчанию: | ||
| - | } | ||
| - | |||
| - | protocol kernel kernel_bird01 { | ||
| - | ipv4 { # Подключить протокол к таблице IPv4 по каналу | ||
| - | table bird01; | ||
| - | import all; # Импорт в таблицу, | ||
| - | export all; # Экспорт в протокол. Значение по умолчанию - экспорт отсутствует | ||
| - | }; | ||
| - | scan time 20; | ||
| - | learn; # Изучить пришедшие маршруты из kernel-таблицы | ||
| - | kernel table 101; # Kernel-таблица для синхронизации с (по умолчанию: | ||
| - | } | ||
| - | |||
| - | # Другой экземпляр для IPv6, пропускающий параметры по умолчанию | ||
| - | protocol kernel { | ||
| - | ipv6 { export all; }; | ||
| - | } | ||
| - | |||
| - | protocol static { | ||
| - | ipv4; # Снова канал IPv4 с параметрами по умолчанию | ||
| - | |||
| - | } | ||
| - | |||
| - | # Протоколы OSPF (каждый инстанс со своей таблицей) | ||
| - | protocol ospf v2 ospf_grt { | ||
| - | tick 1; | ||
| - | rfc1583compat no; | ||
| - | stub router no; | ||
| - | ecmp yes limit 16; | ||
| - | ipv4 { | ||
| - | table grt; | ||
| - | import all; | ||
| - | export all; | ||
| - | }; | ||
| - | area 0.0.0.0 { | ||
| - | networks { | ||
| - | 192.168.123.64/ | ||
| - | }; | ||
| - | interface " | ||
| - | cost 1; | ||
| - | rx buffer large; | ||
| - | type broadcast; | ||
| - | authentication none; | ||
| - | }; | ||
| - | }; | ||
| - | }; | ||
| - | protocol ospf v2 ospf_bird01 { | ||
| - | tick 1; | ||
| - | rfc1583compat no; | ||
| - | ecmp yes limit 16; | ||
| - | ipv4 { | ||
| - | table bird01; | ||
| - | import all; | ||
| - | export all; | ||
| - | #export filter exclude_ext_1_ip; | ||
| - | }; | ||
| - | area 0.0.0.0 { | ||
| - | networks { | ||
| - | 192.168.123.68/ | ||
| - | }; | ||
| - | interface " | ||
| - | cost 1; | ||
| - | rx buffer large; | ||
| - | type broadcast; | ||
| - | authentication none; | ||
| - | }; | ||
| - | }; | ||
| - | } | ||
| - | |||
| - | # Описать " | ||
| - | protocol pipe grt_bird00 { | ||
| - | table grt; | ||
| - | peer table bird00; | ||
| - | import all; | ||
| - | export filter default_gw; | ||
| - | } | ||
| - | protocol pipe grt_bird01 { | ||
| - | table grt; | ||
| - | peer table bird01; | ||
| - | import all; # filter exclude_ext_1_ip; | ||
| - | export all; #filter default_gw; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Отладка Роутера ===== | ||
| - | Роутер СКАТа в целях отладки может записывать в pcap трафик с BIRD: | ||
| - | <code bash> | ||
| - | # [hot] Запись pcap с TAP-интерфейсов роутера | ||
| - | # Note: записывать можно и утилитой tcpdump, указав имя TAP-интерфейса. | ||
| - | # Но проблема в том, что tcpdump не работает с интерфейсами в режиме DOWN, | ||
| - | # то есть tcpdump' | ||
| - | # из состояния DOWN в состояние UP. | ||
| - | # Имена TAP-интерфейсов через ';' | ||
| - | # Для каждого TAP-интерфейса создается отдельный pcap-файл с именем | ||
| - | # tap_< | ||
| - | # | ||
| - | |||
| - | # [hot] Направление пакетов для записи pcap с TAP-интерфейсов | ||
| - | # Значения: | ||
| - | # 1 - TAP -> вовне (пакеты от TAP-интерфейса) | ||
| - | # 2 - извне -> TAP (пакеты на TAP-интерфейс) | ||
| - | # 0 или 3 - все направления | ||
| - | # | ||
| - | |||
| - | # [hot] Интервал ротации TAP pcap, секунд | ||
| - | # 0 - берется из параметра ajb_udpi_ftimeout (ajb_udpi_ftimeout задается в минутах) | ||
| - | # | ||
| - | </ | ||
| - | |||
| - | Также можно включить запись в pcap обмена данными с ядром (rtnetlink): | ||
| - | <code bash> | ||
| - | # [hot] Записывать или нет rtnetlink messages в pcap | ||
| - | # 0 - не записывать | ||
| - | # 1 - записывать | ||
| - | # Префикс pcap-файлов = " | ||
| - | # | ||
| - | </ | ||
| - | |||
| - | Кроме того, если включена запись пакетов в pcap по маске адреса ('' | ||
| - | |||
| - | ===== CLI-команды ===== | ||
| - | СКАТ имеет набор CLI-команд по просмотру текущего состояния роутера. Полный список команд см. | ||
| - | <code bash> | ||
| - | fdpi_cli help router | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | |||
| - | Также не забывайте, | ||
| - | |||
| - | Кроме того, стандартная утилита Linux '' | ||