RESTCONF¶
Описан в RFC8040.
Что нужно настроить, чтобы заработал restconf:
Выпускаем самоподписанный сертификат
security pki certificate generate self-signed restconf.crt key restconf.key generate rsa 2048 parameters common-name restconf certificate:restconf.crt generated
Разрешаем доступ на устройство по порту 6020 - правим control-plane acl
Смотрим то, что разрешено сейчас - это readonly acl.
show ip access-lists default-control-plane-acl
Копируем правила и создаём копию ACL. Добавляем правило, разрешающее доступ по порту 6020
ip access-list control-plane-acl-with-restconf 9 permit tcp any any eq 6020 30 permit udp any any eq bfd ttl eq 255 40 permit udp any any eq bfd-echo ttl eq 254 50 permit udp any any eq multihop-bfd 60 permit udp any any eq micro-bfd 70 permit ospf any any 80 permit tcp any any eq ssh telnet www snmp bgp https msdp ldp 90 permit udp any any eq bootps bootpc snmp rip ntp ldp 100 permit tcp any any eq mlag ttl eq 255 110 permit udp any any eq mlag ttl eq 255 120 permit vrrp any any 130 permit ahp any any 140 permit pim any any 150 permit igmp any any 160 permit tcp any any range 5900 5910 170 permit tcp any any range 50000 50100 180 permit udp any any range 51000 51100 190 permit tcp any any eq 3333 200 permit tcp any any eq nat ttl eq 255 210 permit tcp any eq bgp any 220 permit rsvp any any
Применяем ACL на Control-Plane
control-plane ip access-group control-plane-acl-with-restconf in
Включаем сервис RESTCONF
management api restconf transport https test ssl profile restconf
Настраиваем SSL
management security ssl profile restconf certificate restconf.crt key restconf.key
Вы божественны
Теперь проверяем, что порт открыт
nc -zv bcn-spine-1.arista 6020 Connection to bcn-spine-1.arista 6020 port [tcp/*] succeeded!
И собственно курлим:
curl -k -s GET 'https://bcn-spine-1.arista:6020/restconf/data/openconfig-interfaces:interfaces/interface=Management1' \ --header 'Accept: application/yang-data+json' \ -u eucariot:password
Так мы извлекли информацию про интерфейс Management1
.
А вот так можно получить данные по BGP:
curl -k -s GET 'https://bcn-spine-1.arista:6020/restconf/data/network-instances/network-instance/config/protocols' \ --header 'Accept: application/yang-data+json' \ -u eucariot:password | jq
Строка URL формируется следующим образом:
https://<ADDRESS>/<ROOT>/data/<[YANG-MODULE]:CONTAINER>/<LEAF>/[?<OPTIONS>]
- <ADDRESS> - адрес RESTCONF-сервера.
- <ROOT> - Точка входа для запросов RESTCONF. Можно найти тут:
https://<ADDRESS>/.well-known/
- data - прям так и остаётся
- <[YANG MODULE:]CONTAINER> - Базовый контейнер YANG. Наличие YANG Module - не обязательно.
- <LEAF> - Отдельный элемент в контейнере
- <OPTIONS> - Опциональные параметры, влияющие на результат.
Пробуем выяснить <ROOT>
:
curl -k https://bcn-spine-1.arista:6020/.well-known/host-meta <XRD xmlns=’http://docs.oasis-open.org/ns/xri/xrd-1.0’> <Link rel=’restconf’ href=’/restconf’/> </XRD>
curl -k -X PUT https://bcn-spine-1.arista:6020/restconf/data/system/config \ -H 'Content-Type: application/json' -u eucariot:password \ -d '{"openconfig-system:hostname":"vika-kristina-0"}' {"openconfig-system:hostname":"vika-kristina-0"}
Проверим?
curl -k -X GET https://bcn-spine-1.arista:6020/restconf/data/system/config \ --header 'Accept: application/yang-data+json' \ -u eucariot:password {"openconfig-system:hostname":"bcn-spine-1","openconfig-system:login-banner":"","openconfig-system:motd-banner":""}
Что? Не поменялось?! И оно действительно не поменялось. Я не смог заставить это работать.
Просто жаль сил, вложенных в этот протокол. Потому что на пятки ему наступает gRPC/gNMI.
На самостоятельное изучение: RESTCONF intro with Postman - Part 1.