【PowerShell応用編】pingが通らない?ICMP禁止環境で疎通確認する3つの方法

目次

【PowerShell応用編】pingが通らない?ICMP禁止環境で疎通確認する3つの方法

ネットワークの疎通確認といえば「ping」。
しかし、セキュリティポリシーの厳しい環境では ICMP(ping通信)がファイアウォールで禁止 されているケースも少なくありません。

この記事では、そんな「pingが通らない環境」で通信確認を行う方法を3つ紹介します。
Test-Connection -Port の活用例を中心に、実務で役立つ切り分けテクニックを解説します。


スポンサーリンク




🚫 なぜpingが通らないのか?

ping は ICMP(Internet Control Message Protocol)を利用して通信確認を行います。
多くのFWやルータでは、セキュリティ上の理由からこのICMP通信が遮断されています。

  • ICMPを許可すると、ネットワーク構成の推測(ポートスキャン)に悪用される恐れ
  • 外部からのDoS攻撃(ICMP Flood)対策のため

結果として、pingが「Request timed out」になっても、実際はTCP通信が正常に行えている場合があります。


✅ 方法①:PowerShellのTest-Connection -Portを使う

PowerShell 7以降で利用可能な Test-Connection -Port は、TCPレベルで疎通確認を行えます。
つまり、ping(ICMP)が禁止されていても、 対象ポートが開いていれば通信可能です。

例:Web・DB・SSHなどの確認

結果:

項目 説明
TcpTestSucceeded Trueなら疎通成功
RemotePort 指定したTCPポート
RoundtripTime 応答時間(ms)

🧩 方法②:アプリ層でのHTTP通信テスト(Invoke-WebRequest)

Webサーバの応答を確認したい場合は、HTTPリクエストを送る方法もあります。

  • ステータスコード 200 OK → 正常応答
  • ステータスコード 403 / 500 → Webアプリまたは認証エラー
💡 Invoke-WebRequest はAPIやWebシステムの死活確認にも活用できます。

🧠 方法③:特定ポートの開閉を確認(Test-NetConnection)

もう1つの便利なコマンドが Test-NetConnection (Windows標準搭載)。
PowerShell 5以降で利用でき、ICMPが使えない環境でもポートを指定して通信確認が可能です。

結果:

TcpTestSucceeded : Trueで疎通成功。
アプリケーション層(DBサーバやAPIサーバなど)との通信可否を簡単に判定できます。


🔍 実務での切り分けシナリオ

症状 想定原因 確認コマンド 対処
pingが通らないがWebは見られる ICMP遮断のみ Test-Connection -Port 443 問題なし(FW仕様)
pingもTCPも通らない FWで全通信遮断 ネットワーク設定・ACL確認 通信ルール修正
ping通るがDB接続不可 TCPポート閉塞 Test-Connection -Port 1433 ポート開放またはサービス再起動
ICMP禁止環境で死活監視したい ICMP不可だがTCP許可 Test-Connection -Port + スクリプト化 定期監視バッチを作成

💻 自動監視スクリプト例(PowerShell)

以下のスクリプトをタスクスケジューラに登録しておけば、ミドルウェアの死活を定期的チェックできます。

出力例:


🔗 関連記事


🧾 まとめ

ファイアウォールでICMPが禁止されている環境でも、
PowerShellの Test-Connection -PortTest-NetConnectionを使えば、
TCPレベルでの疎通確認が可能です。

pingが通らない = 通信できない ではない!
TCPポートが開いているかどうかを確認することで、正確な原因切り分けができます。

スポンサーリンク