pingコマンドでサーバーの死活確認をする方法|回数指定・タイムアウト・トラブルシュートまで

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)LinuxtipsLinuxtips, ネットワーク > pingコマンドでサーバーの死活確認をする方法|回数指定・タイムアウト・トラブルシュートまで
「サーバーにアクセスできない」「ネットワークがつながらない」----こんな障害に直面したとき、真っ先に打つコマンドが ping です。

しかし、ただ ping を打って「応答が返ってこない」で終わっていませんか? 応答がない原因は、相手サーバーのダウン、経路の問題、ファイアウォールによるICMPブロックなど多岐にわたります。原因を切り分けられなければ、復旧に無駄な時間を費やすことになります。

この記事では、pingコマンドの基本から、回数指定・タイムアウト・パケットサイズ変更といった実践オプション、さらに「応答がない時にどう原因を切り分けるか」というトラブルシュートの手順まで、現場目線で解説します。

【この記事でわかること】
・pingコマンドの基本的な使い方とWindowsとの違い
・回数指定・送信間隔・タイムアウトなど実践的なオプション
・MTUサイズ確認による経路の詳細診断方法
・応答がないときのネットワーク障害の体系的な切り分け手順
・エラーメッセージの意味とファイアウォール・ICMPブロックへの対処

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

pingコマンドとは? ネットワーク疎通確認の基本原理

pingコマンドは、ICMP(Internet Control Message Protocol)というプロトコルを使って、相手ホストとの通信が可能かどうかを確認するコマンドです。

仕組みはシンプルで、自分のマシンから相手ホストに「エコー要求(Echo Request)」パケットを送信し、相手が正常に受信すると「エコー応答(Echo Reply)」を返します。この往復が成功すれば「疎通あり」、失敗すれば「疎通なし」と判断できます。

Linuxのpingは、Ctrl+Cで停止するまで永遠にパケットを送り続けます。WindowsのpingはデフォルトでICMPを4回送って自動停止しますが、Linuxは違います。初めてLinuxを触る人が「pingが止まらない!」と焦るのは、ほぼ全員が通る道です。

基本的な使い方

1. IPアドレスを指定してpingを実行する

もっとも基本的な使い方です。相手のIPアドレスを指定してpingを打ちます。

# IPアドレスを指定してpingを実行する $ ping 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.29 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=2.03 ms 64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=3.00 ms ^C --- 192.168.1.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 2.030/2.440/3.001/0.418 ms

出力の各項目はこのような意味です。

64 bytes:受信したパケットのサイズ
icmp_seq:パケットの通し番号(連番が飛んでいるとパケットロスが発生している)
ttl(Time To Live):パケットが経由できるルーターの残り回数。初期値はOSによって異なり、Linux=64、Windows=128が一般的
time:パケットの往復時間(RTT: Round Trip Time)。同一LAN内なら1ms以下~数ms、インターネット経由なら数十ms~数百msが目安

停止するには Ctrl+C を押してください。停止すると、送信パケット数・受信パケット数・パケットロス率・RTTの統計情報が表示されます。

2. ホスト名を指定してpingを実行する

IPアドレスの代わりに、ホスト名(ドメイン名)を指定することもできます。

# ホスト名を指定してpingを実行する $ ping www.example.com PING www.example.com (93.184.216.34) 56(84) bytes of data. 64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=85.3 ms

ホスト名を指定した場合、pingは内部でDNSの名前解決を行ってからICMPパケットを送信します。もしここで ping: www.example.com: Name or service not known というエラーが出た場合は、ネットワークの問題ではなくDNSの設定に問題がある可能性があります。

3. Ctrl+Zで停止した場合の注意点

Ctrl+C ではなく Ctrl+Z を押してしまった場合、pingは「一時停止」になるだけで、プロセスとしてはバックグラウンドに残り続けます。

# Ctrl+Zで一時停止した場合 $ ping 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.68 ms ^Z [1]+ Stopped ping 192.168.1.1

この状態でプロセスを完全に終了するには、fg コマンドでフォアグラウンドに戻してから Ctrl+C で停止してください。Ctrl+Z で放置したままにすると、不要なプロセスがシステムに残り続けるため注意が必要です。

実務で使うpingの主要オプション

1. -c(回数指定)— スクリプトや監視で必須

-c オプションで、送信するICMPパケットの回数を指定できます。指定した回数だけパケットを送信したら自動で終了します。

# ICMPパケットを5回だけ送信する $ ping -c 5 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.29 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=2.03 ms 64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=3.00 ms 64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=4.75 ms 64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=2.10 ms --- 192.168.1.1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4006ms rtt min/avg/max/mdev = 2.030/2.834/4.750/0.989 ms

手動で確認するときは -c 5 程度で十分です。シェルスクリプトやcronで定期監視する場合は、-c を指定しないとスクリプトが永遠に終了しないため、必ず付けてください。

2. -i(送信間隔の変更)

