Знакомимся с NETCONF

Знакомимся с NETCONF — показываю как приступить к изучению автоматизации сети в целом и NETCONF в частности.

Каждый раз задумываю начать текст статьи: "В этой короткой заметке..", но получаются длинные статьи, а иногда просто монстры. Это сложно, долго, тяжело закончить такую статью, довести до кондиции, очень много времени уходит на правку и отлавливание бесконечных косяков. Наконец (надеюсь), будет короткая статья.

Предварительно обязательно нужно прочесть Как установить Python и иметь на компе рабочую миниконду.


NETCONF

Что это, зачем надо? Есть SNMP, штука хорошая, используется везде, но в основном для мониторинга. Для конфигурирования не прижилось, хотя можно. Основной метод конфигурирования всё ещё CLI, его потихоньку вытесняют методы с ипользованием скриптов. Вот для этого и нужен NETCONF, для скриптинга.

Из чего состоит? Строится NETCONF на базе модели YANG, которая определяется в RFC6020. Вкратце YANG это альтернатива SNMP MIBs, стандарт для построения данных. Используется чтобы описать что в устройстве можно мониторить, все административные действия по управлению устройством, что и как может быть сконфигурировано на устройстве, какие оповещения устройство может отсылать.

YANG имеет структуру дерева и совместим по формату с XML. Эта структура модульная, иерархическая, описывает как достичь конечного элемента, может этот элемент быть сконфигурирован или нет. Конфигурационные данные в явном виде отделены от информации о состоянии устройства.

FeatureSNMPNETCONF
ResourcesOIDsPaths
Data modelsMIBsYANG
Data modeling languageSMIYANG
Management operationsSNMPNETCONF
EncodingBERXML, JSON
Transport stackUDPSSH/TCP
SNMP and NETCONF

Где применяется? На свежих железках с IOS XE. На самой железке есть агент NETCONF и он должен быть включен.

R1(config)# netconf-yang

После этого становится возможным отправлять агенту запросы. Работает поверх SSH на порту 830.

Ну и появилось всё это добро не вчера, а примерно лет 10 назад и работало поначалу криво-косо, отъедало ресурсы. Сейчас всё поменялось, постоянно допиливают и шлифуют. Сегодня-завтра NETCONF самая жара.


Настройка "сырого" NETCONF

Всё как в пословице: не могу вам "наловить рыбы", зато могу дать "удочку". Открываем эту лабу, её выбрал потому что тут подробно рассказывается как подключаться к устройству. Потребуется регистрация на DevNet.

Резервируем на втором шаге лабы железку IOS XE on CSR Latest Code, на почту придёт письмо с сылкой на AnyConnect. Скачиваем/устанавливаем, при установке отмечаем только первый пункт, там где основные компоненты. Подготовка железки займёт некоторое время, минут через 10 придёт второе письмо с реквизитами для AnyConnect. Подключаемся, открываем из Пуска винды Anaconda Prompt.

(base) C:\Users\Andy> ssh developer@10.10.20.48 -p 830 -s netconf - тут выскочит вопрос принимать 
ли сертификат от устройства (yes).
developer@10.10.20.48's password: C1sco12345
<?xml version="1.0" encoding="UTF-8"?>
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.0</capability>
<capability>urn:ietf:params:netconf:base:1.1</capability>
...
]]>]]>

Вывалилось вот такое сообщение Hello с capabilities для устройства, довольно длинное. Заканчивается оно на ]]>]]>, это что-то типа признака окончания сообщения. Для начала работы в ответ нужно отправить своё Hello, это будет:

<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
 <capabilities> <capability>urn:ietf:params:netconf:base:1.0</capability>
 </capabilities>
</hello>
]]>]]>

Можно было бы рассказать тут поподробнее, но абсолютно понятно, что вот так в чистом виде, работать невозможно. Поэтому завершаем сессию, отправив close-session:

<rpc message-id="9999999" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<close-session />
</rpc>

(base) C:\Users\Andy>

Настройка через ncclient

В промпте конды вводим для установки модуля:

(base) C:\Users\Andy> pip3 install ncclient xmltodict

Далее открываем Jupyter и делаем все шаги лабы.

Знакомимся с Netcon
Ставьте пробелы, это улучшает читаемость кода

Важное замечание, про это и в лабе сказано, с помощью NETCONF можно настраивать не всё:

Keep in mind that not all IOS commands are currently available as YANG models yet. That 
means that not every specific IOS configuration can be changed or added via NETCONF. 
However, with every new IOS XE release, more YANG capabilties are added.

В отличие от модуля Netmiko, который игнорирует ошибки в скрипте, NETCONF отбрасывает скрипт, если в нём ошибки присутствуют.

Leave a Comment

Scroll to Top