gRIBI
La interfaz de base de información de enrutamiento gRPC (gRIBI) es un servicio gRPC que permite a las aplicaciones externas agregar, modificar y eliminar rutas mediante programación en un dispositivo de red.
El servicio gRIBI es una API para agregar, modificar y eliminar entradas de enrutamiento en la base de información de enrutamiento (RIB, también conocida como tabla de enrutamiento) de un dispositivo. Si la entrada es apta para reenvío, el sistema operativo agrega automáticamente la entrada a la base de información de reenvío (FIB, también conocida como tabla de reenvío) del dispositivo. Las aplicaciones cliente de gRIBI pueden usar cualquier idioma admitido por el kit de herramientas de extensión (JET) de Juniper. La aplicación cliente puede ejecutarse en un sistema de administración de red externo o como una aplicación local en el dispositivo de red.
El archivo de definición de proto del servicio gRIBI se encuentra en https://github.com/openconfig/gribi/blob/master/v1/proto/service/gribi.proto. Los mensajes gRIBI compatibles con los dispositivos de Junos se encuentran en el paquete JET IDL.
El modelo de tabla de reenvío abstracta (AFT) de OpenConfig es un modelo de datos de YANG que describe las entradas de reenvío instaladas en un dispositivo de red. gRIBI utiliza una versión traducida de Protocol Buffer del modelo AFT de OpenConfig para describir las entradas RIB que puede modificar. La representación protobuf del esquema AFT de OpenConfig se encuentra en el archivo de definición de prototipo ubicado en https://github.com/openconfig/gribi/blob/master/v1/proto/gribi_aft/gribi_aft.proto.
Beneficios de gRIBI:
- Envía confirmaciones cuando se programa una ruta.
- Admite búsquedas jerárquicas.
- Admite el arbitraje cuando hay varios clientes conectados a la sesión de gRIBI.
Utilice el show route extensive comando para mostrar los datos de ruta para gRIBI, incluido el ID de cliente y el ID del grupo de salto siguiente utilizado por la ruta.
Recomendamos usar gRIBI o la API de servicio JET RIB, no ambos simultáneamente, especialmente para el mismo conjunto de rutas.
RPC compatibles
Los dispositivos Junos admiten RPC de servicio gRIBI para recuperar, agregar, modificar o eliminar rutas de forma remota del RIB de un dispositivo. Las RPC funcionan modificando o leyendo las tablas de reenvío abstractas (AFT) en el dispositivo.
| RPC | Definición | Introducido en la versión |
|---|---|---|
Modify() |
Añadir, modificar o eliminar entradas del AFT. |
Junos OS versión 19.4R1 Junos OS Evolved versión 20.3R1 |
Get() |
Recupere las entradas instaladas de la AFT. |
Junos OS evolucionado 22.2R1 |
Flush() |
Quite todas las entradas AFT del dispositivo que coincidan con lo descrito en el |
Junos OS evolucionado 22.2R1 |
Configuración de dispositivos de red
Junos OS Evolved versión 23.4R1 y posteriores
Antes de empezar:
- Configure los servicios de gRPC en el dispositivo de red como se describe en Configurar servicios de gRPC.
Para configurar el dispositivo de red para gRIBI:
Antes de la versión 23.4R1 de Junos OS Evolved
Antes de empezar:
- Configure los servicios de gRPC en el dispositivo de red como se describe en Configurar servicios de gRPC.
Para configurar el dispositivo de red para gRIBI:
Modificar rutas
Utilice RPC Modify() para instalar nuevas rutas y editar rutas existentes en el RIB del servidor gRIBI. Las rutas se agregan como rutas estáticas.
Modify() es un RPC de transmisión bidireccional. El cliente envía una Modify() RPC que contiene ModifyRequest mensajes para modificar una entrada AFT en el servidor. Para cada ModifyRequest, el servidor gRIBI responde al cliente con un ModifyResponse mensaje.
El ModifyRequest mensaje consta de uno o más AFTOperation mensajes. Cada AFTOperation mensaje define una solicitud para agregar, modificar o eliminar una sola entrada de AFT. El servidor gRIBI procesa las operaciones AFT en el orden en que el Modify() RPC las transmite.
Los dispositivos Junos admiten los siguientes tipos de entrada AFT:
IPv4Entry: programe una ruta IPv4.NextHopEntry—Programe un próximo salto.NextHopGroup—Programe un grupo de salto siguiente.
Utilice RPC Modify() para realizar las siguientes funciones:
- Reconocimientos de ruta
- Programar una ruta IPv4
- Programa Next Hops y Next Hop Groups
- Programar próximos saltos con direcciones MAC
- Búsquedas jerárquicas y tunelización de IP en IP
- Arbitraje para múltiples clientes
- Programar una ruta de reserva en una instancia de VRF
- Selección de instancias VRF
- Reenvío basado en políticas
Reconocimientos de ruta
El servidor envía una confirmación cuando programa correctamente una ruta en el motor de reenvío de paquetes mediante la Modify() RPC. Si la API de gRIBI no puede programar una ruta en el motor de reenvío de paquetes dentro del período de tiempo de espera especificado, el servidor envía un mensaje de error. Puede configurar la duración de este tiempo de espera. El reconocimiento solo es válido para la ruta más reciente. Si una ruta anterior envía una confirmación pero la nueva no, el motor de reenvío de paquetes lo registra como un error.
Los dispositivos Junos admiten los valores siguientes en el entry campo del mensaje AFTOperation:
AFTOperation {
EntryAckType {
INVALID;
FIB_ACK;
RIB_ACK;
}
ack_type;
)
Los dispositivos Junos no admiten la MAC_ENTRY opción.
Utilice el show route extensive comando para mostrar el estado de confirmación. El estado de confirmación es persistente en los reinicios del proceso rpd.
Programar una ruta IPv4
Para programar una ruta IPv4, utilice la IPv4Entry entrada AFT. El AFT hace coincidir los paquetes de entrada en función de la dirección de destino y los asigna a los siguientes saltos correspondientes. Instale la entrada AFT en la instancia VRF predeterminada, así como las instancias VRF de ingeniería de tráfico en su red. Para instalar una entrada AFT en una instancia no predeterminada, especifique la instancia VRF en el network_instance campo del AFTOperation mensaje. Por ejemplo:
- Instancia de VRF de ingeniería de tráfico:
g_b4_cos1 - Establezca el
network_instancecampo en:g_b4_cos1
El cliente gRIBI solo programa la IPv4Entry entrada AFT en el servidor después de recibir confirmaciones del servidor de que el servidor recibió los mensajes asociados NextHopGroup NextHop . Si el cliente programa la IPv4Entry entrada AFT en el servidor sin confirmación del NextHopGroup mensaje, agrega la ruta al servidor como una ruta oculta.
Programa Next Hops y Next Hop Groups
Utilice la RPC de gRIBI Modify() para programar un próximo salto o un grupo de próximos saltos en el servidor de gRIBI. La RPC solo crea los saltos siguientes y los grupos de saltos siguientes dentro de la instancia VRF predeterminada.
Cuando hay grupos de próximos saltos y siguientes saltos en el mismo ModifyRequest mensaje, el cliente gRIBI los maneja de acuerdo con la operación AFT. Si la operación AFT suma NextHop y NextHopGroup entradas, el cliente agrega todos los saltos siguientes al servidor antes de agregar los grupos de saltos siguientes. Si la operación AFT elimina NextHop y NextHopGroup las entradas, el cliente las procesa en el orden inverso: elimina todos los grupos de saltos siguientes antes de eliminar los saltos siguientes.
En dispositivos Junos, la RPC crea una instancia de los siguientes saltos en la inet6.3 tabla como FC01::next_hop_id, donde el ID del próximo salto está en hexadecimal. Por ejemplo, si el ID del siguiente salto es 10, el servidor instala una ruta llamada FC01::A en la inet6.3 tabla.
Los grupos de saltos siguientes aparecen en la inet6.3 tabla como FC02::next_hop_id. Por ejemplo, si el ID del grupo de salto siguiente es 100, el servidor instala una ruta llamada FC02::64 en la inet6.3 tabla.
Por ejemplo, para programar un objeto de siguiente salto a través de una interfaz directamente accesible:
-
Suponiendo que se puede acceder a la dirección 10.0.1.2 a través de la interfaz et-0/0/7.0, establezca los siguientes campos en el
Aftsmensaje, donde = means establezca el campo en ese valor:NextHop { ip_address = 10.0.1.2; // Next hop IP address InterfaceRef { interface = "et-0/0/7"; subinterface = 0; } } NextHopKey { index = 1; } -
Establezca los campos de
AFTOperationmensaje de la siguiente manera:AFTOperation { Operation { ADD; } entry { next_hop; // NextHopKey object created above } } - Establezca el
ModifyRequestmensaje para que utilice elAFTOperationdefinido anteriormente. -
Llame al
Modify()RPC con el mensaje anteriorModifyRequest. -
Para confirmar que la ruta se programó correctamente, utilice el
show route programmedcomando en la CLI.
Programar próximos saltos con direcciones MAC
Opcionalmente, puede identificar un próximo salto con su dirección MAC en lugar de su dirección IP. Esta función es útil en redes en las que los dispositivos no pueden usar el protocolo de resolución de direcciones dinámico (ARP) o el protocolo de detección de vecinos (NDP) para buscar la dirección MAC del siguiente salto. Para utilizar la dirección MAC, utilice el mac_address campo en lugar del ip_address campo del mensaje AFT.
Después de utilizar el servicio gRIBI para programar una dirección MAC como el siguiente salto en la interfaz, el dispositivo no utiliza ARP ni NDP dinámicos para ningún tráfico que utilice esta interfaz. Si el próximo salto programado de gRIBI se elimina o purga cuando el cliente se desconecta, el dispositivo vuelve a habilitar ARP automáticamente en la interfaz y la ruta continúa funcionando mediante ARP dinámico.
Por ejemplo, para programar un objeto de próximo salto con una dirección MAC a través de una interfaz directamente accesible:
-
Asegúrese de que la interfaz que desea programar con un salto siguiente sea una interfaz numerada.
-
Asegúrese de que la familia IPv6 esté habilitada en la interfaz.
-
Suponiendo que la dirección MAC 00:00:5E:00:53:00 es accesible a través de la interfaz et-0/0/7.0, establezca los siguientes campos en el
Aftsmensaje, donde = means establezca el campo en ese valor:NextHop { mac_address = 00:00:5E:00:53:00; // Next hop MAC address InterfaceRef { interface = "et-0/0/7"; subinterface = 0; } } NextHopKey { index = 1; } -
Establezca los campos de
AFTOperationmensaje de la siguiente manera:AFTOperation { Operation { ADD; } entry { next_hop; // NextHopKey object created above } } - Establezca el
ModifyRequestmensaje para que utilice elAFTOperationdefinido anteriormente. -
Llame al
Modify()RPC con el mensaje anteriorModifyRequest. -
Para confirmar que la ruta se programó correctamente, utilice el
show route programmedcomando en la CLI.
Búsquedas jerárquicas y tunelización de IP en IP
La implementación de Junos de gRIBI admite búsquedas jerárquicas. Para configurar búsquedas jerárquicas, utilice la AFT IPv4 para programar puntos de conexión de túnel IP-IP y rutas de direcciones IP virtuales de grupo de sitios.
Para encapsular el tráfico en el nodo de entrada en un túnel IP a IP, establezca los campos siguientes en el NextHop mensaje:
NextHop {
encapsulate_header;
IpInIp {
dst_ip; // Destination IP address
src_ip; // Source IP address
}
}
Arbitraje para múltiples clientes
El Modify() RPC admite el arbitraje cuando hay varios clientes conectados al servidor gRIBI. El arbitraje determina qué cliente puede realizar qué operaciones.
Utilice el SessionParameters mensaje para establecer el modo de persistencia y el modo de redundancia de cliente para los clientes gRIBI. Todos los clientes deben enviar los mismos valores de todos los atributos del SessionParameters mensaje. SessionParameters debe enviarse solo una vez durante la duración de la sesión.
SessionParameters debe ser el primer mensaje enviado después de una reconexión. Cuando un cliente se vuelve a conectar, se inicia una nueva sesión. Si otros clientes ya están conectados, haga coincidir los valores del SessionParameters mensaje con los valores establecidos por los clientes existentes. Si todos los clientes se vuelven a conectar, puede establecer los valores de los SessionParameters mensajes en valores diferentes a los utilizados en la sesión anterior.
Los dispositivos Junos admiten ambos PRESERVE modos de DELETE persistencia. Si el modo de persistencia se establece en PRESERVE, el servidor conserva las entradas AFT agregadas por el cliente incluso después de que el cliente se desconecte. Si el modo de persistencia se establece en DELETE, el servidor elimina las entradas AFT cuando el cliente se desconecta.
Recomendamos eliminar todas las rutas antes de cambiar los parámetros de sesión. Es posible que observe un comportamiento inesperado si cambia los parámetros de sesión y cambia el modo de redundancia entre ALL_PRIMARY y SINGLE_PRIMARY después de agregar rutas en el otro modo.
Cuando hay varios clientes, debe elegir entre dos modos de redundancia de cliente:
Todos los modos principales
En ALL_PRIMARY modo de redundancia:
-
Cualquier cliente puede modificar rutas.
-
Varios clientes pueden agregar la misma entrada AFT.
-
La API de gRIBI mantiene una asignación de qué clientes han agregado la ruta.
-
La primera operación de adición agrega la entrada a la RIB. Las operaciones de adición posteriores para la misma entrada de un cliente diferente agregan el cliente a la lista de clientes que hacen referencia a la entrada.
-
Las operaciones de eliminación quitan el cliente de la lista de clientes que hacen referencia a la entrada. La entrada sólo se elimina cuando no hay clientes que hagan referencia a la entrada.
Cuando FlushRequest se procesa, las entradas se eliminan sin ninguna comprobación de recuento de referencias.
Utilice el show route extensive comando para ver los detalles de la ruta. Este es un ejemplo de lo que muestra el comando en ALL_PRIMARY el show route extensive modo. La salida se ha acortado para mayor claridad.
user@host> show route 10.0.1.1 extensive b4.inet.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden) 10.0.1.1/32 (1 entry, 1 announced) TSI: [...] Opaque data client: PRPD Address: ABC123 Opaque-data reference count: 2 Opaque data PRPD: client_num_ids=1,5,6 nh group Id=110
Modo principal único
En SINGLE_PRIMARY modo de redundancia:
-
Los clientes de gRIBI pueden tener una función principal (activa) o de respaldo.
-
Solo el cliente principal puede realizar operaciones AFT.
-
El cliente con el ID de elección más alto es el cliente principal. Todos los demás clientes son clientes de respaldo.
-
Cuando un cliente de copia de seguridad se convierte en el cliente principal, el nuevo cliente principal puede modificar las rutas agregadas por el cliente principal anterior.
Establezca el ID de elección para cada dispositivo a fin de determinar qué cliente es el cliente principal. Solo puede establecer el ID de elección en SINGLE_PRIMARY modo de redundancia. El ID de la elección se conserva incluso si un cliente está en el estado inactivo. Si el cliente principal se desconecta, seguirá siendo el cliente principal hasta que establezca que el ID de elección de otro dispositivo sea mayor. Después de establecer el ID de elección, el nuevo cliente principal continúa programando las entradas de gRIBI.
Para actualizar el ID de la elección, envíe el ModifyRequest mensaje con el ID de la elección establecido en su nuevo valor. Cada cliente debe tener un ID de elección único. No establezca ningún otro campo del ModifyRequest mensaje cuando actualice el ID de la elección.
El ID de la elección está presente en los siguientes mensajes:
-
ModifyRequest: establezca el ID de elección para el cliente. El cliente con el ID de elección más alto se convierte en el cliente principal. -
AFTOperation: determina si el servidor debe procesar la operación AFT. -
ModifyResponse: el servidor responde con el ID de elección más alto actual.
Use el show programmable-rpd clients detail comando para ver el ID de grupo y si el cliente tiene el rol principal o de respaldo.
Utilice el show route extensive comando para ver los detalles de la ruta. Este es un ejemplo de lo que muestra el comando en SINGLE_PRIMARY el show route extensive modo. La salida se ha acortado para mayor claridad.
user@host> show route 10.0.1.1 extensive b4.inet.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden) 10.0.1.1/32 (1 entry, 1 announced) TSI: [...] Opaque data client: PRPD Address: ABC123 Opaque-data reference count: 2 Opaque data PRPD: group_num_id=1 nh group Id=110
Programar una ruta de reserva en una instancia de VRF
Cuando un siguiente salto se vuelve inalcanzable a través de una ruta estática, la red puede redirigir el tráfico a través de una ruta alternativa para evitar interrupciones en el tráfico. Esta ruta alternativa se denomina ruta de reserva. Si el tráfico no se encapsuló en un túnel, configure la ruta estática de reserva como lo haría normalmente con la CLI. Sin embargo, si el tráfico se encapsuló en un túnel, puede usar gRIBI para programar un túnel de reserva que incluya la desencapsulación y la encapsulación.
Puede programar la ruta de reserva en el VRF para que el sistema desencapsule el tráfico del túnel antiguo y lo vuelva a encapsular en un nuevo túnel antes de volver a enrutar el tráfico al siguiente salto. Esta característica admite el transporte IPv4 para túneles IP-IP dinámicos con una carga IPv4 o IPv6.
Para programar un túnel IP en IP de reserva con capacidad de desencapsulación y reencapsulación, establezca los campos siguientes en el NextHop mensaje:
NextHop {
decapsulate_header;
encapsulate_header;
network_instance; // VRF instance
IpInIp {
dst_ip; // Destination IP address
src_ip; // Source IP address
}
}
Puede utilizar una ruta predeterminada en una instancia de enrutamiento y reenvío virtual (VRF) de ingeniería de tráfico como ruta de respaldo. Agregue primero la ruta predeterminada al VRF para que las rutas futuras que configure en el VRF la usen como ruta de reserva. Para utilizar esta ruta predeterminada, establezca el campo en y establézcalo decapsulate_header network_instance en DEFAULT.OPENCONFIGAFTTYPESENCAPSULATION HEADERTYPE_IPV4 Esta ruta predeterminada tiene un salto siguiente con desencapsulación y busca rutas en el VRF predeterminado.
También puede seleccionar un grupo de salto siguiente de respaldo para facilitar la configuración de una ruta de reserva. Para ello, configure el backup_next_hop_group campo en el NextHopGroup mensaje.
Selección de instancias VRF
gRIBI no admite la programación de rutas en una instancia VRF no predeterminada. Para usar una instancia de VRF no predeterminada, configure primero un filtro de firewall mediante la CLI. El filtro del firewall debe coincidir con el protocolo DSCP e IP requerido. Aplique el filtro a la interfaz en la que se espera el tráfico.
Por ejemplo, si el tráfico está en la interfaz et-0/0/0:
[edit] user@host# set firewall filter b4-filter term 1 from dscp cs7 user@host# set firewall filter b4-filter term 1 then count b4-count user@host# set firewall filter b4-filter term 1 then routing-instance b4 user@host# set firewall filter b4-filter term 2 then accept user@host# set interfaces et-0/0/0 unit 0 family inet filter input b4-filter
Reenvío basado en políticas
Utilice el mensaje para programar el PolicyForwardingEntry reenvío basado en políticas en el servidor gRIBI. El reenvío basado en políticas garantiza que el tráfico movido al túnel de respaldo permanezca en el túnel independientemente de lo que diga la tabla de enrutamiento.
Para establecer las condiciones de coincidencia y programar una política para reenviar el tráfico:
-
Establezca los campos siguientes en el
Aftsmensaje:PolicyForwardingEntry { ip_prefix; // To match the destination IP address src_ip_prefix; // To match the source IP address next_hop_group; } -
Establezca los campos siguientes en el
AFTOperationmensaje:AFTOperation { entry { policy_forwarding_entry; // PolicyForwardingEntryKey object created above } } - Establezca el
ModifyRequestmensaje para que utilice elAFTOperationdefinido anteriormente. -
Llame al
Modify()RPC con el mensaje anteriorModifyRequest.
Obtener rutas
Cuando el cliente pierde la conexión con el servidor gRIBI, es posible que las rutas programadas durante el tiempo de inactividad no se agreguen al servidor. Después de que la conexión al servidor vuelva a funcionar, utilice la Get() RPC para comprobar que todas las rutas se agregaron correctamente a la tabla de enrutamiento del servidor. El Get() RPC también es útil para comprobar periódicamente que las rutas instaladas en un servidor son correctas y conciliar cualquier diferencia.
La Get() RPC recupera el contenido de las AFT instaladas en el servidor. Cuando el cliente envía una Get() solicitud RPC, el servidor responde con el conjunto de entradas instaladas actualmente mediante la GetResponse secuencia. El servidor solo responde con las entradas que se han confirmado. Después de que el servidor envía todas las entradas al cliente, el servidor cierra la RPC.
Si se configura un cambio normal del motor de enrutamiento (GRES), el servidor gRIBI y el proceso rpd también recuperan rutas después de que se reinicie el servidor gRIBI. Después de que el cliente se vuelve a conectar al servidor, el cliente envía automáticamente una solicitud RPC gRIBI Get() al servidor. Si GRES está configurado, el cliente concilia las rutas en el servidor. Si el cliente envía otra Get() solicitud RPC, la GetResponse secuencia incluye las rutas conciliadas activas en el servidor. Si GRES está configurado y el enrutamiento sin paradas no está configurado, la API de gRIBI también recupera rutas después de un cambio de motor de enrutamiento.
Solo las rutas activas se recuperan cuando se reinicia el proceso rpd.
Rutas de descarga
La Flush() RPC elimina todas las rutas programadas gRIBI del servidor que coincidan con lo descrito en el FlushRequest mensaje. Enviar un FlushRequest mensaje es una forma rápida y fácil de eliminar las rutas programadas de gRIBI del servidor.
Cuando haya rutas presentes en una instancia de VRF de ingeniería de tráfico, vacíe las rutas de la instancia de VRF mediante la Flush() RPC antes de eliminar la instancia de VRF.
Tabla de historial de cambios
La compatibilidad de la función depende de la plataforma y la versión que utilice. Utilice el Explorador de características para determinar si una característica es compatible con su plataforma.