MQTT重写支持
重写特性支持MQTT协议。您可以配置重写策略,以根据MQTT客户机请求和服务器响应中的参数执行操作。
重写MQTT的操作
MQTT的重写操作指示在将MQTT请求或响应发送到服务器或客户机之前对其所做的更改。
表达式:
添加重写动作
重写MQTT的类型
根据所使用的重写表达式规则的类型,支持以下MQTT重写类型:
replace_mqtt
insert_before_mqtt
insert_after_mqtt
delete_mqtt
insert_mqtt
重写MQTT的目标
在以下示例中,MQTT重写特性使用策略表达式来指示要修改的请求部分(目标)和要执行的修改(字符串表达式):
方法重写连接数据包中的客户机ID
replace_mqtt
动作类型。添加重写操作rwact1 replace_mqtt MQTT.CONNECT.CLIENTID "\"xyz\""
方法重写发布请求中的主题
replace_mqtt
动作类型。添加重写操作rwact1 replace_mqtt MQTT.PUBLISH.TOPIC "\"测试/test123\""
重写以使用insert_mqtt操作类型插入属性。
添加重写动作rwact1 insert_mqtt。NEW_PROPERTY(“prop1”、“测试”)
使用delete_mqtt操作类型删除主题。
添加重写操作rwact2删除操作
重写MQTT的操作
以下是MQTT的预定义重写操作:
MQTT.NEW_KEEPALIVE(间隔)
MQTT.NEW_PACKET_IDENTIFIER (packetID)
MQTT.NEW_REASON_CODE (retCode)
MQTT。NEW_PUBLISH (topic_name有效负载)
MQTT.NEW_CONNECT_USERNAME(用户名)
MQTT。NEW_CONNECT_WILL_MESSAGE(will_topic, will_payload, will_Qos, will_retain)
MQTT。NEW_TOPIC(主题、qos)
MQTT.NEW_TOPIC(主题)
MQTT。NEW_PROPERTY(关键字,值)
预定义的重写操作示例:
添加重写动作rwact1 . connect . keepalive
用户自定义的重写操作示例:
添加重写操作rwact1 replace_mqtt MQTT.CONNECT.USERNAME "\"user1\"" "
重写MQTT的策略
MQTT的重写策略由规则和操作组成。该规则决定了应用重写的MQTT通信,而动作决定了Citrix ADC设备要采取的动作。
表达式:
添加重写策略
例子:
添加重写操作insert_mqtt_username
添加重写策略rewrite_mqtt_username "MQTT.COMMAND.EQ(CONNECT) && MQTT.CONNECT.USERNAME.LENGTH.EQUALS(0) insert_mqtt_username
MQTT的绑定点
可以全局绑定重写策略,也可以绑定到特定的负载平衡虚拟服务器或内容切换虚拟服务器。以下是全局绑定点:
MQTT_REQ_DEFAULT
MQTT_REQ_OVERRIDE
MQTT_RES_DEFAULT
MQTT_RES_OVERRIDE
表达式:
bind rewrite global
[-type MQTT_REQ_OVERRIDE | MQTT_REQ_DEFAULT | MQTT_RES_OVERRIDE | MQTT_RES_DEFAULT] bind lb|cs vserver
-policyName -priority -type REQUEST|RESPONSE .使用实例
例子:
绑定重写全局pol1 10 -type MQTT_REQ_DEFAULT
add/bind lb vserver v1 -policyName pol1 -type reqUEST -priority
为MQTT配置重写策略
要配置重写策略,请按照以下步骤在命令提示符处输入命令:
在Citrix ADC设备上启用重写功能。
启用ns特性重写
添加一个重写操作。
添加重写动作rwact1 replace_mqtt
添加重写策略。
添加重写策略pol1 MQTT.COMMAND.EQ(CONNECT) rwact1
配置MQTT负载平衡虚拟服务器。
add lb vserver v1 MQTT 1.1.1.1 1883
全局绑定重写策略,或绑定到特定的负载平衡虚拟服务器。
绑定重写全局pol1 10 -type MQTT_REQ_DEFAULT
add/bind lb vserver v1 -policyName pol1 -type REQUEST -priority
用例1:用证书名称替换MQTT CONNECT消息中的用户名
管理员可以配置MQTT重写策略,将用户名替换为客户端证书名。
让我们考虑一个例子。客户端请求具有MQTT连接
消息,其中包含用户名“admin”。此用户名必须替换为从客户端证书(证书名)中提取的序列号(16位)。
流程如下图所示:
传输控制协议(TCP)请求被发送到负载均衡器。
在负载均衡器中,用户名替换为证书名。
请求被转发到MQTT代理。
这个新的用户名用于通过webhook有效负载进行授权。
示例配置:
添加重写操作mqtt_rw_unameact1 replace_mqtt MQTT.CONNECT.USERNAME CLIENT.SSL.CLIENT_CERT.SERIALNUMBER
“MQTT.COMMAND.EQ(CONNECT)”mqtt_rw_unameact1
bind cs vserver mqtt_frontend_cs -policyName mqtt_rw_uname_pol1 -priority 10 -gotoPriorityExpression END -type REQUEST
用例2:提供对新TOPIC的订阅
管理员可以提供对新TOPIC的订阅。让我们考虑一个例子。客户端请求订阅了TOPIC 1。管理员可以配置重写策略以提供对新的TOPIC 2的订阅。订阅可以在之前或之后插入。
示例配置:
添加重写动作act2 insert_before_mqtt . topic_filters . topicNEW_TOPIC(话题二,2)
添加重写策略policy2“MQTT.COMMAND.EQ(SUBSCRIBE) && MQTT.SUBSCRIBE”。TOPIC_FILTERS.TOPIC.CONTAINS act2(\“测试\”)”