Comment spécifier l’instance de routage dans les applications Python 3 sur les équipements exécutant Junos OS Evolved
Comprendre le module libpyvrf
Une instance de routage est un ensemble de tables de routage, d’interfaces et de paramètres de protocole de routage. Chaque instance de routage a un nom unique et une table ip unicast correspondante, qui peuvent être utilisées pour séparer le trafic de cette instance de l’autre. Par exemple, sur les équipements exécutant Junos OS Evolved, vous pouvez activer une instance VRF (Virtual Routing and Forwarding) de gestion dédiée, mgmt_junos
qui utilise une table de routage administrative distincte dédiée aux tâches de gestion.
Les instances de routage vous permettent d’isoler le trafic traversant le réseau sans utiliser plusieurs équipements pour segmenter votre réseau. Lorsque vous utilisez des instances de routage pour isoler le trafic, les services publics ping
réseau aiment et ssh
doivent référencer l’instance de routage correcte afin d’envoyer le trafic vers une destination accessible via cette instance.
L’image de Junos OS Evolved s’exécute nativement sur Linux, fournissant un accès direct à tous les services et opérations Linux, y compris les bibliothèques Python qui font partie de l’image de base. La bibliothèque Python 3 sur les équipements exécutant Junos OS Evolved comprend également le module Juniper Networks libpyvrf
, qui permet aux applications Python 3 exécutées dans le shell de spécifier l’instance de routage à utiliser pour des processus et des services réseau spécifiques.
Le tableau 1 présente les libpyvrf
fonctions que vous pouvez utiliser dans les applications Python 3 exécutées dans le shell Linux. Vous pouvez utiliser les fonctions pour instruire un processus d’utilisation d’une instance de routage spécifique. Si le même processus nécessite plusieurs instances de routage, vous pouvez également définir le contexte d’instance de routage pour un socket spécifique, ce qui n’affecte pas le contexte du processus lui-même. Les paquets via le socket utilisent ensuite la table de routage associée à cette instance. Lorsque vous définissez l’instance de routage d’un processus ou d’un socket, le libpyvrf
module définit le contexte du VRF Linux qui correspond à l’instance de routage Junos OS.
|
Description |
---|---|
|
Renvoyez le VRF Linux correspondant à une instance de routage Junos OS. |
|
Renvoyez l’index de la table de routage associée à l’instance de routage spécifiée. |
|
Renvoyez l’instance de routage associée à la tâche spécifiée.
Note:
Cette fonction est obsolète à partir de Junos OS Evolved version 22.1R1. |
|
Renvoyez l’instance de routage associée au processus en cours. |
|
Définissez l’instance de routage pour le socket spécifié. |
|
Définissez l’instance de routage pour le processus spécifié.
Note:
Cette fonction est obsolète à partir de Junos OS Evolved version 22.1R1. |
|
Définissez l’instance de routage pour le processus actuel. |
Les fonctions du libpyvrf
module peuvent soulever les exceptions suivantes en fonction de la fonction et de l’erreur :
libpyvrf.error
— Généré en caslibvrf
d’erreur.libpyvrf.evo_not_ready
— Généré lorsque la pile réseau Junos OS Evolved n’est pas prête, par exemple lorsque l’équipement est en cours de démarrage.libpyvrf.invalid_table
— Généré lorsque l’instance de routage ou l’ID de table spécifié n’est pas valide.
L’exemple de script Python suivant tente d’envoyer un ping à un hôte qui n’est accessible que via l’instance de mgmt_junos
routage. Le script ping d’abord l’hôte avant d’appeler la set_vrf()
fonction. Le script appelle ensuite la set_vrf()
fonction pour associer l’instance de mgmt_junos
routage au processus en cours et ping à l’hôte.
[vrf:none] user@host:~# cat libpyvrf-ping.py import libpyvrf as vrf import subprocess command = [ 'ping', '-c', '3', 'host1.example.com' ] try: # Ping the host before setting the routing instance subprocess.call(command) == 0 # Set the routing instance vrf.set_vrf("mgmt_junos") print ("\nUsing routing instance:", vrf.get_vrf()) # Ping the host after setting the routing instance subprocess.call(command) == 0 except vrf.invalid_table as e: print ("Invalid Table") except vrf.evo_not_ready as e : print ("Junos OS Evolved network stack is not ready") except vrf.error as e : print ("Generic libvrf error")
Lorsque vous exécutez le script, la première commande ping échoue, car le processus utilise l’instance de routage par défaut dans ce cas, et l’hôte n’est accessible que par l’instance de mgmt_junos
routage. La deuxième commande ping, qui utilise l’instance de mgmt_junos
routage, réussit.
[vrf:none] user@host:~# python3 libpyvrf-ping.py ping: unknown host host1.example.net Using routing instance: mgmt_junos PING host1.example.com (198.51.100.10) 56(84) bytes of data. 64 bytes from host1.example.com (198.51.100.10): icmp_seq=1 ttl=60 time=1.02 ms 64 bytes from host1.example.com (198.51.100.10): icmp_seq=2 ttl=60 time=0.672 ms 64 bytes from host1.example.com (198.51.100.10): icmp_seq=3 ttl=60 time=0.741 ms --- host1.example.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.876/0.946/1.001/0.063 ms
Vous pouvez réinitialiser l’instance de routage à l’association d’instance de routage par défaut dans une application Python en spécifiant une chaîne vide pour le nom de l’instance de routage. Par exemple :
vrf.set_vrf("")
Si une application ne spécifie pas d’instance de routage, l’association d’instance de routage par défaut dépend de l’environnement du processus. Si l’environnement précharge la bibliothèque de libsi.so , l’application utilise par défaut l’instance de routage et la table par défaut, default.inet
. Dans le cas contraire, aucune instance de routage par défaut n’est associée au processus ou aux sockets.
Pour déterminer si l’environnement précharge la bibliothèque libsi.so , vérifiez que la valeur de la LD_PRELOAD
variable d’environnement inclut le chemin d’accès à la bibliothèque.
[vrf:none] user@host:~# env | grep LD_PRELOAD LD_PRELOAD=libsi.so
Si la LD_PRELOAD
variable n’inclut pas le chemin de bibliothèque libsi.so , vous pouvez utiliser les commandes appropriées à votre shell pour l’ajouter, par exemple :
[vrf:none] user@host:~# export LD_PRELOAD="/path/to/libsi.so" [vrf:none] user@host:~# env | grep LD_PRELOAD LD_PRELOAD=libsi.so
fonction get_host_vrf_name()
Syntaxe
host_vrf_name get_host_vrf_name(vrf_name)
Description
Renvoyez le VRF Linux correspondant à une instance de routage Junos OS.
Paramètres
vrf_name |
Nom d’une instance de routage Junos OS. |
Valeur de retour
host_vrf_name | Nom du VRF Linux correspondant à l’instance de routage Junos OS. |
Exemples d’utilisation
L’exemple suivant imprime le VRF Linux correspondant à plusieurs instances de routage Junos OS :
[vrf:none] user@host:~# cat libpyvrf-get-host-vrf-name.py import libpyvrf as vrf try: print ("mgmt_junos VRF:", vrf.get_host_vrf_name("mgmt_junos")) print ("default VRF:", vrf.get_host_vrf_name("default")) print ("L3VPN-1 VRF:", vrf.get_host_vrf_name("L3VPN-1")) except vrf.invalid_table as e: print ("Invalid Table")
[vrf:none] user@host:~# python3 libpyvrf-get-host-vrf-name.py mgmt_junos VRF: mgmt_junos default VRF: vrf0 L3VPN-1 VRF: vrf52
Informations de publication
Fonction introduite dans Junos OS Evolved version 20.3R1.
fonction get_table_id()
Syntaxe
table_id get_table_id(vrf_name)
Description
Renvoyez l’index de la table de routage associée à l’instance de routage spécifiée. Si l’instance de routage n’est pas définie, la fonction renvoie -1.
Paramètres
vrf_name |
Nom d’une instance de routage Junos OS. |
Valeur de retour
table_id | Index de la table de routage pour l’instance de routage donnée. |
Exemples d’utilisation
L’exemple suivant récupère et imprime l’index de la table pour l’instance de mgmt_junos
routage et une instance foo
de routage non défini .
user@host> show route forwarding-table extensive table mgmt_junos Routing table: mgmt_junos.inet [Index 36738] Internet: ... Routing table: mgmt_junos.inet6 [Index 36738] Internet6: ...
[vrf:none] user@host:~# cat libpyvrf-get-table-id.py import libpyvrf as vrf try: print (vrf.get_table_id("mgmt_junos")) print (vrf.get_table_id("foo")) except vrf.evo_not_ready as e: print ("Junos OS Evolved network stack is not ready") except vrf.error as e: print ("Generic libvrf error")
Le script renvoie l’index de la table pour l’instance mgmt_junos
et -1 pour l’instance non défini.
[vrf:none] user@host:~# python3 libpyvrf-get-table-id.py 36738 -1
Informations de publication
Fonction introduite dans Junos OS Evolved version 20.3R1.
fonction get_task_vrf()
Syntaxe
vrf_name get_task_vrf(tid)
Description
Renvoyez l’instance de routage Junos OS associée à l’ID de processus spécifié.
Paramètres
tid |
ID de processus pour lequel récupérer l’instance de routage associée. |
Valeur de retour
vrf_name | Nom de l’instance de routage associée à l’ID de processus. |
Exemples d’utilisation
L’exemple suivant récupère l’ID de processus du processus en cours et associe l’instance de mgmt_junos
routage à ce processus. Lorsque le script appelle la get_task_vrf()
fonction pour demander l’instance de routage pour cet ID de processus, elle renvoie l’instance de mgmt_junos
routage.
[vrf:none] user@host:~# cat libpyvrf-set-task-vrf.py import libpyvrf as vrf import os, subprocess command = [ 'ping', '-c', '3', 'host1.example.com' ] try: pid = os.getpid() vrf.set_task_vrf(pid, "mgmt_junos") print ("Using routing instance:", vrf.get_task_vrf(pid)) subprocess.call(command) == 0 except vrf.invalid_table as e: print ("Invalid Table") except vrf.evo_not_ready as e: print ("Junos OS Evolved network stack is not ready") except vrf.error as e: print ("Generic libvrf error")
[vrf:none] user@host:~# python3 libpyvrf-set-task-vrf.py Using routing instance: mgmt_junos PING host1.example.com (198.51.100.10) 56(84) bytes of data. 64 bytes from host1.example.com (198.51.100.10): icmp_seq=1 ttl=60 time=1.02 ms 64 bytes from host1.example.com (198.51.100.10): icmp_seq=2 ttl=60 time=0.672 ms 64 bytes from host1.example.com (198.51.100.10): icmp_seq=3 ttl=60 time=0.741 ms --- host1.example.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.876/0.946/1.001/0.063 ms
Informations de publication
Fonction introduite dans Junos OS Evolved version 20.3R1.
Fonction dépréciée dans Junos OS Evolved version 22.1R1.
fonction get_vrf()
Syntaxe
vrf_name get_vrf()
Description
Renvoyez l’instance de routage Junos OS associée au processus en cours.
Valeur de retour
vrf_name |
Nom de l’instance de routage associée au processus en cours. |
Exemples d’utilisation
L’exemple suivant associe l’instance de mgmt_junos
routage au processus en cours. Lorsque le script appelle la get_vrf()
fonction pour demander l’instance de routage pour le processus en cours, elle renvoie l’instance de mgmt_junos
routage.
[vrf:none] user@host:~# cat libpyvrf-set-vrf.py import libpyvrf as vrf import subprocess command = [ 'ping', '-c', '3', 'host1.example.com' ] try: vrf.set_vrf("mgmt_junos") print ("Using routing instance:", vrf.get_vrf()) subprocess.call(command) == 0 except vrf.invalid_table as e: print ("Invalid Table") except vrf.evo_not_ready as e: print ("Junos OS Evolved network stack is not ready") except vrf.error as e: print ("Generic libvrf error")
[vrf:none] user@host:~# python3 libpyvrf-set-vrf.py Using routing instance: mgmt_junos PING host1.example.com (198.51.100.10) 56(84) bytes of data. 64 bytes from host1.example.com (198.51.100.10): icmp_seq=1 ttl=60 time=1.02 ms 64 bytes from host1.example.com (198.51.100.10): icmp_seq=2 ttl=60 time=0.672 ms 64 bytes from host1.example.com (198.51.100.10): icmp_seq=3 ttl=60 time=0.741 ms --- host1.example.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.876/0.946/1.001/0.063 ms
Informations de publication
Fonction introduite dans Junos OS Evolved version 20.3R1.
fonction set_socket_vrf()
Syntaxe
set_socket_vrf(socket_fd, vrf_name)
Description
Définissez l’instance de routage utilisée par le socket spécifié. Il est utile de définir l’instance de routage pour un socket lorsque plusieurs sockets au sein d’une même application doivent utiliser différentes instances de routage. Vous pouvez définir le contexte d’instance de routage pour chaque socket individuellement sans affecter le contexte de l’instance de routage pour le processus ou l’application.
Paramètres
socket_fd |
Descripteur de fichiers de Socket. |
vrf_name |
Nom d’une instance de routage Junos OS.
|
Informations de publication
Fonction introduite dans Junos OS Evolved version 20.3R1.
fonction set_task_vrf()
Syntaxe
set_task_vrf(tid, vrf_name)
Description
Définissez l’instance de routage que le processus avec l’ID de processus spécifié utilisera pour effectuer des opérations.
Alors que set_vrf()
définit l’instance de routage pour le processus en cours, set_task_vrf()
l’instance de routage du processus avec l’ID de processus spécifié.
Paramètres
tid |
ID de processus pour le processus qui utilisera l’instance de routage spécifiée. |
vrf_name |
Nom d’une instance de routage Junos OS.
|
Exemples d’utilisation
L’exemple de script Python suivant récupère l’ID de processus du processus en cours et associe l’instance de mgmt_junos
routage à ce processus. Le script ping ensuite un hôte qui n’est accessible que via cette instance de routage.
[vrf:none] user@host:~# cat libpyvrf-set-task-vrf.py import libpyvrf as vrf import os, subprocess command = [ 'ping', '-c', '3', 'host1.example.com' ] try: pid = os.getpid() vrf.set_task_vrf(pid, "mgmt_junos") print ("Using routing instance:", vrf.get_task_vrf(pid)) subprocess.call(command) == 0 except vrf.invalid_table as e: print ("Invalid Table") except vrf.evo_not_ready as e: print ("Junos OS Evolved network stack is not ready") except vrf.error as e: print ("Generic libvrf error")
[vrf:none] user@host:~# python3 libpyvrf-set-task-vrf.py Using routing instance: mgmt_junos PING host1.example.com (198.51.100.10) 56(84) bytes of data. 64 bytes from host1.example.com (198.51.100.10): icmp_seq=1 ttl=60 time=1.02 ms 64 bytes from host1.example.com (198.51.100.10): icmp_seq=2 ttl=60 time=0.672 ms 64 bytes from host1.example.com (198.51.100.10): icmp_seq=3 ttl=60 time=0.741 ms --- host1.example.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.876/0.946/1.001/0.063 ms
Informations de publication
Fonction introduite dans Junos OS Evolved version 20.3R1.
Fonction dépréciée dans Junos OS Evolved version 22.1R1.
fonction set_vrf()
Syntaxe
set_vrf(vrf_name)
Description
Définissez l’instance de routage que le processus actuel utilisera pour effectuer les opérations. Les futures recherches utiliseront cette instance de routage.
Pour associer une instance de routage à un processus spécifique au lieu du processus en cours, utilisez la set_task_vrf()
fonction.
Paramètres
vrf_name |
Nom d’une instance de routage Junos OS.
|
Exemples d’utilisation
L’exemple de script Python suivant associe l’instance de mgmt_junos
routage au processus en cours. Le script ping ensuite un hôte qui n’est accessible que via cette instance de routage.
import libpyvrf as vrf import subprocess command = [ 'ping', '-c', '3', 'host1.example.com' ] try: vrf.set_vrf("mgmt_junos") print ("Using routing instance:", vrf.get_vrf()) subprocess.call(command) == 0 except vrf.invalid_table as e: print ("Invalid Table") except vrf.evo_not_ready as e: print ("Junos OS Evolved network stack is not ready") except vrf.error as e: print ("Generic libvrf error")
[vrf:none] user@host:~# python3 libpyvrf-set-vrf.py Using routing instance: mgmt_junos PING host1.example.com (198.51.100.10) 56(84) bytes of data. 64 bytes from host1.example.com (198.51.100.10): icmp_seq=1 ttl=60 time=1.02 ms 64 bytes from host1.example.com (198.51.100.10): icmp_seq=2 ttl=60 time=0.672 ms 64 bytes from host1.example.com (198.51.100.10): icmp_seq=3 ttl=60 time=0.741 ms --- host1.example.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.876/0.946/1.001/0.063 ms
Informations de publication
Fonction introduite dans Junos OS Evolved version 20.3R1.