NETCONF
NETCONF (англ. Network Configuration Protocol) — протокол управления конфигурацией сетевых устройств, являющийся стандартом, разработанным рабочей группой IETF. Первая версия была опубликована в декабре 2006 года в RFC 4741[1]. Позднее, в июне 2011 года, была опубликована пересмотренная версия протокола (RFC 6241), в которой статус NETCONF определён как «предлагаемый стандарт» (Proposed Standard)[2]. В начале 2013 года рабочая группа договорилась о планах продвижения спецификации на уровень полноценного интернет-стандарта (Internet Standard)[3].
NETCONF предоставляет единый механизм управления конфигурационными данными сетевого оборудования. Операции выполняются по принципу удалённого вызова процедур (RPC): клиент указывает требуемую операцию и параметры, NETCONF-сервер обрабатывает её и возвращает результат. Передача данных осуществляется в формате XML с помощью транспортных протоколов (например, SSH или TLS), обеспечивающих безопасность соединения. Содержимое конфигурационных данных выходит за рамки спецификации NETCONF; для описания их структуры рекомендуется использовать язык YANG, специально разработанный для этих целей.
Описание
Коммуникация
При установлении соединения обе стороны — клиент и сервер — отправляют сообщение <hello>, в котором сообщают поддерживаемую версию протокола и список реализованных расширений. Для дальнейшего обмена выбирается максимальная совместимая версия NETCONF; перечень расширений важен в первую очередь для клиента, который должен адаптироваться под сервер. Обычно сервер игнорирует список расширений, заявленных клиентом.
Дальнейшая коммуникация происходит синхронно: клиент отправляет запрос <rpc>, а сервер, выполнив операцию, отвечает <rpc-reply>, содержащим либо элемент <data> с результатом, либо <ok> в случае успешного завершения, либо <rpc-error> в случае ошибки с разъяснением проблемы. Сервер способен обслуживать несколько клиентов, однако запросы всегда обрабатываются последовательно.
Протокол может быть расширен для поддержки асинхронных сообщений (уведомлений), что определено в RFC 5277[4]. В этом случае клиент подписывается на определённые уведомления, которые сервер отправляет при наступлении заданных событий (например, вход пользователя или изменение конфигурации). Такие уведомления поступают клиенту асинхронно.
Транспортные протоколы
NETCONF требует от транспортного протокола поддержания длинной поддерживаемой сессии с обеспечением целостности, аутентификации и защищённости. Каждая реализация NETCONF должна поддерживать транспорт через протокол SSH (RFC 6242). Кроме SSH, были (или ранее поддерживались) и другие варианты:
- Simple Object Access Protocol (SOAP) — RFC 4743 (historic)
- Blocks Extensible Exchange Protocol (BEEP) — RFC 4744 (historic)
- Transport Layer Security (TLS) — RFC 5539
Конфигурационные данные
В базовой реализации NETCONF работает с одним хранилищем конфигурационных данных, обозначаемым как <running>. Оно содержит актуальные параметры, применяемые для конфигурации устройства (что не гарантирует соответствие текущему состоянию оборудования). Основной спецификацией определены ещё два варианта хранилищ:
- <startup> — конфигурация, применяемая при запуске устройства (включении или перезагрузке)
- <candidate> — рабочая область для подготовки изменений конфигурации
NETCONF предполагает, что содержимое хранилищ — корректно сформированные XML-документы. Для их описания рабочая группа NETMOD разработала язык моделирования YANG (RFC 6020). В рамках этой же группы ведётся стандартизация определённых общих моделей конфигурационных данных.
С точки зрения NETCONF, данные в хранилище делятся на состояния (read-only, не подлежащие изменению) и конфигурационные (могут быть изменены пользователем).
Базовые операции
RFC 6241 определяет следующий базовый набор операций для управления конфигурационными данными сетевого устройства:
- <get> — получение всех конфигурационных и статических данных
- <get-config> — получение только конфигурационных данных
- <edit-config> — изменение (модификация, добавление, удаление) конфигурационных данных
- <copy-config> — копирование полного набора конфигурационных данных
- <delete-config> — удаление полного набора конфигурационных данных
- <lock> и <unlock> — блокировка и разблокировка хранилища для определённой NETCONF-сессии
Операции <get> и <get-config> могут включать фильтр для получения конкретной подмножества данных.
Для управления соединением предусмотрены дополнительные операции:
- <close-session> — завершение текущего NETCONF-соединения
- <kill-session> — завершение другой (обычно неактивной) NETCONF-сессии
Расширения
Протокол NETCONF может быть дополнен с помощью механизма capabilities, что позволяет добавлять новые операции и изменять поведение существующих. При установке соединения сервер сообщает в <hello> перечень поддерживаемых расширений, определяя таким образом особенности дальнейшего взаимодействия. Уже RFC 6241 определяет следующие ключевые расширения:
- Writable-Running — разрешает запись в хранилище <running>
- Candidate Configuration — описывает хранилище <candidate>
- Confirmed-Commit — поддержка подтверждённого применения изменений
- Rollback-on-Error — откат изменений при ошибке в <edit-config>
- Validate — валидация содержимого хранилища
- Distinct Startup — определяет хранилище <startup>
- URL — доступ к хранилищу через файлы по URL
- XPath — обращение к конфигурационным данным с помощью XPath
Существуют и другие важные расширения:
- Event Notifications — асинхронная доставка сообщений (RFC 5277)
- With-Defaults — работа со значениями по умолчанию, определёнными в модели данных (RFC 6243)
- Partial Locking — блокировка отдельных частей хранилища (RFC 5717)
- Access Control — управление правами доступа к данным и операциям (RFC 6536)
История
С 1980-х годов для сетевого управления широко применялся SNMP. Однако фактически он использовался, в первую очередь, для мониторинга и обнаружения ошибок, а функции конфигурирования поддерживались в основном через проприетарные интерфейсы производителей оборудования. В 2002 году IETF решила изменить ситуацию: IAB организовал встречу с операторами сетей, по итогам которой был подготовлен RFC 3535, где изложены основные требования к управлению сетями и оборудованием.
В IETF процесс создания новой рабочей группы был запущен уже в середине 2002 года, а формально группа NETCONF образовалась в апреле 2003 года. В качестве основы для нового протокола был взят JUNOScript компании Juniper Networks. Спецификация NETCONF опубликована в декабре 2006 года; вместе с RFC 4741 вышли и дополнительные документы по использованию NETCONF через SSH (RFC 4742), SOAP (RFC 4743) и BEEP (RFC 4744). В мае 2009 года опубликована спецификация NETCONF через TLS (RFC 5539), а документы по SOAP и BEEP в октябре 2012 года были объявлены устаревшими (Historic).
Доступные реализации
Рабочая группа NETCONF ведёт список существующих реализаций протокола[5]. В таблице приведены некоторые open-source реализации NETCONF на основе RFC 6241.
- libnetconf
-
- Библиотека на языке C для GNU/Linux, включает инструменты для реализации как клиента, так и сервера NETCONF, а также демонстрационные приложения и интерфейс для серверных модулей.
- лицензия: BSD
- сайт: https://code.google.com/p/libnetconf/
- ncclient
- Библиотека на Python для разработки клиентских приложений.
- лицензия: Apache License 2.0
- сайт: https://github.com/vbajpai/ncclient
- net-netconf
-
- Клиентская реализация NETCONF на Ruby.
- лицензия: BSD
- сайт: https://github.com/Juniper/net-netconf
- NetconfX 2.0
-
- Клиентская реализация NETCONF на Java.
- лицензия: GNU GPL v3
- сайт: https://web.archive.org/web/20130517120555/http://www.centeredlogic.com/netconfx_main.html
- OpenYuma
-
- Клон устаревшего проекта Yuma, содержит клиент, сервер и компилятор YANG для серверных модулей. Ориентирован на GNU/Linux и C.
- лицензия: BSD
- сайт: https://github.com/OpenClovis/OpenYuma
- yuma123
-
- Ещё один клон проекта Yuma.
- сайт: http://sourceforge.net/projects/yuma123/
- лицензия: BSD
Примечания
- ↑ RFC 4741: NETCONF Configuration Protocol (англ.). IETF Tools (декабрь 2006). Дата обращения: 14 июля 2024. Архивировано 8 июля 2021 года.
- ↑ RFC 6241: NETCONF Configuration Protocol (англ.). IETF Tools (июнь 2011). Дата обращения: 14 июля 2024. Архивировано 8 июля 2021 года.
- ↑ Successful NETCONF Interoperability Testing Announced at IETF 85 (англ.). Internet Society. Дата обращения: 14 июля 2024. Архивировано 9 мая 2013 года.
- ↑ RFC 5277: NETCONF Event Notifications (англ.). IETF Tools (июль 2008). Дата обращения: 14 июля 2024. Архивировано 8 июля 2021 года.
- ↑ NetconfImplementations (англ.). IETF Tools. Дата обращения: 14 июля 2024. Архивировано 7 января 2015 года.
Литература
- R. Enns (июнь 2011). “NETCONF Configuration Protocol”. RFC [англ.]. 6241. Архивировано из оригинала 2021-07-08. Дата обращения 2024-07-14. Используется устаревший параметр
|url-status=(справка); Проверьте дату в|date=(справка на английском)