-i オプションで、パケットの送信間隔を秒単位で指定できます。デフォルトは1秒間隔です。

# 0.2秒間隔でpingを送信する(root権限が必要) # ping -i 0.2 -c 10 192.168.1.1 # 5秒間隔でpingを送信する(長時間監視向け) $ ping -i 5 -c 100 192.168.1.1

1秒未満の間隔を指定するにはroot権限が必要です。これは、高頻度のping送信がネットワークに負荷をかける行為(フラッド攻撃と見なされる場合がある)だからです。

3. -W(応答タイムアウト)と -w(実行時間の上限)

-W オプションは、1パケットあたりの応答待ち時間を秒単位で指定します。-w オプションは、ping全体の実行時間の上限を秒単位で指定します。

# 各パケットの応答を2秒まで待つ(デフォルトは環境依存) $ ping -W 2 -c 5 192.168.1.1 # ping全体を10秒で強制終了する(-cと併用可) $ ping -w 10 192.168.1.1

-W(大文字)と -w(小文字)を混同しやすいため注意してください。監視スクリプトでは、-W-c を組み合わせて「応答がなければ素早く次のパケットに進む」設定がよく使われます。

4. -s(パケットサイズの変更)

-s オプションで、送信するICMPパケットのデータ部分のサイズをバイト単位で指定できます。デフォルトは56バイト(ICMPヘッダ8バイトを含めると64バイト)です。

# パケットサイズを1000バイトに変更してpingを実行する $ ping -s 1000 -c 3 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 1000(1028) bytes of data. 1008 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=3.15 ms 1008 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=2.87 ms 1008 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=2.91 ms

パケットサイズを大きくする場面としては、後述するMTU(Maximum Transmission Unit)の確認や、大きなパケットを送った時だけ通信が不安定になるネットワーク障害の調査があります。

実務Tips: MTUの確認方法(-M do -s)

MTU(Maximum Transmission Unit)とは、ネットワーク上で1回の通信で送れるパケットの最大サイズのことです。Ethernet環境では一般的に1500バイトですが、VPN環境やクラウド環境では異なる値が設定されていることがあります。

MTUを超えるパケットを送信するとフラグメンテーション(パケット分割)が発生し、通信速度の低下や通信障害の原因になります。pingコマンドを使えば、経路上のMTUを簡単に調べられます。

# フラグメント禁止フラグ付きでパケットサイズを指定する $ ping -M do -s 1472 -c 3 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 1472(1500) bytes of data. 1480 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.50 ms # パケットサイズが大きすぎるとエラーになる $ ping -M do -s 1473 -c 3 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 1473(1501) bytes of data. ping: local error: message too long, mtu=1500

-M do は「Don't Fragment(フラグメント禁止)」フラグを設定するオプションです。このフラグを付けた状態でパケットサイズを徐々に大きくしていき、エラーが出る直前の値がそのネットワーク経路のMTUです。

1472バイトで通って1473バイトでエラーが出た場合、ICMPヘッダ(8バイト)とIPヘッダ(20バイト)を足して 1472 + 28 = 1500バイト がMTUということになります。

VPN越しの通信が遅い、特定のサイトだけ表示されないといった症状は、MTU不一致が原因であることが少なくありません。

IPv6環境でのping(ping -6 / ping6)

IPv6アドレスに対してpingを実行する場合は、ping -6 または ping6 コマンドを使用します。

# IPv6アドレスを指定してpingを実行する $ ping -6 -c 3 ::1 PING ::1(::1) 56 data bytes 64 bytes from ::1: icmp_seq=1 ttl=64 time=0.025 ms 64 bytes from ::1: icmp_seq=2 ttl=64 time=0.038 ms 64 bytes from ::1: icmp_seq=3 ttl=64 time=0.035 ms # ping6コマンドでも同じ結果が得られる $ ping6 -c 3 ::1

最近のLinuxディストリビューション(RHEL 8以降、Ubuntu 20.04以降など)では、ping コマンド自体がIPv4/IPv6の両方に対応しており、ping -6 でIPv6を明示的に指定できます。古い環境では ping6 という別コマンドを使う必要がある場合もあります。

ネットワーク障害時の疎通確認手順(現場の鉄則)

「サーバーにつながらない」という障害が発生した場合、闇雲にpingを打つのではなく、近いところから順番に確認していくのが鉄則です。以下の順序で確認することで、問題がどこにあるかを効率よく絞り込めます。

1. ループバックアドレスにpingを打つ(自分自身の確認)

# 自分自身(ループバック)に疎通確認 $ ping -c 3 127.0.0.1

ここで応答がなければ、ネットワークカードやTCP/IPスタック自体に問題があります。OSやカーネルレベルの障害が疑われます。

2. デフォルトゲートウェイにpingを打つ

# デフォルトゲートウェイを確認する $ ip route show default default via 192.168.1.1 dev eth0 # ゲートウェイにpingを実行する $ ping -c 3 192.168.1.1

