После двух инцидентов с BGP hijacking (когда чужая AS объявляла наши префиксы) мы внедрили RPKI — Resource Public Key Infrastructure. Это криптографическая валидация принадлежности префиксов к автономным системам.
Шаг 1: создание ROA (Route Origin Authorization) в RIPE Database:
# ROA создаётся в RIPE через веб-интерфейс или API
# Указывает: этот префикс МОЖЕТ объявляться ТОЛЬКО из этой AS
# Prefix: 185.120.88.0/21
# Max Length: /22 (разрешаем деагрегацию до /22)
# Origin AS: AS213579
# Проверяем созданный ROA
whois -h whois.ripe.net -T route 185.120.88.0/21
# route: 185.120.88.0/21
# origin: AS213579
# remarks: ROA validated
Шаг 2: установка RPKI-валидатора. Мы использовали Routinator от NLnet Labs:
# Установка Routinator
curl -fsSL https://packages.nlnetlabs.nl/aptkey.asc | apt-key add -
echo "deb https://packages.nlnetlabs.nl/linux/debian/ bookworm main" > \
/etc/apt/sources.list.d/nlnetlabs.list
apt update && apt install -y routinator
# Инициализация (принятие ARIN TAL)
routinator init --accept-arin-rpa
# Запуск как сервис
systemctl enable routinator
systemctl start routinator
# Routinator слушает RTR-протокол на порту 3323
# и HTTP API на порту 8323
curl -s http://localhost:8323/api/v1/status | jq .
# {
# "version": "0.13.2",
# "vrps": 482356,
# "last_update": "2026-01-20T14:30:00Z"
# }
Шаг 3: подключение RPKI к BIRD2:
# /etc/bird/rpki.conf — подключение к Routinator
protocol rpki rpki_validator {
roa4 { table roa_v4; };
roa6 { table roa_v6; };
remote "127.0.0.1" port 3323;
retry keep 90;
refresh keep 900;
expire keep 172800;
}
# Создаём ROA-таблицы
roa4 table roa_v4;
roa6 table roa_v6;
# Обновляем фильтр импорта — отбрасываем RPKI Invalid
filter import_with_rpki {
# ... (предыдущие проверки bogons и т.д.)
# RPKI-валидация
if (roa_check(roa_v4, net, bgp_path.last) = ROA_INVALID) then {
print "RPKI INVALID: ", net, " from AS", bgp_path.last;
reject;
}
if (roa_check(roa_v4, net, bgp_path.last) = ROA_VALID) then {
# Бонус к LP для валидированных маршрутов
bgp_local_pref = bgp_local_pref + 20;
bgp_large_community.add((OUR_AS, 100, 1)); # RPKI Valid
}
if (roa_check(roa_v4, net, bgp_path.last) = ROA_UNKNOWN) then {
bgp_large_community.add((OUR_AS, 100, 0)); # RPKI Unknown
}
accept;
}
Looking Glass — веб-интерфейс для просмотра таблицы маршрутов. Развернули Alice-LG:
# Docker-compose для Looking Glass
version: '3'
services:
alice-lg:
image: ecix/alice-lg:latest
ports:
- "8080:80"
volumes:
- ./alice.conf:/etc/alice-lg/alice.conf
restart: always
# alice.conf — подключение к BIRD через birdwatcher API
[source.router1]
name = "Router-1 (Primary)"
api = "http://router1:29184/"
type = birdwatcher
Теперь любой сотрудник СетьТелеком может посмотреть таблицу маршрутов, проверить доступность префикса и статус BGP-сессий через веб-интерфейс — без доступа к CLI маршрутизатора.
Оставить комментарий