Инфраструктура RPKI#
Описание#
Инфраструктура RPKI использует механизмы PKI для обеспечения безопасности процессов маршрутизации. Основная задача инфраструктуры - подтверждение соответствия анонсов маршрутов BGP корректному номеру автономной системы - ASN, которое используется маршрутизатором с поддержкой протокола BGP для валидации каждого маршрута с помощью механизма ROA. Описание инфраструктуры представлено в спецификации RFC 6480.
Устройство под управлением ПО Факел, которое также является маршрутизатором с поддержкой протокола BGP, способно получать ROA информацию из надежного источника RPKI, который зачастую обозначается как сервер, который выполняет валидацию RPKI, по протоколу RTR.
Существуют несколько видов реализации инфраструктура RPKI с открытым исходным кодом:
Routinator от NLnet Labs, написанный на языке Rust
Validator от RIPE NCC, написанный на языке Java
Описание протокола RTR представлено в спецификации RFC 8210.
Совет
При первом знакомстве с возможностями инфраструктуры RPKI рекомендуется обратиться к руководству, подготовленному NLnet Labs, которое позволит быстро получить наиболее важную для понимания информацию. Данное руководство затрагивает практически все аспекты, начиная с самого понятия RPKI, заканчивая вариантами его развертывания в инфраструктуре. Также руководство содержит подробное описание всех возможностей эксплуатации инфраструктуры RPKI.
Ключевые возможности#
Текущая реализация RPKI обладает следующими ключевыми возможностями.
Маршрутизатор с поддержкой протокола BGP может подключаться к одному или нескольким кэш-серверам RPKI для получения надежных префиксов, чтобы установить их соответствие с автономными системами. Может быть обеспечена отказоустойчивость путем конфигурирования различных сокетов сервера со своим приоритетом.
Если в течение предварительно заданного тайм-аута не удается установить соединение с кэш-сервером RPKI, маршрутизатор будет обрабатывать префиксы без установления соответствия с автономными системами. При этом маршрутизатор и далее будет пытаться установить соединение с кэш-сервером RPKI в фоновом режиме.
По умолчанию использование инфраструктуры RPKI не влияет на выбор наилучшего пути, а именно: ненадежные маршруты по-прежнему будут рассматриваться в данном процессе. Однако маршрутизатор может быть сконфигурирован таким образом, чтобы игнорировать ненадежные префиксы.
Карты маршрутов могут быть сконфигурированы таким образом, чтобы соответствовать определенному состоянию в рамках валидации RPKI. Это позволяет создавать локальные политики управления маршрутами BGP, основанные на установлении соответствия между префиксами и автономными системами.
Обновления, получаемые от кэш-серверов RPKI, применяются сразу, приводя также к обновлению соответствующим образом результатов обнаружения наилучшего пути (для этого необходимо активировать опцию «мягкого» обновления).
Импортированные префиксы в результате валидации могут принимать значения:
valid - префикс и номер ASN соответствуют существующей конфигурации ROA. Это означает, что анонс маршрутов является доверенным.
invalid - префикс или его длина, а также номер ASN не соответствуют существующей конфигурации ROA. Это означает, что имеет место либо попытка взлома системы, либо как минимум некорректная ее конфигурация, что приводит к получению недоверенных анонсов маршрутов.
notfound - отсутствует какая-либо конфигурация ROA, которая покрывает данный префикс. К сожалению данная ситуация характерна для почти 80% префиксов IPv4, анонс которых выполняется в зоне DFZ.
Примечание
Если существует потребность в назначении сети глобальных адресов, необходимо обязательно убедиться в том, что префиксы имеют соответствующую конфигурацию ROA, чтобы избежать присвоения им значения notfound при использовании инфраструктуры RPKI. Для большинства номеров ASN это означает необходимость публикации конфигураций ROA в реестре RIR (RIPE NCC, APNIC, ARIN, LACNIC, AFRINIC), которая также возникает при планировании анонсов в зоне DFZ. Зачастую большие сети имеют собственные удостоверяющие центры RPKI и серверы для публикации конфигураций ROA, вместо того, чтобы публиковать их в реестре RIR, но данный вопрос находится за рамкам документации на ПО Факел. Для более глубокого погружения в данный вопрос рекомендуется ознакомиться со статьей о продукте Krill.
Настройка#
Алгоритм настройки#
Для настройки протокола RPKI на маршрутизаторе нужно настроить ip адрес для подключения к кэш-серверу RPKI, указать приоритет в случае подключения к нескольким кэш-серверам и задать временной интервал для обновления локального кэша RPKI.
Пример настройки#
Пример, в котором в качестве кэш-сервера RPKI используется решение Routinator с адресом 192.0.2.1. В данном примере рассматривается построение карт маршрутов на основе описанных выше состояний префиксов. Создается карта маршрутов для получения маршрутов, обнаруженных при импорте. Такой классификатор подразумевает отбрасывание префиксов с состоянием invalid и установку более высокого приоритета для префиксов с состоянием valid по сравнению с состоянием notfound.
Настройка кэш-сервера RPKI:
set protocols rpki cache 192.0.2.1 port '3323'
set protocols rpki cache 192.0.2.1 preference '1'
Настройка карты маршрутов:
set policy route-map ROUTES-IN rule 10 action 'permit'
set policy route-map ROUTES-IN rule 10 match rpki 'valid'
set policy route-map ROUTES-IN rule 10 set local-preference '300'
set policy route-map ROUTES-IN rule 20 action 'permit'
set policy route-map ROUTES-IN rule 20 match rpki 'notfound'
set policy route-map ROUTES-IN rule 20 set local-preference '125'
set policy route-map ROUTES-IN rule 30 action 'deny'
set policy route-map ROUTES-IN rule 30 match rpki 'invalid'
После того, как маршрутизатор настроен отбрасывать префиксы с состоянием invalid, можно убедиться в корректности его работы путем использования экспериментальной веб-утилиты RPKI Test от NLnet Labs.
Список команд#
Основные настройки#
- • set protocols rpki polling-period <1-86400>#
Задает временной интервал для обновления локального кэша RPKI. Значение временного интервала задается в секундах. По умолчанию значение временного интервала равно 300 секунд.
- • set protocols rpki cache <address> port <port>#
Задает адрес (IPv4, IPv6 или FQDN) <address> и номер порта <port> для подключения к кэш-серверу RPKI.
- • set protocols rpki cache <address> preference <preference>#
Задает приоритет <preference> для подключения, к кэш-серверу RPKI <address>.
Примечание
Выполнение команды set protocols rpki cache <address> preference <preference> является обязательным условие в случае подключения к нескольким кэш-серверам RPKI.
Настройка доступа по SSH#
Подключение к кэш-серверу RPKI может осуществляться не только с использованием стека протоколов HTTP/TLS для защиты коммуникаций, но и с использованием протокола SSH.
- • generate ssh client-key /config/auth/id_rsa_rpki#
Создает ключевую пару для SSH клиента. После того, как ключевая пара для SSH клиента будет создана, можно переходить к настройке самого подключения.
- • set protocols rpki cache <address> ssh username <user>#
Задает имя пользователя <user> для подключения к кэш-серверу <address> по протоколу SSH.
- • set protocols rpki cache <address> ssh known-hosts-file <filepath>#
Задает путь к файлу <filepath>, содержащему известные хосты для подключения по SSH к кэш-серверу RPKI <address>.
- • set protocols rpki cache <address> ssh private-key-file <filepath>#
Задает путь к файлу <filepath>, который содержит закрытый ключ устройства для подключения к кэш-серверу RPKI <address>.
- • set protocols rpki cache <address> ssh public-key-file <filepath>#
Задает путь к файлу <filepath>, который содержит открытый ключ устройства для подключения к кэш-серверу RPKI <address>.
Примечание
При подключении к кэш-серверу по протоколу SSH настройка значений параметров known-hosts-file, private-key-file и public-key-file является обязательным.