Citrix ADC

Soporte MQTT para el respondedor

La función Respondedor admite el protocolo MQTT. Puede configurar directivas de respuesta para realizar una acción basada en los parámetros del mensaje MQTT entrante.

La acción responde con cualquiera de las siguientes opciones a una nueva conexión:

  • DROP
  • RESTABLECER
  • NOOP
  • Una acción de respuesta para iniciar una nueva respuesta MQTT CONNACK.

Configuración de directivas de respuesta para MQTT

Después de habilitar la función respondedor, debe configurar una o más acciones para gestionar las solicitudes MQTT. A continuación, configure una directiva de respuesta. Puede enlazar las directivas de respuesta globalmente, o a un servidor virtual de equilibrio de carga específico o servidor virtual de conmutación de contenido.

Los siguientes puntos de enlace están disponibles para enlazar las directivas de respuesta globalmente:

  • MQTT_REQ_DEFAULT
  • MQTT_REQ_OVERRIDE
  • MQTT_JUMBO_REQ_DEFAULT
  • MQTT_JUMBO_REQ_OVERRIDE

Los siguientes puntos de enlace están disponibles para enlazar las directivas de respuesta a un servidor virtual de conmutación de contenido o equilibrio de carga:

  • PETICIÓN
  • MQTT_JUMBO_REQ (este punto de enlace se utiliza solo para paquetes Jumbo)

Para configurar el respondedor para responder a una solicitud MQTT mediante CLI

En el símbolo del sistema, escriba los siguientes comandos:

Configurar una acción de respuesta.

add responder action <actName> <actType>
<!--NeedCopy-->
  • Para, actnamesustituya un nombre para la nueva acción. El nombre puede tener de 1 a 127 caracteres de longitud y puede contener letras, números, guiones (-) y guión bajo (_).
  • Por actType, sustituya un tipo de acción respondedor, respondwith.

Ejemplo:

add responder action mqtt_connack_unsup_ver respondwith MQTT.NEW_CONNACK(132)
<!--NeedCopy-->

Configurar una directiva de respuesta. El dispositivo Citrix ADC responde a las solicitudes MQTT seleccionadas por esta directiva de respuesta.

add responder policy <polName> <rule> <actname>
<!--NeedCopy-->
  • Para polname, sustituya un nombre para la nueva directiva.
  • Por actname, sustituya el nombre de la acción que ha creado.

Ejemplo:

add responder policy reject_lower_version "MQTT.HEADER.COMMAND.EQ(CONNECT) && MQTT.VERSION.LT(3)" mqtt_connack_unsup_ver
<!--NeedCopy-->

Enlazar la directiva de respuesta a un servidor virtual de equilibrio de carga específico o a un servidor virtual de conmutación de contenido específico. La directiva solo se aplica a las solicitudes MQTT cuya dirección IP de destino es el VIP de ese servidor virtual.

bind lb vserver <name> -policyName <policy_name> -priority <priority>

bind cs vserver <name> -policyName <policy_name> -priority <priority>
<!--NeedCopy-->
  • Por policy_name, sustituya el nombre de la directiva que ha creado.
  • Parapriority, especifique la prioridad de la directiva.

Ejemplo:

bind lb vserver lb1 -policyName reject_lower_version -priority 50

bind cs vserver mqtt_frontend_cs -policyName reject_lower_version -priority 5
<!--NeedCopy-->

Caso de uso 1: Filtrar clientes en función del nombre de usuario o ID de cliente

El administrador puede configurar una directiva de respuesta de MQTT para rechazar la conexión basándose en el nombre de usuario o Id. de cliente en el mensaje MQTT CONNECT.

Ejemplo de configuración para filtrar clientes en función del ID de cliente

add policy patset filter_clients
bind policy patset filter_clients client1

add responder action mqtt_connack_invalid_client respondwith MQTT.NEW_CONNACK(2)

add responder policy reject_clients "MQTT.HEADER.COMMAND.EQ(CONNECT) && mqtt.connect.clientid.equals_any("filter_clients")" mqtt_connack_invalid_client

bind cs vserver mqtt_frontend_cs -policyName reject_clients -priority 5
<!--NeedCopy-->

Caso de uso 2: Limite la longitud máxima de mensajes MQTT para manejar paquetes jumbo

El administrador puede configurar una directiva de respuesta de MQTT para eliminar la conexión del cliente si la longitud del mensaje excede un determinado umbral, o tomar las medidas necesarias en función del requisito.

Para manejar paquetes jumbo, las directivas de respuesta con cualquiera de los siguientes patrones de regla están enlazadas al punto de enlace jumbo:

  • MQTT.MESSAGE_LENGTH
  • MQTT.COMANDO
  • MQTT.FROM_CLIENT
  • MQTT.FROM_SERVER

Las directivas vinculadas a puntos de enlace jumbo se evalúan solo para paquetes jumbo.

Configuración de ejemplo para limitar la longitud máxima de mensajes MQTT

set lb parameter -dropmqttjumbomessage no

add responder policy drop_large_message MQTT.MESSAGE_LENGTH.GT(100000) reset

bind cs vserver mqtt_frontend_cs -policyName drop_large_message -priority 10
<!--NeedCopy-->

En este ejemplo, el dropmqttjumbomessage parámetro se establece en NO. Por lo tanto, el dispositivo ADC procesa los mensajes con una longitud superior a 64.000 bytes y menos de 1.00,000 bytes. Los mensajes con una longitud superior a 1.00,000 bytes se restablecen.