{{indexmenu_n>6}} ====== Зеркалирование RADIUS-трафика через GRE-туннель ====== Инструкция описывает, как настроить на BNG копирование RADIUS-трафика в GRETAP-туннель на отдельный сервер, например для анализа или записи в pcap. Зеркалирование выполняется средствами ''tc'' (классификатор ''flower'' и действие ''mirred''), без изменения основного трафика. Здесь описан частный случай: зеркалируется только accounting (UDP-порт 1813) и только на один сервер. Чтобы зеркалировать другие порты или отправлять копию на другие серверы, добавьте нужные фильтры и параметры в скрипт. ===== Параметры примера ===== ^ Переменная ^ Значение ^ Описание ^ | ''IF'' | ens18 | Интерфейс BNG, через который идёт RADIUS-трафик | | ''LOCAL'' | 10.16.20.226 | Адрес BNG — локальный конец туннеля | | ''REMOTE'' | 10.16.20.225 | Адрес сервера, на который отправляется копия трафика | | ''PEER'' | 10.16.20.231 | Адрес RADIUS-сервера, трафик с которым зеркалируется | | ''TUN'' | gre-mirror | Имя GRETAP-интерфейса | Перед запуском рекомендуем заменить значения на актуальные для вашей сети. === Шаг 1. Создать скрипт === Создать файл ''/usr/local/bin/bng_mirror_radius.sh'': #!/bin/bash # Зеркало RADIUS accounting (udp/1813) между 10.16.20.226 <-> 10.16.20.231 в GRETAP на 10.16.20.225 set -e IF=ens18 LOCAL=10.16.20.226 REMOTE=10.16.20.225 PEER=10.16.20.231 TUN=gre-mirror start() { modprobe ip_gre; modprobe cls_flower; modprobe act_mirred ip link add $TUN type gretap local $LOCAL remote $REMOTE ttl 64 ip link set $TUN up tc qdisc add dev $IF clsact # Входящие от 231 (запросы на 1813 или ответы с 1813) tc filter add dev $IF ingress protocol ip prio 1 flower ip_proto udp src_ip $PEER dst_port 1813 \ action mirred egress mirror dev $TUN tc filter add dev $IF ingress protocol ip prio 2 flower ip_proto udp src_ip $PEER src_port 1813 \ action mirred egress mirror dev $TUN # Исходящие на 231 tc filter add dev $IF egress protocol ip prio 1 flower ip_proto udp dst_ip $PEER dst_port 1813 \ action mirred egress mirror dev $TUN tc filter add dev $IF egress protocol ip prio 2 flower ip_proto udp dst_ip $PEER src_port 1813 \ action mirred egress mirror dev $TUN } stop() { tc qdisc del dev $IF clsact 2>/dev/null || true ip link del $TUN 2>/dev/null || true } case "$1" in start) start ;; stop) stop ;; restart) stop; start ;; *) echo "Usage: $0 {start|stop|restart}"; exit 1 ;; esac === Шаг 2. Сделать скрипт исполняемым === chmod +x /usr/local/bin/bng_mirror_radius.sh === Шаг 3. Создать systemd-юнит === Создать файл ''/etc/systemd/system/bng_mirror_radius.service'': [Unit] Description=Mirror RADIUS accounting via GRETAP After=network-online.target Wants=network-online.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/local/bin/bng_mirror_radius.sh start ExecStop=/usr/local/bin/bng_mirror_radius.sh stop [Install] WantedBy=multi-user.target === Шаг 4. Запустить сервис === Перечитать конфигурацию systemd и запустить сервис: systemctl daemon-reload systemctl start bng_mirror_radius.service Чтобы зеркалирование включалось после перезагрузки, добавить сервис в автозапуск: systemctl enable bng_mirror_radius.service === Проверка === На BNG убедиться, что туннель поднят и фильтры добавлены: ip -d link show gre-mirror tc filter show dev ens18 ingress tc filter show dev ens18 egress На сервере-получателе (10.16.20.225) проверить, что приходит GRE-трафик: tcpdump -ni <интерфейс> proto gre === Пример трафика === Пример захвата зеркалированного трафика: {{:dpi:bras_bng:radius_integration:radius_accounting:gre_radius.pcap|gre_radius.pcap}}