{{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}}