NETCONF
Network Configuration Protocol (NETCONF) je standardem IETF pro správu síťových zařízení. První verze byla pracovní skupinou NETCONF publikována v prosinci 2006 jako RFC 4741. Pozdější, revidovaná, verze protokolu byla zveřejněna v červnu 2011 jako RFC 6241, které protokol označuje jako Proposed Standard. Na začátku roku 2013 se pracovní skupina shodla na záměru posunout specifikaci protokolu na úroveň Internet Standard[1].
NETCONF poskytuje mechanismus, kterým je manipulováno s konfiguračními daty síťového zařízení. Jednotlivé operace jsou prováděny na principu vzdáleného volání procedur (RPC), kdy klient specifikuje požadovanou operaci a její parametry, zatímco NETCONF server tuto operaci provede a klientovi vrátí odpověď s výsledkem. Komunikační zprávy jsou kódované pomocí XML a přenášeny pomocí transportního protokolu (SSH nebo TLS), který zajišťuje bezpečnost. Obsah přenášených konfiguračních dat je nad rámec protokolu NETCONF. Pro specifikaci konkrétních datových modelů konfiguračních dat jednotlivých zařízení je vhodné používat jazyk YANG, který byl vyvinut přímo pro tyto potřeby.
Popis
editovatKomunikace
editovatPři ustavení NETCONF spojení odešlou obě strany, klient i server, <hello> zprávu, ve které oznamují verzi protokolu, kterou podporují, a seznam podporovaných rozšíření. Pro další komunikaci si obě strany zvolí nejvyšší společnou verzi protokolu. Seznam podporovaných rozšířený je důležitý hlavně pro klienta, který by se serveru měl přizpůsobit. Server většinou seznam podporovaných rozšíření ze strany klienta ignoruje.
Další komunikace mezi klientem a serverem je synchronní. Klient odesílá zprávu <rpc>, ve které specifikuje svůj požadavek. Server pak po vykonání požadované operace vrací zprávu <rpc-reply>, která podle typu požadavku obsahuje v případě úspěchu element <data> s vyžádaným obsahem nebo <ok>, v případě chyby pak element <rpc-error> s dalšími informacemi o problému. Server může komunikovat s více klienty najednou, ale požadavky jsou vždy zpracovávány sériově.
RFC 5277 rozšiřuje základní protokol o asynchronní zprávy, tzv. notifikace. V tomto případě se klient přihlašuje k odběru (specifikované podmnožiny) notifikací, které server generuje na základě konkrétních událostí (přihlášení uživatele, změna konfiguračních dat apod.). Notifikace jsou pak klientovi doručovány asynchronně.
Transportní protokoly
editovatNETCONF vyžaduje od transportního protokolu vytvoření dlouho-trvajícího, spojově orientovaného spojení. Transportní vrstva navíc poskytuje možnost zabezpečeného spojení včetně autentizace uživatele a kontroly integrity dat. Každá implementace protokolu NETCONF musí podporovat transport pomocí protokolu SSH (RFC 6242). Jako další jsou (nebo historicky byly) podporovány:
- Simple Object Access Protocol (SOAP) - RFC 4743 (historic)
- Blocks Extensible Exchange Protocol (BEEP) - RFC 4744 (historic)
- Transport Layer Security (TLS) - RFC 5539
Konfigurační data
editovatBez rozšíření pracuje protokol NETCONF pouze s jedním úložištěm konfiguračních dat, který nazývá <running>. Toto úložiště obsahuje data podle nichž bylo zařízení konfigurováno (což nutně neznamená, že všechny parametry odráží aktuální stav zařízení). Pomocí základní sady rozšíření jsou pak definována další dvě úložiště:
- <startup> - sada konfiguračních dat, která jsou aplikována při startu zařízení (po zapnutí nebo restartu)
- <candidate> - pracovní sada konfiguračních dat
NETCONF předpokládá, že obsahem datových úložišť je správně strukturovaný (well-formed) XML dokument. Pro definici obsahu těchto dokumentů vznikl v rámci pracovní skupiny NETMOD modelovací jazyk YANG (RFC 6020). V rámci stejné pracovní skupiny pak probíhá i standardizace některých obecných datových modelů pro konfiguraci síťových zařízení.
Z pohledu NETCONF se data v úložišti dělí na stavová (nelze je konfigurovat) a konfigurační (uživatel může změnit jejich hodnotu).
Základní operace
editovatRFC 6241 definuje základní sadu operací pro manipulaci s konfiguračními daty konfigurovaného zařízení:
- <get> - získání všech konfiguračních i stavových dat zařízení
- <get-config> - získání pouze konfiguračních dat zařízení
- <edit-config> - změna (modifikace, přidání, odebrání) konfiguračních dat zařízení
- <copy-config> - zkopírování kompletní sady konfiguračních dat zařízení
- <delete-config> - odstranění kompletní sady konfiguračních dat zařízení
- <lock> a <unlock> - zamčení a odemčení datového úložiště pro konkrétní NETCONF spojení
Operace <get> a <get-config> mohou obsahovat specifikaci filtru, který omezuje požadavek pouze na určitou podmnožinu dat zařízení.
Další dvě operace slouží pro manipulaci s NETCONF spojením:
- <close-session> - uzavření aktuálního NETCONF spojení
- <kill-session> uzavření jiného, obvykle neaktivního, NETCONF spojení
Rozšíření
editovatProtokol může být dále rozšiřován pomocí tzv. capabilities, které umožňují zejména přidávat nové operace a případně měnit chování operací stávajících. Při navazování spojení oznamuje server v rámci své <hello> zprávy sadu podporovaných rozšíření a popisuje tak klientovi své chování během další komunikace. Již RFC 6241, definující základní chování protokolu NETCONF, obsahuje i následující sadu rozšíření:
- Writable-Running - umožňuje zápis do datového úložiště <running>
- Candidate Configuration - specifikuje datové úložiště <candidate>
- Configrmed-Commit - umožňuje provedení potvrzovaného commitu
- Rollback-on-Error - umožňuje návrat změn při neúspěšné operaci <edit-config>
- Validate - umožňuje validovat obsah datových úložišť
- Distinct Startup - specifikuje datové úložiště <startup>
- URL - umožňuje manipulaci s datovými úložišti pomocí dat obsažených v souborech dostupných pomocí URL
- XPath - umožňuje referencovat konfigurační data pomocí XPath
Mezi další významná rozšíření patří:
- Event Notifications - doručování asynchronních zpráv (RFC 5277)
- With-Defaults - práce s výchozími hodnotami definovanými v datovém modelu (RFC 6243)
- Partial Locking - zamykání přístupu k samostatným částem datových úložišť (RFC 5717)
- Access Control - řízení přístupu uživatelů ke konfiguračním datům a operacím (RFC 6536)
Historie
editovatOd 80. let 20. století se pro potřeby správy sítí využíval hlavně protokol SNMP. Oproti svému původnímu účelu byl však tento protokol využíván hlavně k monitoringu a detekci chyb (fault management). Úlohu konfigurace však přebraly zejména proprietární rozhraní jednotlivých výrobců. V roce 2002 se vzniklou situaci rozhodlo řešit IETF. IAB uspořádalo pracovní setkání se síťovými operátory a jako výsledek vzniklo RFC 3535, které popisuje požadavky a podněty operátorů ke správě sítí a síťových zařízení.
V rámci IETF byl vznik nové pracovní skupiny iniciován hned v polovině roku 2002. Pracovní skupina NETCONF pak oficiálně vznikla v dubnu 2003. Při vývoji nového protokolu byl jako základ použit JUNOScript, společnosti Juniper Networks. Specifikace protokolu NETCONF pak byla zveřejněna v prosinci 2006. Společně s RFC 4741 byly vydány i další RFC, které popisují použití protokolu NETCONF s využitím SSH (RFC 4742), SOAP (RFC 4743) a BEEP (RFC 4744). V květnu 2009 pak byla zveřejněna ještě specifikace použití protokolu NETCONF společně s TLS (RFC 5539), naopak RFC dokumenty popisující použití s protokoly SOAP a BEEP byly v říjnu 2012 označeny jako Historic.
Dostupné implementace
editovatPracovní skupina NETCONF se snaží udržovat přehled všech implementací protokolu NETCONF[2]. Následující seznam obsahuje open-source implementace protokolu NETCONF podle RFC 6241.
- libnetconf
-
- Sdílená knihovna v jazyce C pro prostředí GNU/Linux, umožňuje implementaci jak NETCONF klienta, tak i NETCONF serveru. Součástí jsou i ukázkové aplikace a rozhraní pro tvorbu serverových modulů.
- licence: BSD
- web: https://code.google.com/p/libnetconf/
- ncclient
- Python knihovna pro vývoj klientských aplikací.
- licence: Apache License 2.0
- web: https://github.com/vbajpai/ncclient
- net-netconf
-
- Implementace klientské strany v Ruby.
- licence: BSD
- web: https://github.com/Juniper/net-netconf
- NetconfX 2.0
-
- Implementace klientské strany v Javě.
- licence: GNU GPL v3
- web: https://web.archive.org/web/20130517120555/http://www.centeredlogic.com/netconfx_main.html
- OpenYuma
-
- Klon zaniklého projektu Yuma, obsahuje NETCONF klient, server a YANG kompilátor pro tvorbu serverových modulů. Určeno pro prostředí GNU/Linux a jazyk C.
- licence: BSD
- web: https://github.com/OpenClovis/OpenYuma
- yuma123
-
- Další klon zaniklého projektu Yuma.
- web: http://sourceforge.net/projects/yuma123/
- licence: BSD
Reference
editovat- ↑ Archivovaná kopie. www.internetsociety.org [online]. [cit. 2013-09-23]. Dostupné v archivu pořízeném dne 2013-05-09.
- ↑ http://trac.tools.ietf.org/wg/netconf/trac/wiki#NetconfImplementations