Configurare i dispositivi JunOS per Juniper Support Insights
Intro
Tornando sul binario “supportato”, dopo aver distribuito vLWC bisogna preparare i dispositivi da monitorare. Non riesco a trovare una guida concisa per configurare correttamente i network element per JSI, quindi condivido i miei appunti dopo un lungo esercizio di tentativi ed errori.
Dopo aver letto le JSI FAQ, la mia interpretazione è che su ogni network element ci serve:
- NETCONF-SSH abilitato
- SFTP abilitato
- Un account utente di processo dedicato a JSI/vLWC con permessi sufficienti (principio del minimo privilegio)
Una panoramica di come funziona la raccolta dei dati si trova in questo flyer
Prerequisiti
Coppia di chiavi SSH
Ci serve una coppia di chiavi SSH pubblica/privata per l’utente. Puoi crearla su qualsiasi macchina Linux.
Nota: Strada facendo ho scoperto che JunOS non accetta chiavi DSA ma solo RSA.
ciro.iriarte@jhost01:~> ssh-keygen -t rsa -C "JSI process user" -f ~/.ssh/id_rsa-jsi
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): <-- make sure you input a passphrase
Enter same passphrase again:
Your identification has been saved in /home/ciro.iriarte/.ssh/id_rsa-jsi
Your public key has been saved in /home/ciro.iriarte/.ssh/id_rsa-jsi.pub
The key fingerprint is:
SHA256:vMRG09Sd7BR1Q5P7B+9RakR2thSR3Md3bBOtYmm+VVc JSI process user
The key's randomart image is:
+---[RSA 3072]----+
| .. o+&@|
| o . B*E|
| o . *.=O|
| + . = =o+|
| S + o =+|
| o . . +.+|
| . + .o|
| . .|
| |
+----[SHA256]-----+Userai:
- il contenuto di ~/.ssh/id_rsa-jsi.pub per configurare l’accesso negli switch
- il contenuto di ~/.ssh/id_rsa-jsi + la passphrase verranno usati nel portale JSI per definire le credenziali di accesso.
Comandi che devono essere permessi.
Dalle FAQ citate prima ricaviamo che i comandi che l’appliance eseguirà sono:
file list detail
show bgp summary
show chassis alarms
show chassis fpc
show chassis hardware extensive
show chassis routing-engine
show interfaces descriptions
show interfaces terse
show isis adjacency
show ospf neighbor
show rsvp neighbor
show system buffers
show system commit
show system core-dumps
show system license
show system uptime
show version
show vrrp detail
request support information
sftp
Switch gestiti da Apstra
NETCONF
NETCONF è già un requisito di Apstra, quindi dovresti averlo già coperto. Per verificarlo rapidamente, puoi controllare che la porta di default sia in ascolto di richieste di connessione:
ciro.iriarte@jhost01:~> nmap -p 830 ipf01-lf01.<TLD>
Starting Nmap 7.92 ( https://nmap.org ) at 2023-12-27 14:12 EST
Nmap scan report for ipf01-lf01.<TLD> (x.y.z.w)
Host is up (0.0012s latency).
PORT STATE SERVICE
830/tcp open netconf-ssh
Nmap done: 1 IP address (1 host up) scanned in 6.58 secondsSFTP
Non so se SFTP sia un requisito di Apstra, ma ho scoperto che tutti gli switch dell’ambiente Apstra avevano già il sottosistema SFTP abilitato. Se non è il tuo caso, ti basta un configlet per abilitarlo.
Utente di processo
In questo ambiente non abbiamo TACACS+ (siamo nel 2023, team Juniper, possiamo avere LDAP una buona volta?). In pratica useremo i configlet di Apstra per creare un utente di processo da Apstra.
Creazione del configlet
- Raggiungi la pagina di creazione dei configlet.
- Compila i dati di base del configlet
- Incolla il contenuto seguente nel corpo e clicca su “Create”
system { login { class jsi-class { permissions view-configuration; allow-commands "(file list detail)|(show bgp summary)|(show chassis alarms)|(show chassis fpc)|(show chassis hardware extensive)|(show chassis routing-engine)|(show interfaces descriptions)|(show interfaces terse)|(show isis adjacency)|(show ospf neighbor)|(show rsvp neighbor)|(show system buffers)|(show system commit)|(show system core-dumps)|(show system license)|(show system uptime)|(show version)|(show vrrp detail)|(request support information)|(sftp)"; deny-commands "(clear)|(file)|(file show)|(help)|(load)|(monitor)|(op)|(request)|(save)|(set)|(start)|(test)"; deny-configuration all; } user svcjsi { full-name "JSI process user"; uid 2007; class jsi-class; authentication { ssh-rsa "ssh-rsa your-key-super-long-string JSI process user"; } } } }
Nota: Assicurati che l’UID sia univoco nel tuo ambiente. Ho visto post/note/documentazione a caso che citano l’UID 2000 (per altre implementazioni non correlate); io, super furbo, l’ho cambiato in 2001 per evitare conflitti con configurazioni che tutti potrebbero copiare e incollare, e a quanto pare chi ha implementato Apstra aveva avuto la stessa idea.
Importare il configlet nel blueprint
Per applicare davvero il configlet creato ai tuoi network element, devi:
- Importare il configlet nel blueprint, assegnandolo ai dispositivi di interesse. Nel mio caso, tutti gli spine e i leaf switch.
- Fare il commit della configurazione perché venga inviata ai dispositivi.
Switch standalone
Questi switch non sono gestiti da Apstra né da altri manager, e non ci sono nemmeno TACACS+ o servizi simili di autenticazione o RBAC (ho già detto che mi piacerebbe avere LDAP per riutilizzare i servizi di autenticazione esistenti?). Dato che sono solo 2, la configurazione manuale e locale non dovrebbe essere un problema.
Collegati allo switch con un utente admin, in modalità edit.
NETCONF
Abilitiamo il servizio. I ragazzi dell’automazione, quelli fighi, raccomandano gli ultimi 3 comandi per l’interoperabilità, ma visto che vLWC è uno strumento chiuso di Juniper per JunOS, potrebbe aspettarsi la configurazione di default, meno standard e non conforme. Qualcosa da monitorare e verificare dopo aver aggiunto gli switch a JSI.
set system services netconf ssh
set system services netconf rfc-compliant
set system services netconf yang-compliant
set system services netconf hello-message yang-module-capabilities advertise-standard-yang-modules
SFTP
Il sottosistema SFTP va abilitato, sembra essere disabilitato di default.
set system services ssh sftp-server
Utente di processo
- Creiamo la classe utente con il livello di accesso richiesto
set system login class jsi-class permissions view-configuration set system login class jsi-class allow-commands "(file list detail)|(show bgp summary)|(show chassis alarms)|(show chassis fpc)|(show chassis hardware extensive)|(show chassis routing-engine)|(show interfaces descriptions)|(show interfaces terse)|(show isis adjacency)|(show ospf neighbor)|(show rsvp neighbor)|(show system buffers)|(show system commit)|(show system core-dumps)|(show system license)|(show system uptime)|(show version)|(show vrrp detail)|(request support information)|(sftp)" set system login class jsi-class deny-commands "(clear)|(file)|(file show)|(help)|(load)|(monitor)|(op)|(request)|(save)|(set)|(start)|(test)" set system login class jsi-class deny-configuration all - Creiamo l’utente, usando la classe creata prima. Usa la tua chiave pubblica, non la mia!
set system login user svcjsi class jsi-class set system login user svcjsi full-name "JSI process user" set system login user svcjsi uid 2007 set system login user svcjsi authentication ssh-rsa "ssh-rsa your-key-super-long-string JSI process user"
Commit finale
- Fare il commit della configurazione (sia servizio che utente)
commit
Testare NETCONF a mano
Prima di passare per tutto l’apparato di JSI, il mio consiglio è fare un test locale di base con l’utente che abbiamo creato.
Accedi a una macchina Linux con accesso agli switch e alla chiave privata dell’utente che abbiamo creato, e prova a connetterti allo switch usando NETCONF
# We start the ssh key agent
eval $(ssh-agent)
# We add the key to the agent, the command will prompt for the key passphrase
ssh-add ~/.ssh/id_rsa-jsi
# We try a connection on default port
MYSWITCH=host.tld
ssh svcjsi@$MYSWITCH -p 830 -s netconfLa risposta dovrebbe essere simile a
<!-- No zombies were killed during the creation of this user interface -->
<!-- user svcjsi, class j-jsi-class -->
<nc:hello xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
<nc:capabilities>
<nc:capability>urn:ietf:params:netconf:base:1.0</nc:capability>
<nc:capability>urn:ietf:params:netconf:capability:candidate:1.0</nc:capability>
<nc:capability>urn:ietf:params:netconf:capability:confirmed-commit:1.0</nc:capability>
<nc:capability>urn:ietf:params:netconf:capability:validate:1.0</nc:capability>
<nc:capability>urn:ietf:params:netconf:capability:url:1.0?scheme=http,ftp,file</nc:capability>
<nc:capability>urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&revision=2011-06-01</nc:capability>
<nc:capability>urn:ietf:params:xml:ns:netconf:capability:candidate:1.0</nc:capability>
<nc:capability>urn:ietf:params:xml:ns:netconf:capability:confirmed-commit:1.0</nc:capability>
<nc:capability>urn:ietf:params:xml:ns:netconf:capability:validate:1.0</nc:capability>
<nc:capability>urn:ietf:params:xml:ns:netconf:capability:url:1.0?scheme=http,ftp,file</nc:capability>
<nc:capability>urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&revision=2013-07-15</nc:capability>
<nc:capability>urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring</nc:capability>
<nc:capability>http://xml.juniper.net/netconf/junos/1.0</nc:capability>
<nc:capability>http://xml.juniper.net/dmi/system/1.0</nc:capability>
</nc:capabilities>
<nc:session-id>65596</nc:session-id>
</nc:hello>
]]>]]>È tutto qui?
Beh, per la configurazione dei NE dovrebbe essere tutto. Ora dovresti poter accedere al portale JSI e fare l’onboarding dei dispositivi (ragazzi di Juniper, per favore aggiungete il supporto per gli FQDN nel form oltre agli indirizzi IP).
Buon divertimento!
Altri documenti di riferimento
Nel caso tu stia ancora leggendo, questi sono alcuni documenti e appunti che ho consultato durante il processo.
- Establish an SSH Connection for a NETCONF Session
- Managing Juniped devices with SSH and NETCONF
- Example: Configuring User Permissions with Access Privileges for Operational Mode Commands
- Connect to the NETCONF Server Using SSH
- Technical note on using SSH keys with JunOS
Errori noti
JSI segnala credenziali errate
Durante i miei test ho scoperto che il portale web di JSI non gestisce l’aggiornamento delle credenziali. Puoi salvare le modifiche, vedi le nuove informazioni nel portale web, ma sembra che non arrivino al loro backend. Ho dovuto eliminare e ricreare le credenziali nel portale web perché funzionassero.
NETCONF segnalato come non configurato
Durante i miei test ho potuto confermare manualmente che NETCONF era configurato correttamente, ma JSI continuava a segnalare:
The NETCONF subsystem is not enabled on the devices with the listed IP addresses. Please check and correct these entries
Il team JSI ha spiegato che c’era un timer che non permetteva al dialogo NETCONF di terminare correttamente. L’hanno risolto da parte loro ampliando la configurazione del timeout; non so se sia un parametro valido per tutta la piattaforma o se vada richiesto per i tuoi specifici nodi/siti/account.
Puoi citare il Juniper SR # 2023-1228-038580.
Modifica questo articolo su GitHub · hai trovato un errore? Le pull request sono benvenute.