なぜか現場だとネットワーク通信がうまくいかないなぁ。という場合の原因は様々ですが、
原因の一つにファイアウォールによって特定ポートの通信が許可されていない というものがあります。
以下は、Linux 環境で curl
コマンドを利用して、ファイアウォール等によって対象のポートの通信が遮断されていないかの確認するための方法です。
nc
や telnet
が使えればそちらで良いのでしょうが、それらコマンドが大人の事情でインストールされていない場合などの手段です。
実行するコマンド
実行するコマンドは以下のとおりです
curl -v telnet://{ホスト名 or IPアドレス}:{ポート番号}
タイムアウト値を明示的に指定する場合は以下になります
curl -m {タイムアウト(秒)} -v telnet://{ホスト名 or IPアドレス}:{ポート番号}
実行例
54.248.XXX.XX の ポート 443 との通信が可能か確認している例です。
■通信が成功した場合
curl -m 10 -v telnet://54.248.XXX.XX:443 * About to connect() to 54.248.XXX.XXX port 443 (#0) * Trying 54.248.XXX.XXX... * Connected to 54.248.XXX.XXX (54.248.XX.XXX) port 443 (#0)
■通信が失敗した場合(タイムアウトした)
curl -m 10 -v telnet://54.248.XXX.XXX:443 * About to connect() to 54.248.XXX.XXX port 443 (#0) * Trying 54.248.XXX.XXX... * Connection timed out after 10001 milliseconds * Closing connection 0 curl: (28) Connection timed out after 10001 milliseconds
- 通信がタイムアウトした場合は対象ポートへの通信がブロックされている可能性があります
- エラーが
Connection refused
の場合は、ポートは開放されているが通信先のサービスに問題が出ている可能性があります
まとめ
curl
コマンドで 指定のポートへの接続確認ができることがわかりました。nc
コマンド等利用できない場合に使いましょう。