Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
dpi:dpi_components:router:start [2023/08/25 14:38] – elena.krasnobryzh | 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 адрес абонента | ||
- | |||
- | [СКАТ 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 '' |