Зеркалирование 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:
- 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:
- 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
Пример трафика
Пример захвата зеркалированного трафика: gre_radius.pcap
Была ли полезна эта информация?