# DedicatedおよびBYOC接続ガイド

本ページでは、DedicatedおよびBYOCデプロイメントへの接続に使用されるプロトコルとポートについて紹介し、接続問題のトラブルシューティングガイドを提供します。

## プロトコルとポートに関するQ&A

以下の表は、DedicatedおよびBYOCデプロイメントへの接続に使用されるプロトコルとポートを示しています。

| **プラン**                | **TCPポート (mqtt)** | **TLS/SSL対応MQTTポート (mqtts)** | **WebSocketポート (ws)** | **TLS/SSL対応WebSocketポート (wss)** |
| ------------------------ | -------------------- | ---------------------------------- | ------------------------ | ------------------------------------ |
| Dedicated                | 1883                 | 8883                               | 8083                     | 8084                                 |
| BYOC                     | 1883                 | 8883                               | 8083                     | 8084                                 |

### MQTT over TCPおよびWebSocketとは？

標準のMQTTは、非同期データ通信のための軽量なパブリッシュ・サブスクライブメッセージングプロトコルです。TCP/IPスタック上に構築されており、不安定なネットワーク環境でもスケール可能です。そのため、デバイスのハードウェアストレージ容量やネットワーク帯域が制限されているシナリオに適しています。

WebSocketプロトコルはTCPに基づく新しいネットワークプロトコルで、ブラウザとサーバー間で単一のハンドシェイクにより持続的な接続を確立します。ブラウザとサーバー間で繰り返しハンドシェイクを行う必要がないため、双方向のデータ交換が非常に簡単になります。具体的には、MQTTにおけるWebSocketとは、まずWebSocketで接続を確立し、その後WebSocketチャネル上でMQTTプロトコルを用いて通信する方式（MQTT over WebSocket）を指し、主にブラウザ環境での接続に利用されます。

標準のMQTT over TCPおよびWebSocketはいずれも暗号化されていないため、安全性のリスクがあります。

MQTT over TCPのポートは1883で、`mqtt`に対応します。WebSocketのポートは8083で、`ws`に対応します。

### MQTT over TCPおよびWebSocketポートの使い方は？

SDKデモを使用した接続テストやサンプルコードは、[Client Connection Guidelines](../connect_to_deployments/overview.md)でご覧いただけます。

### MQTT over TLS/SSLおよびWebSocket over TLS/SSLとは？

MQTT over TLS/SSLおよびWebSocket over TLS/SSLは、MQTTまたはWebSocketの通信にTLS/SSL暗号化を追加したものです。これにより、通信が盗聴や改ざんから保護されます。

MQTT over TLS/SSLのポートは8883で、`mqtts`に対応します。WebSocket over TLS/SSLのポートは8084で、`wss`に対応します。

### DedicatedプランでのMQTT over TLS/SSLおよびWebSocket over TLS/SSLポートの使い方は？

Dedicatedプランはカスタマイズ可能な片方向／双方向TLS/SSLをサポートしています。[Configure TLS/SSL](../deployments/tls_ssl.md)で有効化してください。その後、デプロイメント概要のポート8883（mqtts）および8084（wss）を通じて直接接続できます。

### BYOCデプロイメントでのMQTT over TLS/SSLおよびWebSocket over TLS/SSLポートの使い方は？

BYOCデプロイメントは、作成時に設定するカスタマイズ可能な片方向TLS/SSL証明書をサポートしています。デプロイメント概要のポート8883（mqtts）および8084（wss）を通じて直接接続可能です。

### TLS/SSL接続のクライアントコードの書き方は？

TLS関連のサンプルコードは以下のリポジトリで確認できます。

[Python](https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-Python3)<br>
[Java](https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-Java)<br>
[GO](https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-Go)<br>
[Node.js](https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-Node.js)<br>
[ESP 32](https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-ESP32)<br>
[ESP 8266](https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-ESP8266)<br>
[Android](https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-Android)<br>
[swift](https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-swift)<br>

### EMQX DedicatedデプロイメントはIPアドレスでの接続をサポートしていますか？

