問題の説明
特定のポートで Elastic Compute Service (ECS) インスタンスに接続しようとすると、接続に失敗します。クライアントから Connection timed out または Connection refused エラーが報告されます。
原因
ネットワークアクセス制御ポリシーによるブロック:リクエストは、アプリケーションに到達する前に、セキュリティグループまたはインスタンスの内部ファイアウォールポリシーによってサイレントにドロップされます。クライアントは応答を受信しないため、
Connection timed outエラーが発生します。ターゲットポートがリッスンしていない:リクエストはインスタンスのオペレーティングシステムに到達しますが、ターゲットポートでリッスンしているアプリケーションがありません。オペレーティングシステムがリクエストを拒否するため、
Connection refusedエラーが発生します。
方法 1:セルフサービス・トラブルシューティングツールの使用
Alibaba Cloud のセルフサービス・トラブルシューティングツールを使用すると、セキュリティグループの設定、インスタンスの内部ファイアウォール、および一般的なアプリケーションポートのリスニング状態を迅速に確認できます。このツールは、明確な診断レポートを提供します。
をクリックして自己診断ページに移動し、対象のリージョン に切り替えます。
セルフサービス・トラブルシューティングツールで問題を特定できない場合は、次の手順に進んでください。
方法 2:手動でのトラブルシューティング
シナリオ 1:接続タイムアウト
セキュリティグループルールを確認します。インバウンドルールが宛先ポートへのアクセスを許可しており、より優先度の高い拒否ルールによって上書きされていないことを確認してください。
ECS コンソール - インスタンス ページに移動し、宛先インスタンスの ID をクリックして詳細ページを開きます。
インスタンス詳細ページで、[セキュリティグループ] タブに切り替え、対象のセキュリティグループの ID をクリックして詳細ページを開きます。
[インバウンドルール] タブで、ルールの一覧を確認します。
拒否ルールの確認:優先度の高い拒否ルールがアクセスをブロックしていないことを確認します。
許可ルールの確認:ソース IP アドレスと宛先ポートに対する許可ルールが存在することを確認します。
インスタンスの内部ファイアウォールを確認します。
Alibaba Cloud Linux
ECS インスタンスにログインします。
ECS コンソール - インスタンス に移動します。上部のナビゲーションバーで、対象のリージョンとリソースグループを選択します。
対象インスタンスの詳細ページに移動します。[接続] をクリックし、[ワークベンチ] を選択します。ページのプロンプトに従ってターミナルにログインします。
次のコマンドを実行して、ファイアウォールで開いているポートを表示します。
firewall-cmd --list-all宛先ポートがリストにない場合は、ファイアウォールルールを追加します。特定の TCP ポートを永続的に開き、外部からのアクセスを許可するには、
<PORT>を実際のポート番号に置き換えます。firewall-cmd --zone=public --add-port=<PORT>/tcp --permanent次のコマンドを実行してファイアウォールを再起動し、新しいルールを有効にします。
firewall-cmd --reload
Ubuntu
ECS インスタンスにログインします。
ECS コンソール - インスタンス に移動します。上部のナビゲーションバーで、対象のリージョンとリソースグループを選択します。
対象インスタンスの詳細ページに移動します。[接続] をクリックし、[ワークベンチ] を選択します。ページのプロンプトに従ってターミナルにログインします。
次のコマンドを実行して、UFW のステータスと設定されているルールを確認します。
sudo ufw status宛先ポートがリストにない場合は、次のコマンドを実行してファイアウォールルールを追加します。
<PORT>を宛先ポート番号に置き換えます。sudo ufw allow <PORT>/tcp次のコマンドを実行してファイアウォールを再起動し、新しいルールを有効にします。
sudo ufw reload
Windows
ECS インスタンスにログインします。
ECS コンソール - インスタンス に移動します。上部のナビゲーションバーで、対象のリージョンとリソースグループを選択します。
対象インスタンスの詳細ページに移動し、[接続] をクリックし、[ワークベンチ] を選択します。接続方法を [ターミナル] に設定し、ユーザー名とパスワードを入力して、グラフィカルターミナルページにログインします。
セキュリティが強化された Windows Defender ファイアウォールを開きます。
タスクバーの検索ボックスに [サーバーマネージャー] と入力して開きます。
サーバーマネージャーの右上隅で、 を選択します。
必要な受信の規則を確認して有効にします。
ファイアウォールの状態を確認します。ファイアウォールが無効になっている場合は、これ以上の操作は必要ありません。
ファイアウォールが有効になっている場合は、左側のペインで [受信の規則] をクリックします。
ルールの一覧から [Windows リモート管理 - 互換モード (HTTP-In)] を見つけます。
このルールが有効になっていない場合は、ルールを右クリックして [ルールの有効化] を選択します。
ポートにアクセスできることを確認します。このコマンドは、ECS インスタンス自体からではなく、ローカルクライアントから実行してください。
telnet <Public IP address> <Port number>出力に
Connected to ...が含まれている場合、ネットワークとポートはアクセス可能です。
シナリオ 2:接続拒否
Linux
ECS インスタンスにログインします。
ECS コンソール - インスタンス に移動します。上部のナビゲーションバーで、対象のリージョンとリソースグループを選択します。
対象インスタンスの詳細ページに移動します。[接続] をクリックし、[ワークベンチ] を選択します。ページのプロンプトに従ってターミナルにログインします。
次のコマンドを実行して、ポートのリスニング状態を確認します。
<PORT>を実際のポート番号に置き換えます。netstat -an | grep <PORT>結果を分析します。
リスニング中:State 列の値が
LISTENの場合、ポートは正常にリッスンしています。重要リスニングアドレスが 127.0.0.1 の場合、サービスはローカル接続のみを受け入れます。Nginx の `nginx.conf` や Secure Shell プロトコル (SSH) サービスの `sshd_config` などのサービス設定ファイルを確認し、リスニングアドレスを `0.0.0.0` またはインスタンスのパブリック IP アドレスに変更して、外部接続を許可してください。
リスニングしていない:出力が返されない場合、または出力に
LISTEN状態が含まれていない場合、サービスは開始されていません。サービスを開始する必要があります。
Windows
ECS インスタンスにログインします。
ECS コンソール - インスタンス に移動します。上部のナビゲーションバーで、対象のリージョンとリソースグループを選択します。
対象インスタンスの詳細ページに移動し、[接続] をクリックし、[ワークベンチ] を選択します。接続方法を [ターミナル] に設定し、ユーザー名とパスワードを入力して、グラフィカルターミナルページにログインします。
PowerShell を使用してポートを確認します。
タスクバーの検索ボックスに [PowerShell] と入力して開きます。
次のコマンドを実行して、ポートのリスニング状態を確認します。
<PORT>を実際のポート番号に置き換えます。netstat -ano | findstr "<PORT>"結果を分析します。
リスニング中:出力に
LISTEN状態が含まれている場合、ポートは正常にリッスンしています。リスニングアドレスが127.0.0.1の場合、サービスはローカル接続のみを受け入れます。サービスの設定ファイルを変更して、リスニングアドレスを127.0.0.1から0.0.0.0またはインスタンスのパブリック IP アドレスに変更し、外部接続を許可する必要があります。リスニングしていない:出力が返されない場合、または出力に
LISTEN状態が含まれていない場合、サービスは開始されていません。サービスを開始する必要があります。