Синхронизация RPKI
RPKI (Resource Public Key Infrastructure) — это инфраструктура безопасности для проверки связи между блоками IP-адресов и авторизованными AS-источниками. В этом руководстве описана настройка валидации RPKI в вашей сети и обеспечение синхронизации с глобальными репозиториями RPKI.
Как работает RPKI
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ RIPE NCC │────▶│ RPKI-кеш │────▶│ Маршрути- │
│ Репозиторий│ │ (Валидатор) │ │ затор │
└─────────────┘ └──────────────┘ └──────────────┘
ROA Валидированные Фильтрация
ROA по RPKI-RTR маршрутов
- RIR (RIPE NCC, ARIN, APNIC и др.) публикуют ROA в своих RPKI-репозиториях
- RPKI-валидаторы загружают и криптографически проверяют эти ROA
- Маршрутизаторы подключаются к валидаторам по протоколу RTR (RPKI-to-Router) и применяют валидацию происхождения маршрутов
Настройка RPKI-валидатора
Вариант 1: Routinator (NLnet Labs)
Routinator — широко используемое ПО для RPKI-валидации с открытым исходным кодом.
Установка на Debian/Ubuntu
# Добавьте репозиторий NLnet Labs
sudo apt install -y ca-certificates curl gnupg
curl -fsSL https://packages.nlnetlabs.nl/aptkey.asc | sudo gpg --dearmor -o /usr/share/keyrings/nlnetlabs-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/nlnetlabs-archive-keyring.gpg] https://packages.nlnetlabs.nl/linux/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/nlnetlabs.list
# Установите Routinator
sudo apt update
sudo apt install -y routinator
Первоначальная настройка
# Инициализация Routinator (принятие ARIN TAL)
routinator init --accept-arin-rpa
# Запуск Routinator с RTR-сервером на порту 3323 и HTTP на 8323
routinator server --rtr 0.0.0.0:3323 --http 0.0.0.0:8323
Systemd-сервис
Создайте systemd-сервис для автоматического запуска:
sudo systemctl enable routinator
sudo systemctl start routinator
Проверьте, что он запущен:
# Проверка статуса
sudo systemctl status routinator
# Проверка HTTP-интерфейса
curl http://localhost:8323/api/v1/status
Вариант 2: FORT Validator
FORT Validator — ещё один RPKI-валидатор с открытым исходным кодом.
# Установка на Debian/Ubuntu
sudo apt install -y fort-validator
# Настройка и запуск
sudo systemctl enable fort-validator
sudo systemctl start fort-validator
Вариант 3: Использование размещённого RPKI-валидатора RIPE NCC
Если вы не хотите запускать собственный валидатор, вы можете использовать публичные RTR-точки. Однако для продуктивных сред настоятельно рекомендуется использовать собственный валидатор.
Настройка маршрутизаторов для RPKI
Cisco IOS-XR
router bgp 64496
rpki server 10.0.0.1
transport tcp port 3323
refresh-time 300
!
address-family ipv4 unicast
route-policy rpki-validation in
!
!
route-policy rpki-validation
if validation-state is valid then
set local-preference 200
pass
elseif validation-state is invalid then
drop
else
set local-preference 100
pass
endif
end-policy
Juniper JunOS
routing-options {
validation {
group rpki-validators {
session 10.0.0.1 {
port 3323;
refresh-time 300;
}
}
}
}
policy-options {
policy-statement rpki-validation {
term valid {
from {
protocol bgp;
validation-database valid;
}
then {
local-preference 200;
accept;
}
}
term invalid {
from {
protocol bgp;
validation-database invalid;
}
then reject;
}
term unknown {
from protocol bgp;
then {
local-preference 100;
accept;
}
}
}
}
BIRD 2
roa4 table r4;
roa6 table r6;
protocol rpki rpki_validator {
roa4 { table r4; };
roa6 { table r6; };
remote "10.0.0.1" port 3323;
retry keep 90;
refresh keep 300;
expire keep 600;
}
filter bgp_in {
if (roa_check(r4, net, bgp_path.last) = ROA_INVALID) then reject;
if (roa_check(r4, net, bgp_path.last) = ROA_VALID) then {
bgp_local_pref = 200;
}
accept;
}
MikroTik RouterOS 7
/routing/rpki
add group=rpki-validator address=10.0.0.1 port=3323 refresh-interval=300
/routing/filter/rule
add chain=bgp-in rule="rpki-verify rpki-validator"
add chain=bgp-in rule="if (rpki invalid) { reject }"
add chain=bgp-in rule="if (rpki valid) { set bgp-local-pref 200 }"
Проверка синхронизации RPKI
Проверка статуса валидатора
# Routinator: проверка количества валидированных ROA
curl -s http://localhost:8323/api/v1/status | jq '.'
# Проверка валидации конкретного префикса
curl -s "http://localhost:8323/api/v1/validity/AS64496/192.0.2.0/24"
Проверка RPKI-сессии на маршрутизаторе
Cisco IOS-XR:
show bgp rpki summary
show bgp rpki table
show bgp ipv4 unicast <prefix> detail
Juniper JunOS:
show validation session
show validation database
show route <prefix> detail | match validation
BIRD 2:
birdc show protocols all rpki_validator
birdc show route <prefix> all
Внешние инструменты валидации
- RIPE Stat RPKI Dashboard — проверка RPKI-статуса любого префикса
- Cloudflare RPKI Portal — статистика внедрения RPKI
- RPKI Monitor — инструмент мониторинга RPKI от NIST
Устранение неполадок
Валидатор не синхронизируется
# Проверьте, может ли Routinator достичь RPKI-репозиториев
routinator vrps --format csv | head -20
# Проверьте логи на наличие ошибок
journalctl -u routinator -f
RTR-сессия не устанавливается
- Проверьте сетевую связность с валидатором:
telnet 10.0.0.1 3323 - Проверьте правила файрвола — TCP-порт 3323 должен быть открыт
- Убедитесь, что валидатор запущен и слушает:
ss -tlnp | grep 3323
Маршруты отмечены как Invalid
- Убедитесь, что ROA существует для вашего префикса в базе данных RIPE
- Проверьте, что параметры ROA совпадают с вашим анонсом (AS, префикс, max length)
- Подождите распространения — изменения ROA могут занять до 1 часа для распространения на все валидаторы
Распространение RPKI обычно занимает 10–30 минут после создания или изменения ROA в портале RIPE NCC.