EMQX Dedicatedデプロイメントでは、**IPアドレスでの接続は推奨していません**。フェイルオーバー、アップグレード、クラスターのスケールなどのシナリオでIPアドレスが変更される可能性があるためです。IPアドレスで接続すると、これらの変更によりサービス障害が発生する恐れがあります。

すべてのクライアント接続には、EMQXプラットフォームが提供する**ドメイン名の使用を強く推奨**します。ドメイン名は常に正しいかつ現在稼働中のノードに解決されるため、高い可用性と接続の安定性を保証します。

なお、**IPアドレス直接接続による問題はSLAの対象外**となります。サービス障害を回避するために、ドメイン名ベースの接続をシステム構成に組み込むことを推奨します。

## 接続トラブルシューティングガイド

デプロイメントへの接続に問題が発生した場合は、以下のプラン別手順に従って自己診断およびトラブルシューティングを行ってください。

### Dedicatedプラン

Dedicatedデプロイメントへの接続に問題がある場合は、以下の手順で自己診断およびトラブルシューティングを行ってください。

1. **接続アドレスの確認**

   EMQX Dedicatedが提供する**正しいドメイン名の接続アドレス**を使用しているか確認してください。EMQX Dedicatedはドメイン名での接続をサポートしています。独自ドメインを接続アドレスとして利用したい場合は、デプロイメントが提供するデフォルト接続アドレスに向けたCNAMEレコードを設定してください。

2. **接続ポートの確認**

   Dedicatedプランはデフォルトで1883（MQTT）および8083（WebSocket）ポートを開放しています。TLS/SSL設定により、8883（MQTTS）および8084（WSS）ポートを開放可能です。各ポートの役割は以下の通りです。

   - **MQTTおよびWebSocketポート**：通信時に暗号化されていない平文送信をサポートし、データ暗号化が不要な内部ネットワークや開発環境に適しています。
   - **MQTTSおよびWSSポート**：TLS/SSL暗号化による安全な通信をサポートし、本番環境や機密データ送信に適しています。
   - **8883（MQTTS）および8084（WSS）ポート**：EMQX Dedicated V5ではデフォルトで有効化されており、本番環境での安全な通信に最適です。EMQX Dedicated V5はシステム割り当ての接続アドレス（IPまたはドメイン名）に対応した組み込みTLS証明書を標準搭載しているため、追加設定なしで利用可能です。

3. **ネットワーク接続のテスト**

   `telnet`コマンドを使い、サーバーとDedicatedプラン間のネットワーク接続をテストしてください。

   例：DedicatedプランのMQTTポートへの接続テストの場合  
   `telnet <Dedicatedデプロイメントのドメイン名接続アドレス> 1883`  
   TLS/SSLを有効にしている場合は、MQTTSポートへの接続テストとして  
   `telnet <Dedicatedデプロイメントのドメイン名接続アドレス> 8883`  
   を実行してください。

   `<Dedicatedデプロイメントのドメイン名接続アドレス>`は実際のデプロイメントアドレスに置き換えてください。

4. **認証情報の確認**

   EMQX Dedicatedプランは匿名認証をサポートしていません。MQTTクライアントのユーザー名とパスワードがEMQXプラットフォームコンソールで正しく設定されているか、クライアント接続時に正しく指定されているかを確認してください。

5. **MQTTXクライアントでのテスト**

   MQTTXは無料で使いやすいクロスプラットフォームのMQTT 5.0クライアントテストツールです。接続できない原因がクライアントコードにあるかどうかを検証するために利用を推奨します。詳細は[MQTTX Documentation](../connect_to_deployments/mqttx.md)をご参照ください。

### サポートチケットでの問い合わせ

上記のすべての手順を確認しても問題が解決しない場合は、サポートチケットシステムからお問い合わせください。迅速な対応のため、以下の詳細情報を提供してください。

- デプロイメント名およびID（コンソールの「デプロイメント管理」ページで確認可能）
- デプロイメントタイプ（例：Serverlessプラン、Dedicatedなど）
- 使用しているクライアントの種類およびバージョン
- クライアント接続のサンプルコード（使用言語例：Python、JavaScriptなど。機密情報はマスクしてください）
- クライアントのエラーログや具体的なエラーメッセージ（可能な限り詳細なエラー説明やスクリーンショットを提供してください）
