リライトに対する MQTT サポート
MQTT の書き換えアクション
add rewrite action <name> <rewrite_type> <target> <rewrite_action>
MQTT の書き換えタイプ
-
replace_mqtt -
insert_before_mqtt -
insert_after_mqtt -
delete_mqtt -
insert_mqtt
MQTT の書き換えターゲット
-
replace_mqttアクションタイプを使用して、接続パケット内のクライアント ID を書き換えます。add rewrite action rwact1 replace_mqtt MQTT.CONNECT.CLIENTID "\"xyz\"" -
replace_mqttアクションタイプを使用して、パブリッシュリクエスト内のトピックを書き換えます。add rewrite action rwact1 replace_mqtt MQTT.PUBLISH.TOPIC "\"testing/test123\"" -
insert_mqtt アクションタイプを使用してプロパティを挿入するように書き直します。
add rewrite action rwact1 insert_mqtt MQTT.NEW_PROPERTY("prop1", "test") -
delete_mqtt アクションタイプを使用してトピックを削除します。
add rewrite action rwact2 delete_mqtt MQTT.SUBSCRIBE.TOPIC_FILTERS.TOPIC(1)
MQTT の書き換えアクション
-
MQTT.NEW_KEEPALIVE(interval) -
MQTT.NEW_PACKET_IDENTIFIER(packetID) -
MQTT.NEW_REASON_CODE(retCode) -
MQTT.NEW_PUBLISH(topic_name, payload) -
MQTT.NEW_CONNECT_USERNAME(username) -
MQTT.NEW_CONNECT_WILL_MESSAGE(will_topic, will_payload, will_Qos, will_retain) -
MQTT.NEW_TOPIC(topic, qos) -
MQTT.NEW_TOPIC(topic) -
MQTT.NEW_PROPERTY(key, value)
add rewrite action rwact1 replace_mqtt MQTT.CONNECT.KEEPALIVE MQTT.NEW_KEEPALIVE(90)
add rewrite action rwact1 replace_mqtt MQTT.CONNECT.USERNAME "\"user1\""
MQTT の書き換えポリシー
add rewrite policy <name> <rewrite_rule> <rewrite_action>
add rewrite action insert_mqtt_username insert_mqtt MQTT.NEW_CONNECT_USERNAME("user1")
add rewrite policy 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 <policyName> <priority> [-type MQTT_REQ_OVERRIDE | MQTT_REQ_DEFAULT | MQTT_RES_OVERRIDE | MQTT_RES_DEFAULT] -
bind lb|cs vserver <virtualServerName> -policyName <policyName> -priority <positiveInteger> -type REQUEST|RESPONSE
-
bind rewrite global pol1 10 -type MQTT_REQ_DEFAULT -
add/bind lb vserver v1 -policyName pol1 -type reqUEST -priority 10
MQTT の書き換えポリシーを設定する
-
NetScaler ADCアプライアンスで書き換え機能を有効にします。
enable ns feature REWRITE -
書き換えアクションを追加します。
add rewrite action rwact1 replace_mqtt MQTT.CONNECT.KEEPALIVE MQTT.NEW_KEEPALIVE(10) -
書き換えポリシーを追加します。
add rewrite policy pol1 MQTT.COMMAND.EQ(CONNECT) rwact1 -
MQTT 負荷分散仮想サーバーを構成します。
add lb vserver v1 MQTT 1.1.1.1 1883 -
書き換えポリシーをグローバルにバインドするか、特定の負荷分散仮想サーバーにバインドします。
bind rewrite global pol1 10 -type MQTT_REQ_DEFAULTadd/bind lb vserver v1 -policyName pol1 -type REQUEST -priority 10
ユースケース 1: MQTT CONNECT メッセージ内のユーザー名を証明書名に置き換えます
MQTT CONNECTメッセージが含まれています。このユーザー名は、クライアント証明書 (証明書名) から抽出されたシリアル番号 (16 桁) に置き換える必要があります。
-
トランスポート制御プロトコル (TCP) 要求がロードバランサーに送信されます。
-
ロードバランサーでは、ユーザー名は証明書名に置き換えられます。
-
リクエストは MQTT ブローカーに転送されます。
-
この新しいユーザー名は、Webhook ペイロードによる認証に使用されます。
add rewrite action mqtt_rw_unameact1 replace_mqtt MQTT.CONNECT.USERNAME CLIENT.SSL.CLIENT_CERT.SERIALNUMBER
add rewrite policy mqtt_rw_uname_pol1 "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 へのサブスクリプションを提供する
-
add rewrite action act2 insert_before_mqtt MQTT.TOPIC_FILTERS.TOPIC(1) MQTT.NEW_TOPIC(topic2, 2) -
add rewrite policy policy2 “MQTT.COMMAND.EQ(SUBSCRIBE) && MQTT.SUBSCRIBE. TOPIC_FILTERS.TOPIC.CONTAINS(\"test\")" act2