RPKI - Resource Public Key Infrastructure
RPKI - Resource Public Key Infrastructure
Обзор
RPKI (Resource Public Key Infrastructure) — это инфраструктура открытых ключей для защиты маршрутизации в интернете. RPKI позволяет владельцам IP-адресных блоков создавать криптографически подписанные записи Route Origin Authorization (ROA), которые определяют, какие автономные системы (AS) имеют право анонсировать конкретные префиксы.
Основные характеристики
- RFC стандарты: RFC 6480 (архитектура), RFC 6482 (ROA), RFC 8210 (RTR протокол)
- Предотвращение BGP hijacking: защита от несанкционированных анонсов префиксов
- Криптографическая валидация: использование цифровых подписей для проверки ROA
- Глобальная инфраструктура: управляется Regional Internet Registries (RIR)
- Real-time валидация: проверка маршрутов в момент получения
Зачем нужен RPKI
BGP не имеет встроенных механизмов проверки легитимности маршрутных анонсов. Любая AS может анонсировать любой префикс, что приводит к:
- BGP Hijacking: злонамеренный или случайный анонс чужих префиксов
- Route Leaks: случайные утечки маршрутов из-за неправильной конфигурации
- Man-in-the-Middle атаки: перехват трафика через поддельные маршруты
- DDoS атаки: отклонение трафика для DoS целей
RPKI решает эти проблемы через криптографическую валидацию origin AS для префиксов.
Принцип работы RPKI
- RIR выдает сертификаты: Regional Internet Registries (RIPE, ARIN, APNIC и т.д.) выдают сертификаты владельцам IP блоков
- Создание ROA: владелец создает Route Origin Authorization, указывая какая AS может анонсировать префикс
- Публикация в репозитории: ROA публикуется в RPKI репозитории
- RPKI Validator: специальный сервер загружает и проверяет все ROA
- RTR протокол: маршрутизаторы получают валидированные данные через RTR (RPKI-to-Router)
- BGP Origin Validation: при получении BGP update проверяется соответствие origin AS и префикса с ROA
Компоненты RPKI
Regional Internet Registries (RIR)
Организации, управляющие распределением IP адресов:
- RIPE NCC - Европа, Ближний Восток, часть Азии
- ARIN - Северная Америка
- APNIC - Азиатско-Тихоокеанский регион
- LACNIC - Латинская Америка и Карибы
- AFRINIC - Африка
Для России основной RIR - RIPE NCC.
Route Origin Authorization (ROA)
ROA - криптографически подписанный объект, содержащий:
- Префикс: IP блок (например, 203.0.113.0/24)
- Max Length: максимальная длина префикса для more-specific анонсов
- Origin AS: номер AS, имеющей право анонсировать префикс
- Цифровая подпись: подпись владельца ресурсов
Пример ROA:
Prefix: 203.0.113.0/24
Max Length: 24
Origin AS: AS65001Это означает, что только AS65001 может анонсировать 203.0.113.0/24 и любые префиксы до /24.
RPKI Validator (Cache Server)
RPKI Validator - это сервер, который:
- Загружает ROA из репозиториев всех RIR
- Проверяет криптографические подписи
- Строит базу данных валидированных префиксов
- Предоставляет данные маршрутизаторам через RTR протокол
Популярные RPKI validators:
- RIPE NCC RPKI Validator
- Routinator (от NLnet Labs)
- FORT Validator
- OctoRPKI (от Cloudflare)
RTR (RPKI-to-Router) Protocol
RTR (RFC 8210) - это протокол передачи валидированных RPKI данных от cache server к маршрутизаторам.
Характеристики:
- Работает по TCP (порт 323 по умолчанию, часто используется 8282, 8323)
- Lightweight протокол для эффективной передачи
- Поддерживает incremental updates
- Маршрутизатор поддерживает постоянное соединение с validator
RTR сообщения:
- Serial Notify: уведомление о новых данных
- Serial Query: запрос текущих данных
- Cache Response: передача ROA данных
- End of Data: конец передачи
Установка RPKI в VyOS
Требования
- VyOS 1.3.x или новее (RPKI поддержка включена в FRRouting)
- Доступ к RPKI cache server (публичный или локальный)
- Настроенный BGP
Проверка поддержки RPKI
# Проверка версии FRRouting (должна быть 7.5+)
show version
# Проверка доступности RPKI команд
show rpki ?Базовая конфигурация RPKI
Подключение к публичному RPKI Cache Server
VyOS может подключаться к публичным RPKI validators для получения ROA данных.
Cloudflare RPKI Validator
Cloudflare предоставляет бесплатный публичный RPKI validator:
# Добавление Cloudflare RPKI cache server
set protocols rpki cache cloudflare address rtr.rpki.cloudflare.com
set protocols rpki cache cloudflare port 8282
set protocols rpki cache cloudflare preference 1
commit
saveАдреса Cloudflare validators:
- IPv4: rtr.rpki.cloudflare.com (104.26.0.0/15)
- IPv6: rtr.rpki.cloudflare.com (2606:4700::/32)
- Порт: 8282
NTT RPKI Validator
NTT также предоставляет публичные validators:
# Добавление NTT RPKI cache server
set protocols rpki cache ntt address rpki.gin.ntt.net
set protocols rpki cache ntt port 323
set protocols rpki cache ntt preference 2
commit
saveАдреса NTT validators:
- IPv4: rpki.gin.ntt.net
- IPv6: 2001:218:2001:8000::116
- Порт: 323
RIPE NCC RPKI Validator
RIPE предоставляет публичный validator для Европы:
# Добавление RIPE RPKI cache server
set protocols rpki cache ripe address rpki-validator.ripe.net
set protocols rpki cache ripe port 8282
set protocols rpki cache ripe preference 3
commit
saveАдреса RIPE validators:
- IPv4: rpki-validator.ripe.net
- Порт: 8282
Конфигурация нескольких cache servers
Рекомендуется настраивать несколько cache servers для redundancy:
# Cloudflare (primary)
set protocols rpki cache cloudflare address rtr.rpki.cloudflare.com
set protocols rpki cache cloudflare port 8282
set protocols rpki cache cloudflare preference 1
# NTT (secondary)
set protocols rpki cache ntt address rpki.gin.ntt.net
set protocols rpki cache ntt port 323
set protocols rpki cache ntt preference 2
# RIPE (tertiary)
set protocols rpki cache ripe address rpki-validator.ripe.net
set protocols rpki cache ripe port 8282
set protocols rpki cache ripe preference 3
commit
savePreference: меньшее значение = выше приоритет. VyOS будет использовать cache с наименьшим preference.
Polling интервалы
Настройка интервалов опроса cache servers:
# Интервал опроса (по умолчанию 3600 секунд)
set protocols rpki cache cloudflare polling-period 3600
# Retry интервал при отключении (по умолчанию 600 секунд)
set protocols rpki cache cloudflare retry-interval 600
# Expire интервал (по умолчанию 7200 секунд)
set protocols rpki cache cloudflare expire-interval 7200
commit
saveПараметры:
- polling-period: как часто обновлять данные от cache (секунды)
- retry-interval: интервал повтора при недоступности cache
- expire-interval: время до истечения кэшированных данных
SSH аутентификация для RTR
Некоторые RPKI validators поддерживают SSH для защищенного RTR соединения:
# Настройка SSH для RTR (если поддерживается cache server)
set protocols rpki cache secure-cache address validator.example.com
set protocols rpki cache secure-cache port 22
set protocols rpki cache secure-cache ssh username rpki-client
set protocols rpki cache secure-cache ssh public-key-file /config/auth/rpki-key.pub
set protocols rpki cache secure-cache ssh private-key-file /config/auth/rpki-key
set protocols rpki cache secure-cache ssh known-hosts-file /config/auth/rpki-known-hosts
set protocols rpki cache secure-cache preference 1
commit
saveГенерация SSH ключей:
# На VyOS
ssh-keygen -t rsa -b 4096 -f /config/auth/rpki-key -N ""
# Копирование public key на validator server
# (процедура зависит от validator)Интеграция RPKI с BGP
Включение Origin Validation
После настройки RPKI cache, включите origin validation для BGP:
# Базовая BGP конфигурация
set protocols bgp system-as 65001
set protocols bgp parameters router-id 10.0.0.1
# Включение RPKI origin validation
set protocols bgp address-family ipv4-unicast rpki
commit
saveValidation States
RPKI origin validation присваивает маршрутам один из трех статусов:
1. Valid (Валидный)
Маршрут считается валидным, если:
- Существует ROA для префикса
- Origin AS в BGP update совпадает с AS в ROA
- Длина префикса не превышает max-length в ROA
Пример:
ROA: 203.0.113.0/24, Max Length: 24, Origin AS: 65001
BGP Route: 203.0.113.0/24 from AS65001 -> VALID2. Invalid (Невалидный)
Маршрут считается невалидным, если:
- Существует ROA, но origin AS не совпадает
- Длина префикса превышает max-length в ROA
Пример:
ROA: 203.0.113.0/24, Max Length: 24, Origin AS: 65001
BGP Route: 203.0.113.0/24 from AS65002 -> INVALID (неправильная AS)
BGP Route: 203.0.113.0/25 from AS65001 -> INVALID (превышен max-length)3. Not Found (Не найден)
Маршрут считается not-found, если:
- Для префикса не существует ROA
- Префикс не покрывается ни одной ROA
Пример:
No ROA for 198.51.100.0/24
BGP Route: 198.51.100.0/24 from AS65003 -> NOT FOUNDФильтрация на основе RPKI
Установка BGP community на основе validation state
# Community для valid routes
set policy route-map RPKI-IN rule 10 action permit
set policy route-map RPKI-IN rule 10 match rpki valid
set policy route-map RPKI-IN rule 10 set community '65001:100' additive
# Community для invalid routes
set policy route-map RPKI-IN rule 20 action permit
set policy route-map RPKI-IN rule 20 match rpki invalid
set policy route-map RPKI-IN rule 20 set community '65001:666' additive
# Community для not-found routes
set policy route-map RPKI-IN rule 30 action permit
set policy route-map RPKI-IN rule 30 match rpki notfound
set policy route-map RPKI-IN rule 30 set community '65001:999' additive
# Применение к BGP neighbor
set protocols bgp neighbor 203.0.113.1 address-family ipv4-unicast route-map import RPKI-IN
commit
saveИзменение Local Preference
Предпочитать valid маршруты:
# Valid routes - высокий local preference
set policy route-map RPKI-PREF rule 10 action permit
set policy route-map RPKI-PREF rule 10 match rpki valid
set policy route-map RPKI-PREF rule 10 set local-preference 200
# Not-found routes - средний local preference
set policy route-map RPKI-PREF rule 20 action permit
set policy route-map RPKI-PREF rule 20 match rpki notfound
set policy route-map RPKI-PREF rule 20 set local-preference 100
# Invalid routes - низкий local preference
set policy route-map RPKI-PREF rule 30 action permit
set policy route-map RPKI-PREF rule 30 match rpki invalid
set policy route-map RPKI-PREF rule 30 set local-preference 50
# Применение
set protocols bgp neighbor 203.0.113.1 address-family ipv4-unicast route-map import RPKI-PREF
commit
saveБлокировка invalid маршрутов
Строгая политика - отбрасывать invalid маршруты:
# Блокировка invalid routes
set policy route-map RPKI-STRICT rule 10 action deny
set policy route-map RPKI-STRICT rule 10 match rpki invalid
# Принимать valid routes
set policy route-map RPKI-STRICT rule 20 action permit
set policy route-map RPKI-STRICT rule 20 match rpki valid
# Принимать not-found routes (но с меньшим preference)
set policy route-map RPKI-STRICT rule 30 action permit
set policy route-map RPKI-STRICT rule 30 match rpki notfound
set policy route-map RPKI-STRICT rule 30 set local-preference 80
# Применение
set protocols bgp neighbor 203.0.113.1 address-family ipv4-unicast route-map import RPKI-STRICT
commit
saveВнимание: Блокировка invalid маршрутов может нарушить связность, если ROA настроены неправильно или устарели. Рекомендуется начинать с понижения preference.
RPKI для IPv6
RPKI работает и для IPv6 префиксов:
# Включение RPKI для IPv6
set protocols bgp address-family ipv6-unicast rpki
# Route-map для IPv6
set policy route-map RPKI-IN-V6 rule 10 action permit
set policy route-map RPKI-IN-V6 rule 10 match rpki valid
set policy route-map RPKI-IN-V6 rule 10 set local-preference 200
set policy route-map RPKI-IN-V6 rule 20 action permit
set policy route-map RPKI-IN-V6 rule 20 match rpki notfound
set policy route-map RPKI-IN-V6 rule 20 set local-preference 100
set policy route-map RPKI-IN-V6 rule 30 action deny
set policy route-map RPKI-IN-V6 rule 30 match rpki invalid
# Применение к IPv6 neighbor
set protocols bgp neighbor 2001:db8::1 address-family ipv6-unicast route-map import RPKI-IN-V6
commit
saveПримеры для облачных платформ
Пример 1: RPKI для ISP BGP в Yandex Cloud
Сценарий: ISP с собственной AS в Yandex Cloud, использующий RPKI для защиты от route hijacking.
Топология
[Internet] ---- [VyOS BGP Router] ---- [Yandex Cloud Networks]
AS65001
203.0.113.0/24Предварительная подготовка
Создание ROA в RIPE:
- Войти в RIPE NCC Portal
- Создать ROA для 203.0.113.0/24
- Указать Origin AS: 65001
- Max Length: 24
Ожидание распространения ROA (обычно несколько минут)
Конфигурация VyOS
# Настройка RPKI cache servers (multiple for redundancy)
set protocols rpki cache cloudflare address rtr.rpki.cloudflare.com
set protocols rpki cache cloudflare port 8282
set protocols rpki cache cloudflare preference 1
set protocols rpki cache cloudflare polling-period 3600
set protocols rpki cache ripe address rpki-validator.ripe.net
set protocols rpki cache ripe port 8282
set protocols rpki cache ripe preference 2
set protocols rpki cache ripe polling-period 3600
# BGP конфигурация
set protocols bgp system-as 65001
set protocols bgp parameters router-id 10.0.0.1
# Upstream provider (ISP)
set protocols bgp neighbor 203.0.113.254 remote-as 174
set protocols bgp neighbor 203.0.113.254 description 'Cogent ISP'
set protocols bgp neighbor 203.0.113.254 address-family ipv4-unicast
# Включение RPKI validation
set protocols bgp address-family ipv4-unicast rpki
# RPKI-based filtering для входящих маршрутов
set policy route-map ISP-IN rule 10 action deny
set policy route-map ISP-IN rule 10 match rpki invalid
set policy route-map ISP-IN rule 10 description 'Drop RPKI invalid routes'
set policy route-map ISP-IN rule 20 action permit
set policy route-map ISP-IN rule 20 match rpki valid
set policy route-map ISP-IN rule 20 set local-preference 200
set policy route-map ISP-IN rule 20 description 'Prefer RPKI valid routes'
set policy route-map ISP-IN rule 30 action permit
set policy route-map ISP-IN rule 30 match rpki notfound
set policy route-map ISP-IN rule 30 set local-preference 100
set policy route-map ISP-IN rule 30 description 'Accept not-found with lower preference'
# Применение route-map
set protocols bgp neighbor 203.0.113.254 address-family ipv4-unicast route-map import ISP-IN
# Анонсирование собственных сетей
set protocols bgp address-family ipv4-unicast network 203.0.113.0/24
# Logging RPKI events
set system syslog file rpki.log facility protocols level info
commit
saveВерификация
# Проверка RPKI cache servers
show rpki cache-server
# Ожидаемый вывод:
# Cache Server Preference State Records
# rtr.rpki.cloudflare.com:8282 1 Connected 180234
# rpki-validator.ripe.net:8282 2 Connected 180235
# Проверка prefix table
show rpki prefix-table
# Поиск конкретного префикса
show rpki prefix-table | match 203.0.113.0
# Проверка BGP маршрутов с RPKI статусом
show bgp ipv4 unicast
# Детальная информация о маршруте
show bgp ipv4 unicast 1.1.1.0/24Пример 2: RPKI для Enterprise BGP в VK Cloud
Сценарий: Enterprise с dual-homed подключением к двум ISP, использующий RPKI для валидации входящих маршрутов.
Топология
[ISP1 - AS174]
|
[VyOS Router]
AS65002
|
[ISP2 - AS1299]Конфигурация VyOS
# RPKI cache servers
set protocols rpki cache cloudflare address rtr.rpki.cloudflare.com
set protocols rpki cache cloudflare port 8282
set protocols rpki cache cloudflare preference 1
set protocols rpki cache ntt address rpki.gin.ntt.net
set protocols rpki cache ntt port 323
set protocols rpki cache ntt preference 2
# BGP base configuration
set protocols bgp system-as 65002
set protocols bgp parameters router-id 10.0.0.1
# ISP1 (Cogent)
set protocols bgp neighbor 203.0.113.1 remote-as 174
set protocols bgp neighbor 203.0.113.1 description 'ISP1 Cogent'
set protocols bgp neighbor 203.0.113.1 address-family ipv4-unicast
# ISP2 (Telia)
set protocols bgp neighbor 198.51.100.1 remote-as 1299
set protocols bgp neighbor 198.51.100.1 description 'ISP2 Telia'
set protocols bgp neighbor 198.51.100.1 address-family ipv4-unicast
# Включение RPKI
set protocols bgp address-family ipv4-unicast rpki
# RPKI filtering с community tagging
set policy community-list RPKI-VALID rule 10 action permit
set policy community-list RPKI-VALID rule 10 regex '65002:100'
set policy community-list RPKI-INVALID rule 10 action permit
set policy community-list RPKI-INVALID rule 10 regex '65002:666'
set policy community-list RPKI-NOTFOUND rule 10 action permit
set policy community-list RPKI-NOTFOUND rule 10 regex '65002:999'
# Route-map для ISP1
set policy route-map ISP1-IN rule 10 action deny
set policy route-map ISP1-IN rule 10 match rpki invalid
set policy route-map ISP1-IN rule 10 description 'Block RPKI invalid'
set policy route-map ISP1-IN rule 20 action permit
set policy route-map ISP1-IN rule 20 match rpki valid
set policy route-map ISP1-IN rule 20 set local-preference 200
set policy route-map ISP1-IN rule 20 set community '65002:100' additive
set policy route-map ISP1-IN rule 30 action permit
set policy route-map ISP1-IN rule 30 match rpki notfound
set policy route-map ISP1-IN rule 30 set local-preference 100
set policy route-map ISP1-IN rule 30 set community '65002:999' additive
# Route-map для ISP2 (аналогичный)
set policy route-map ISP2-IN rule 10 action deny
set policy route-map ISP2-IN rule 10 match rpki invalid
set policy route-map ISP2-IN rule 20 action permit
set policy route-map ISP2-IN rule 20 match rpki valid
set policy route-map ISP2-IN rule 20 set local-preference 150
set policy route-map ISP2-IN rule 20 set community '65002:100' additive
set policy route-map ISP2-IN rule 30 action permit
set policy route-map ISP2-IN rule 30 match rpki notfound
set policy route-map ISP2-IN rule 30 set local-preference 90
set policy route-map ISP2-IN rule 30 set community '65002:999' additive
# Применение route-maps
set protocols bgp neighbor 203.0.113.1 address-family ipv4-unicast route-map import ISP1-IN
set protocols bgp neighbor 198.51.100.1 address-family ipv4-unicast route-map import ISP2-IN
# Анонсирование собственной сети
set protocols bgp address-family ipv4-unicast network 192.0.2.0/24
commit
saveМониторинг и алертинг
# Скрипт для мониторинга invalid routes
cat > /config/scripts/rpki-monitor.sh << 'EOF'
#!/bin/bash
INVALID_COUNT=$(vtysh -c "show bgp ipv4 unicast" | grep -c "i")
if [ "$INVALID_COUNT" -gt 0 ]; then
logger -t RPKI "WARNING: $INVALID_COUNT RPKI invalid routes detected"
echo "$INVALID_COUNT RPKI invalid routes detected" | mail -s "RPKI Alert" admin@example.com
fi
EOF
chmod +x /config/scripts/rpki-monitor.sh
# Добавление в cron
set system task-scheduler task rpki-check executable path /config/scripts/rpki-monitor.sh
set system task-scheduler task rpki-check interval 1h
commit
saveПример 3: RPKI для IXP (Internet Exchange Point)
Сценарий: Route Server на IXP, использующий RPKI для фильтрации маршрутов от членов.
# RPKI cache servers (multiple для HA)
set protocols rpki cache cf1 address rtr.rpki.cloudflare.com
set protocols rpki cache cf1 port 8282
set protocols rpki cache cf1 preference 1
set protocols rpki cache cf2 address rtr.rpki.cloudflare.com
set protocols rpki cache cf2 port 8282
set protocols rpki cache cf2 preference 2
set protocols rpki cache ntt address rpki.gin.ntt.net
set protocols rpki cache ntt port 323
set protocols rpki cache ntt preference 3
# Route Server BGP
set protocols bgp system-as 65000
set protocols bgp parameters router-id 192.0.2.254
# Включение RPKI
set protocols bgp address-family ipv4-unicast rpki
# Строгая RPKI политика для IXP
set policy route-map IXP-MEMBER-IN rule 10 action deny
set policy route-map IXP-MEMBER-IN rule 10 match rpki invalid
set policy route-map IXP-MEMBER-IN rule 10 description 'Block RPKI invalid routes'
set policy route-map IXP-MEMBER-IN rule 20 action permit
set policy route-map IXP-MEMBER-IN rule 20 match rpki valid
set policy route-map IXP-MEMBER-IN rule 30 action permit
set policy route-map IXP-MEMBER-IN rule 30 match rpki notfound
set policy route-map IXP-MEMBER-IN rule 30 description 'Allow not-found but tag'
set policy route-map IXP-MEMBER-IN rule 30 set community '65000:999'
# Peer group для IXP members
set protocols bgp peer-group IXP-MEMBERS address-family ipv4-unicast route-map import IXP-MEMBER-IN
# Члены IXP
set protocols bgp neighbor 192.0.2.1 peer-group IXP-MEMBERS
set protocols bgp neighbor 192.0.2.1 remote-as 65001
set protocols bgp neighbor 192.0.2.1 description 'Member AS65001'
set protocols bgp neighbor 192.0.2.2 peer-group IXP-MEMBERS
set protocols bgp neighbor 192.0.2.2 remote-as 65002
set protocols bgp neighbor 192.0.2.2 description 'Member AS65002'
commit
saveКоманды мониторинга и диагностики
Просмотр RPKI cache servers
# Статус всех cache servers
show rpki cache-serverПример вывода:
Cache Server Preference State Records Serial
rtr.rpki.cloudflare.com:8282 1 Connected 180234 12345
rpki.gin.ntt.net:323 2 Connected 180235 12346
rpki-validator.ripe.net:8282 3 Error 0 0Состояния:
- Connected: успешное подключение, получение данных
- Connecting: попытка подключения
- Error: ошибка подключения
- Stopped: cache остановлен
Просмотр RPKI prefix table
# Вся таблица префиксов (может быть очень большой)
show rpki prefix-table
# Фильтрация по префиксу
show rpki prefix-table | match "203.0.113"
# Поиск по AS
show rpki prefix-table | match "AS65001"Пример вывода:
Prefix Prefix Length Max Length Origin AS
203.0.113.0/24 24 24 65001
198.51.100.0/24 24 24 65002
192.0.2.0/24 24 25 65003Поля:
- Prefix: IP префикс из ROA
- Prefix Length: фактическая длина префикса
- Max Length: максимальная длина из ROA
- Origin AS: AS, имеющая право анонсировать
Просмотр BGP маршрутов с RPKI validation
# BGP таблица с RPKI статусом
show bgp ipv4 unicastПример вывода:
Network Next Hop Metric LocPrf Weight Path RPKI
*> 1.1.1.0/24 203.0.113.1 0 0 174 13335 V
* 8.8.8.0/24 203.0.113.1 0 0 174 15169 ?
* 185.230.63.0/24 198.51.100.1 0 0 1299 64512 IRPKI статусы:
- V (Valid): префикс валиден
- I (Invalid): префикс невалиден
- ? (Not Found): ROA не найден
Детальная информация о префиксе
# Детали BGP маршрута с RPKI
show bgp ipv4 unicast 1.1.1.0/24Пример вывода:
BGP routing table entry for 1.1.1.0/24
Paths: (2 available, best #1, table default)
Advertised to non peer-group peers:
203.0.113.1
174 13335
203.0.113.1 from 203.0.113.1 (203.0.113.1)
Origin IGP, metric 0, localpref 100, valid, external, best
Community: 174:21000 174:22013
RPKI validation state: Valid
Last update: Mon Oct 15 10:30:45 2025Проверка конкретного префикса в RPKI
# Проверка есть ли ROA для префикса
show rpki prefix 203.0.113.0/24 65001Пример вывода:
Prefix: 203.0.113.0/24
Origin AS: 65001
Prefix Length: 24
Max Length: 24
RPKI Status: ValidСтатистика RPKI
# Общая статистика RPKI
show rpki cache-connectionПример вывода:
Cache Servers: 3
Connected: 2
Disconnected: 1
Total Prefixes: 180234
IPv4 Prefixes: 150234
IPv6 Prefixes: 30000Troubleshooting
Проблема 1: Cache server недоступен
Симптомы:
show rpki cache-server
# State: ErrorРешения:
- Проверка сетевой связности:
# Ping cache server
ping rtr.rpki.cloudflare.com
# Telnet к RTR порту
telnet rtr.rpki.cloudflare.com 8282- Проверка firewall:
# Разрешение исходящих соединений к RTR портам
set firewall ipv4 output filter rule 100 action accept
set firewall ipv4 output filter rule 100 destination port 323,8282,8323
set firewall ipv4 output filter rule 100 protocol tcp
commit- Переключение на другой cache:
# Изменение preference
set protocols rpki cache ntt preference 1
set protocols rpki cache cloudflare preference 2
commit- Проверка DNS:
# Убедитесь, что DNS работает
nslookup rtr.rpki.cloudflare.com
# Можно использовать IP адрес напрямую
set protocols rpki cache cloudflare address 104.26.2.23
commitПроблема 2: Пустая prefix table
Симптомы:
show rpki prefix-table
# Empty output или очень мало записейРешения:
- Проверка cache server connection:
show rpki cache-server
# Должен быть State: Connected и Records > 0- Ручная синхронизация:
# Сброс и повторное подключение
configure
delete protocols rpki cache cloudflare
commit
set protocols rpki cache cloudflare address rtr.rpki.cloudflare.com
set protocols rpki cache cloudflare port 8282
set protocols rpki cache cloudflare preference 1
commit- Проверка логов:
show log | match rpki
show log | match RPKIПроблема 3: Valid маршруты показываются как Invalid
Симптомы:
show bgp ipv4 unicast 203.0.113.0/24
# RPKI validation state: InvalidВозможные причины:
- ROA настроен неправильно:
# Проверка ROA в RPKI prefix table
show rpki prefix-table | match 203.0.113
# Если ROA показывает другую AS или max-length слишком мал
# Необходимо исправить ROA в RIR портале- BGP анонс от неправильной AS:
# Проверка origin AS в BGP
show bgp ipv4 unicast 203.0.113.0/24
# Убедитесь, что origin AS совпадает с ROA- Префикс слишком специфичный:
# Проверка max-length
show rpki prefix-table | match 203.0.113
# Если ROA: 203.0.113.0/24 max-length 24
# А BGP анонс: 203.0.113.0/25
# Это будет Invalid - нужно увеличить max-length в ROAПроблема 4: Route-map не применяется
Симптомы:
# Invalid routes все еще принимаются
show bgp ipv4 unicast | match " I"
# Показывает invalid маршруты в таблицеРешения:
- Проверка применения route-map:
show configuration protocols bgp neighbor 203.0.113.1
# Должно быть: route-map import RPKI-IN- Проверка route-map конфигурации:
show policy route-map RPKI-IN
# Убедитесь, что:
# - match rpki invalid действие deny
# - или set local-preference низкий- Soft reset BGP session:
# После изменения route-map
clear bgp ipv4 unicast 203.0.113.1 soft in- Проверка порядка правил:
# Убедитесь, что deny invalid идет ПЕРЕД permit all
# Пример неправильно:
# rule 10 action permit (примет все)
# rule 20 action deny match rpki invalid (никогда не достигнется)
# Правильно:
# rule 10 action deny match rpki invalid
# rule 20 action permit match rpki validПроблема 5: High CPU usage from RPKI
Симптомы:
show system cpu
# High CPU usage from frr процессовРешения:
- Увеличение polling interval:
set protocols rpki cache cloudflare polling-period 7200
commit- Уменьшение количества cache servers:
# Используйте только 1-2 cache servers вместо 3+
delete protocols rpki cache ripe
commit- Оптимизация route-map:
# Используйте более простые route-maps
# Избегайте сложных community operations на каждом префиксеЛучшие практики
1. Используйте несколько cache servers
# Минимум 2 cache servers для redundancy
set protocols rpki cache primary address rtr.rpki.cloudflare.com
set protocols rpki cache primary port 8282
set protocols rpki cache primary preference 1
set protocols rpki cache secondary address rpki.gin.ntt.net
set protocols rpki cache secondary port 323
set protocols rpki cache secondary preference 2Причины:
- Защита от отказа одного validator
- Разные validators могут иметь разную актуальность данных
- Географическое разнесение
2. Начните с мягкой политики
# Первый этап: только мониторинг, не блокировать
set policy route-map RPKI-MONITOR rule 10 action permit
set policy route-map RPKI-MONITOR rule 10 match rpki invalid
set policy route-map RPKI-MONITOR rule 10 set local-preference 50
set policy route-map RPKI-MONITOR rule 10 set community '65001:666' additive
# Второй этап (после недели мониторинга): блокировка
set policy route-map RPKI-STRICT rule 10 action deny
set policy route-map RPKI-STRICT rule 10 match rpki invalidПричины:
- ROA могут быть настроены неправильно
- Можно нарушить легитимную связность
- Нужно время на выявление false positives
3. Логирование и мониторинг
# Логирование RPKI событий
set system syslog file rpki.log facility protocols level info
# Мониторинг invalid routes
# Создать скрипт для алертинга при обнаружении invalid routes4. Документируйте ROA
Ведите документацию ваших ROA:
Prefix: 203.0.113.0/24
Max Length: 24
Origin AS: 65001
Created: 2025-10-15
Purpose: Main network block
Contact: netops@example.com5. Регулярно проверяйте ROA
# Еженедельная проверка
show rpki prefix-table | match "AS65001"
# Сверка с документацией
# Убедитесь, что все ROA актуальны6. Координация с peers
Информируйте BGP peers о вашей RPKI политике:
Subject: RPKI Validation Policy
We are implementing RPKI validation on our BGP routers.
Invalid routes will be rejected starting [DATE].
Please ensure your ROAs are configured correctly:
- Check at https://rpki-validator.ripe.net/
- Validate at https://www.ripe.net/manage-ips-and-asns/resource-management/rpki/tools-and-resources
Contact: noc@example.com7. Использование RPKI для исходящих анонсов
Убедитесь, что ваши собственные ROA настроены правильно:
# Проверка собственных префиксов
show rpki prefix 203.0.113.0/24 65001
# Должно быть ValidПроверка онлайн:
- RIPE Validator: https://rpki-validator.ripe.net/
- Cloudflare: https://rpki.cloudflare.com/
- RIPE RPKI ROA Check: https://www.ripe.net/manage-ips-and-asns/resource-management/rpki
8. Max Length в ROA
Рекомендации:
- Для /24: max-length 24 (не анонсируете more-specific)
- Для больших блоков: осторожно с max-length
Пример:
Prefix: 203.0.113.0/22
Max Length: 24
Позволяет анонсировать:
- 203.0.113.0/22 (aggregate)
- 203.0.113.0/23, 203.0.112.0/23 (subdivision)
- 203.0.113.0/24 (more specific)
Не позволяет:
- 203.0.113.0/25 (too specific)Внимание: Не делайте max-length слишком большим (например, /32), это ослабляет защиту.
9. Политика для not-found маршрутов
# Вариант 1: Принимать, но с меньшим preference
set policy route-map RPKI-IN rule 30 action permit
set policy route-map RPKI-IN rule 30 match rpki notfound
set policy route-map RPKI-IN rule 30 set local-preference 100
# Вариант 2: Принимать нормально (многие префиксы еще не имеют ROA)
set policy route-map RPKI-IN rule 30 action permit
set policy route-map RPKI-IN rule 30 match rpki notfoundРекомендация: На 2025 год ~40% интернета покрыто ROA. Блокировка not-found нарушит большую часть интернета.
10. Тестирование RPKI
# Создание тестового BGP peer для проверки
set protocols bgp neighbor 192.0.2.99 remote-as 65099
set protocols bgp neighbor 192.0.2.99 description 'RPKI Test Peer'
set protocols bgp neighbor 192.0.2.99 address-family ipv4-unicast route-map import RPKI-TEST
# Проверка с известными invalid префиксами
# Например, специально создать тестовый ROA и проверитьБезопасность RPKI
Защита RTR соединения
# Использование SSH для RTR (если validator поддерживает)
set protocols rpki cache secure address validator.example.com
set protocols rpki cache secure port 22
set protocols rpki cache secure ssh username rpki-user
set protocols rpki cache secure ssh private-key-file /config/auth/rpki.keyFirewall для RTR
# Разрешение только к известным validators
set firewall group address-group RPKI-VALIDATORS address 104.26.2.23
set firewall group address-group RPKI-VALIDATORS address 104.26.3.23
set firewall ipv4 output filter rule 100 action accept
set firewall ipv4 output filter rule 100 destination group address-group RPKI-VALIDATORS
set firewall ipv4 output filter rule 100 destination port 8282
set firewall ipv4 output filter rule 100 protocol tcpПроверка целостности данных
RPKI validators проверяют криптографические подписи ROA, обеспечивая:
- Подлинность ROA от владельца ресурсов
- Целостность данных (не были изменены)
- Непрепятствование (ROA не отозван)
VyOS доверяет validator’у для выполнения этих проверок.
Статистика внедрения RPKI
Глобальное покрытие (2025)
- IPv4 ROA покрытие: ~45% анонсируемых префиксов
- IPv6 ROA покрытие: ~50% анонсируемых префиксов
- Топ AS с ROA: Google, Cloudflare, Amazon, Microsoft, Akamai
Региональные различия
- Европа: ~55% (благодаря RIPE NCC инициативам)
- Северная Америка: ~40%
- Азиатско-Тихоокеанский регион: ~35%
- Латинская Америка: ~30%
- Африка: ~25%
Полезные ресурсы для мониторинга
- RIPE RPKI Dashboard: https://www.ripe.net/analyse/internet-measurements/routing-information-service-ris/current-ris-routing-information
- Cloudflare RPKI: https://rpki.cloudflare.com/
- NIST RPKI Monitor: https://rpki-monitor.antd.nist.gov/
- RIPE RPKI Validator: https://rpki-validator.ripe.net/
Заключение
RPKI является важнейшим компонентом безопасности современного интернета. Правильная реализация RPKI на VyOS позволяет:
- Защититься от BGP hijacking - предотвращение несанкционированных анонсов ваших префиксов
- Валидировать входящие маршруты - снизить риск route hijacking от других AS
- Улучшить безопасность глобальной маршрутизации - внести вклад в безопасность интернета
- Соответствовать best practices - многие крупные сети требуют RPKI от peers
Ключевые рекомендации
- Создайте ROA для всех ваших префиксов в RIR
- Подключитесь к нескольким публичным RPKI validators
- Начните с мягкой политики (понижение preference), затем переходите к строгой (deny)
- Мониторьте RPKI validation states
- Координируйтесь с BGP peers о RPKI политиках
- Регулярно проверяйте и обновляйте ROA
Дальнейшее развитие
RPKI продолжает развиваться:
- ASPA (Autonomous System Provider Authorization) - защита от route leaks
- BGPsec - полная криптографическая защита BGP path
- ROV (Route Origin Validation) улучшения
Дополнительные ресурсы
- VyOS Documentation - RPKI
- RFC 6480 - RPKI Architecture
- RFC 6482 - ROA Format
- RFC 8210 - RTR Protocol
- RIPE NCC RPKI Documentation
- Cloudflare RPKI Toolkit
История изменений
| Дата | Версия | Изменения |
|---|---|---|
| 2025-10-15 | 1.0 | Первоначальная версия документации |
Примечание: Данная документация актуальна для VyOS версий 1.3.x, 1.4.x и 1.5.x. Всегда проверяйте официальную документацию VyOS для вашей конкретной версии. RPKI поддержка базируется на FRRouting 7.5+.