Перейти к основному содержимому

Синхронизация RPKI

RPKI (Resource Public Key Infrastructure) — это инфраструктура безопасности для проверки связи между блоками IP-адресов и авторизованными AS-источниками. В этом руководстве описана настройка валидации RPKI в вашей сети и обеспечение синхронизации с глобальными репозиториями RPKI.

Как работает RPKI​

┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ RIPE NCC │────▶│ RPKI-кеш │────▶│ Маршрути- │
│ Репозиторий│ │ (Валидатор) │ │ затор │
└─────────────┘ └──────────────┘ └──────────────┘
ROA Валидированные Фильтрация
ROA по RPKI-RTR маршрутов
  1. RIR (RIPE NCC, ARIN, APNIC и др.) публикуют ROA в своих RPKI-репозиториях
  2. RPKI-валидаторы загружают и криптографически проверяют эти ROA
  3. Маршрутизаторы подключаются к валидаторам по протоколу 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

Внешние инструменты валидации​

Устранение неполадок​

Валидатор не синхронизируется​

# Проверьте, может ли Routinator достичь RPKI-репозиториев
routinator vrps --format csv | head -20

# Проверьте логи на наличие ошибок
journalctl -u routinator -f

RTR-сессия не устанавливается​

  1. Проверьте сетевую связность с валидатором: telnet 10.0.0.1 3323
  2. Проверьте правила файрвола — TCP-порт 3323 должен быть открыт
  3. Убедитесь, что валидатор запущен и слушает: ss -tlnp | grep 3323

Маршруты отмечены как Invalid​

  1. Убедитесь, что ROA существует для вашего префикса в базе данных RIPE
  2. Проверьте, что параметры ROA совпадают с вашим анонсом (AS, префикс, max length)
  3. Подождите распространения — изменения ROA могут занять до 1 часа для распространения на все валидаторы
к сведению

Распространение RPKI обычно занимает 10–30 минут после создания или изменения ROA в портале RIPE NCC.