ゲートウェイに応答がなければ、ローカルネットワーク(LANケーブル、スイッチ、NICの設定)に問題があります。

3. 外部のDNSサーバーにpingを打つ

# GoogleのパブリックDNSにpingを実行する $ ping -c 3 8.8.8.8

ゲートウェイには応答があるのにここで失敗する場合、ルーティングやISP(プロバイダー)側の問題が考えられます。

4. 目的のサーバーにIPアドレスでpingを打つ

# 目的のサーバーにIPアドレスでpingを実行する $ ping -c 3 203.0.113.10

外部DNSには応答があるのにここで失敗する場合は、相手サーバー自体の問題(ダウン、ファイアウォール)か、相手サーバーまでの経路の問題です。

5. 目的のサーバーにホスト名でpingを打つ

# ホスト名を指定してpingを実行する $ ping -c 3 www.example.com

IPアドレスでは応答があるのにホスト名で失敗する場合は、DNS設定に問題があります。

トラブルシュート:「Destination Host Unreachable」と「Request timed out」の違い

pingが失敗したとき、エラーメッセージによって原因が異なります。この2つの違いを理解しておくと、トラブルシュートの精度が格段に上がります。

Destination Host Unreachable

$ ping -c 3 192.168.1.200 From 192.168.1.1 icmp_seq=1 Destination Host Unreachable From 192.168.1.1 icmp_seq=2 Destination Host Unreachable From 192.168.1.1 icmp_seq=3 Destination Host Unreachable

このメッセージは、経路上のルーター(またはLinux自身)が「宛先ホストに到達できない」と通知しているものです。

・同一サブネットの場合: 相手ホストがARP(Address Resolution Protocol)に応答しない。ケーブル未接続、相手ホストのNICが無効、IPアドレスの設定ミスが主な原因
・異なるサブネットの場合: ルーターが宛先ネットワークへの経路を持っていない。ルーティングテーブルの設定ミスが考えられる

Request timed out(応答なし)

$ ping -c 3 -W 3 203.0.113.50 PING 203.0.113.50 (203.0.113.50) 56(84) bytes of data. --- 203.0.113.50 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2003ms

何も応答がない(100% packet loss)場合は、パケットが相手に届いているが応答が返ってこない状態です。

・相手サーバーのファイアウォール(iptables/firewalld/セキュリティグループ)でICMPがブロックされている
・ネットワーク経路上でパケットがドロップされている
・相手サーバーが高負荷でICMPの応答処理が追いつかない

重要なポイント: pingに応答がないからといって、相手サーバーがダウンしているとは限りません。セキュリティ対策としてICMPを意図的にブロックしているサーバーは多数存在します。Webサーバーであれば、curl -I でHTTP応答を確認するなど、別の手段での疎通確認も行ってください。

ファイアウォールでICMPがブロックされているケースへの対処

サーバーを管理していてpingが通らない場合、ファイアウォールの設定を確認しましょう。

firewalldの場合(RHEL/CentOS/AlmaLinux/Rocky Linux)

# 現在のゾーンでICMPがブロックされているか確認する # firewall-cmd --query-icmp-block=echo-request # ICMPのブロックを解除する(一時的) # firewall-cmd --remove-icmp-block=echo-request # ICMPのブロックを恒久的に解除する # firewall-cmd --permanent --remove-icmp-block=echo-request # firewall-cmd --reload

iptablesの場合

# ICMPに関するルールを確認する # iptables -L -n | grep icmp # ICMPをDROP/REJECTしているルールがあれば削除する # iptables -D INPUT -p icmp --icmp-type echo-request -j DROP

AWSなどクラウド環境のセキュリティグループ

AWSのEC2インスタンスでpingを通すには、セキュリティグループのインバウンドルールで「すべてのICMP - IPv4」を許可する必要があります。デフォルトではICMPは許可されていないため、新規構築したインスタンスでpingが通らないのは正常な動作です。

本記事のまとめ

やりたいこと コマンド
IPアドレスに疎通確認する ping 192.168.1.1
ホスト名に疎通確認する ping www.example.com
回数を指定してpingを実行する ping -c 5 192.168.1.1
送信間隔を変更する ping -i 0.2 -c 10 192.168.1.1
応答タイムアウトを設定する ping -W 2 -c 5 192.168.1.1
実行時間の上限を設定する ping -w 10 192.168.1.1
パケットサイズを変更する ping -s 1000 -c 3 192.168.1.1
MTUを確認する ping -M do -s 1472 -c 3 192.168.1.1
IPv6で疎通確認する ping -6 -c 3 ::1
ICMPブロック状況を確認する firewall-cmd --query-icmp-block=echo-request

ネットワーク障害の原因切り分け、自信を持ってできますか?

pingの結果を見て「通らないから相手が悪い」で終わっていては、現場で頼られるエンジニアにはなれません。疎通確認から原因の特定、復旧までの一連の流れを体系的に身につけることが大切です。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。