Linuxのネットワーク確認コマンドまとめ|ip・ping・ss・ip routeで障害を切り分ける

  • URLをコピーしました!

Linuxサーバを運用していると、 「通信できない」 というトラブルに遭遇することがあります。

たとえば、次のようなケースです。

Webサイトへ接続できない。
他のサーバへpingが通らない。
名前解決ができない。
サービスへ接続できない。

このようなネットワークトラブルでは、 やみくもに設定を変更するのではなく、 現在のネットワーク状態を順番に確認する ことが重要です。

この記事では、Linuxでよく使用する ip・ping・ss・getent・dig などのコマンドを使いながら、 ネットワークの基本的な確認方法を学習します。

🐧 LINUX INTERMEDIATE

この記事はLinux中級講座の一部です。 Linuxサーバのネットワーク状態を確認する方法と、 通信障害の基本的な切り分けを学習します。

Linux中級講座を見る →
LESSON GOAL この記事のゴール

Linuxサーバで通信できないときに、 IPアドレス → ルーティング → 疎通 → ポート → 名前解決 の順番でネットワーク状態を確認できるようになることを目指します。

目次

Linuxでは何を確認すればよい?

「通信できない」といっても、 原因は1つではありません。

01 IPアドレス ip addr

正しいIPが設定されているか

02 ルーティング ip route

宛先への経路があるか

03 疎通 ping

相手まで通信できるか

04 ポート ss

サービスが待ち受けているか

05 名前解決 getent / dig

名前からIPを取得できるか

通信できない → まず設定と状態を確認する いきなり設定変更をするのではなく、 「どこまでは正常なのか」を切り分けることが重要です。

ip addr:IPアドレスを確認する

まず確認したいのが、 Linuxサーバ自身に設定されている IPアドレスです。

ip addr
Linux Terminal
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP>
    inet 127.0.0.1/8 scope host lo

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 192.168.10.20/24 brd 192.168.10.255 scope global ens160

この例では、 ens160というネットワークインターフェースに 次のIPアドレスが設定されています。

INTERFACE ens160
IP ADDRESS 192.168.10.20
PREFIX /24

ip aでも同じように確認できる

addrは省略できるため、 実務では次のように入力することも多くあります。

ip a

まずは、 「自分のサーバに想定したIPアドレスが設定されているか」 を確認しましょう。

ネットワークインターフェースの状態も確認する

IPアドレスだけでなく、 インターフェース自体が利用可能な状態かも重要です。

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP>

ここでは UPLOWER_UP と表示されています。

IPアドレスが見つからない場合

インターフェース設定、DHCP、NetworkManagerなど、 IPアドレスが設定される仕組みに問題がないか確認する必要があります。

ip route:ルーティングテーブルを確認する

自分のIPアドレスが正しくても、 宛先までの経路がなければ通信できません。

Linuxのルーティングテーブルは、 次のコマンドで確認できます。

ip route
$ ip route
default via 192.168.10.1 dev ens160
192.168.10.0/24 dev ens160 proto kernel scope link src 192.168.10.20

重要なのが defaultです。

LINUX SERVER 192.168.10.20
DEFAULT GATEWAY 192.168.10.1
OTHER NETWORK 宛先ネットワーク

次の部分は、

default via 192.168.10.1 dev ens160

「個別の経路がない宛先への通信は、192.168.10.1へ送る」 という意味です。

デフォルトゲートウェイがなければどうなる?

同一ネットワーク内とは通信できても、 別ネットワークへ通信できなくなる可能性があります。

SAME NETWORK 192.168.10.30

直接通信できる

OTHER NETWORK 8.8.8.8

ルータ経由の経路が必要

ping:相手との疎通を確認する

IPアドレスとルーティングを確認したら、 次に 実際に通信できるか を確認します。

ping 192.168.10.1
$ ping -c 4 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=0.621 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=0.558 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=0.601 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=0.574 ms

--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss

この結果では、 4回送信して4回応答が返っているため、 192.168.10.1とのIPレベルの疎通は確認できた と判断できます。

-cで送信回数を指定できる

ping -c 4 192.168.10.1

-c 4を付けることで、 4回送信したところでpingを終了できます。

スクリプトや障害調査では、 無制限にpingを送信し続けないよう 回数を指定することがあります。

pingは順番に試すと切り分けしやすい

いきなり遠くのサーバへpingするのではなく、 近い場所から順番に確認すると原因を切り分けやすくなります。

STEP 1 127.0.0.1 自分自身
STEP 2 192.168.10.1 ゲートウェイ
STEP 3 8.8.8.8 外部IP
STEP 4 example.com 名前指定
IPアドレスなら通信できるのに名前では通信できない

この場合、 IP通信そのものではなく DNSなどの名前解決に問題がある可能性があります。

pingが通らない=通信経路が壊れている、とは限らない

ここは初心者が特に注意したいポイントです。

pingでは ICMPというプロトコルを使用します。

サーバやファイアウォール側でICMPを拒否している場合、 Web通信などが正常でもpingには応答しないことがあります。

IMPORTANT pingの結果だけで障害箇所を断定しない

pingは非常に便利な確認手段ですが、 ICMPが許可されているとは限りません。 ルーティングやポート、サービス状態なども組み合わせて判断します。

ss:待ち受けているポートを確認する

ネットワーク経路が正常でも、 サービスがポートを待ち受けていなければ接続できません。

そこで使用するのが ssコマンドです。

ss -lntp
$ sudo ss -lntp
State  Recv-Q Send-Q Local Address:Port  Peer Address:Port Process
LISTEN 0      128    0.0.0.0:22          0.0.0.0:*       users:(("sshd",pid=842,fd=3))
LISTEN 0      511    0.0.0.0:80          0.0.0.0:*       users:(("nginx",pid=1250,fd=6))
LISTEN 0      511    0.0.0.0:443         0.0.0.0:*       users:(("nginx",pid=1250,fd=7))

この例では、 次のTCPポートが待ち受けています。

22/TCP SSH
80/TCP HTTP
443/TCP HTTPS

ss -lntpのオプション

-l LISTEN

待ち受け中のソケット

-n NUMERIC

ポート番号などを数値表示

-t TCP

TCPソケットを表示

-p PROCESS

関連プロセスを表示

プロセス情報の表示には、 環境や対象によって管理者権限が必要になることがあります。

0.0.0.0:80と127.0.0.1:80の違い

ssでは、 ポート番号だけでなく どのアドレスで待ち受けているか も重要です。

0.0.0.0:80 すべてのIPv4インターフェース

外部から接続できる可能性がある

127.0.0.1:80 ループバックのみ

基本的にそのホスト自身からのみ接続可能

「サービスは起動しているのに外部から接続できない」場合

127.0.0.1だけで待ち受けていないかなど、 バインドしているアドレスも確認しましょう。

getent hosts:名前解決を確認する

IPアドレスでは通信できるのに、 ホスト名では通信できない場合、 名前解決を確認します。

getent hosts example.com
$ getent hosts example.com
2606:2800:220:1:248:1893:25c8:1946 example.com

getent hostsは、 Linuxシステムが利用する名前解決の仕組みに沿って ホスト情報を確認するときに便利です。

dig:DNSへ問い合わせて詳しく確認する

DNSの問い合わせ結果を詳しく確認したい場合は、 digを使用できます。

dig example.com
$ dig example.com

;; QUESTION SECTION:
;example.com.          IN      A

;; ANSWER SECTION:
example.com.     300   IN      A       192.0.2.50

特に結果だけを簡潔に確認したい場合は、 次のようにできます。

dig +short example.com
$ dig +short example.com
192.0.2.50
digがインストールされていない場合もある

ディストリビューションや環境によっては、 digを利用するためのパッケージが インストールされていないことがあります。

getentとdigはどう使い分ける?

GETENT OS視点で確認

Linuxが実際に利用する名前解決結果を確認したいときに便利。

DIG DNS視点で確認

DNS問い合わせの詳細を確認したいときに便利。

通信できないときの基本的な切り分け手順

ここまでのコマンドを、 実際の障害調査の流れとして整理してみましょう。

STEP 01 IPアドレス確認 ip addr

想定したIPが設定されているか?

STEP 02 ルーティング確認 ip route

宛先への経路やデフォルトゲートウェイはあるか?

STEP 03 IP疎通確認 ping

ゲートウェイや宛先へ到達できるか?

STEP 04 ポート確認 ss -lntp

必要なサービスが待ち受けているか?

STEP 05 名前解決確認 getent hosts / dig

ホスト名からIPアドレスを取得できるか?

ここで実際に試してみよう:通信障害切り分けシミュレーター

あなたはLinuxサーバ web01 を管理しています。

監視から、 「外部サーバへホスト名で接続できない」 というアラートが届きました。

コマンドを使って原因を特定してみましょう。

INTERACTIVE LAB

Network Troubleshooting

ALERT
SERVER web01
IP 192.168.10.20
ISSUE Name Resolution
user@web01
ALERT: api.example.test に接続できません。
ネットワーク状態を順番に確認してください。
user@web01:~$
STEP 1

まずIPアドレスを確認してみましょう

ip addrを使って、自分自身のネットワーク設定から確認します。

この演習で身につけたい考え方

ip addr IPは正常
ip route 経路は正常
ping IP通信は正常
getent / dig DNS異常を発見

理解度チェック:どこに問題がありそう?

SCENARIO 198.51.100.20へはpingできるのに、 api.example.testでは接続できません。

次に優先して確認したいものはどれでしょうか?

回答を選択してください

「IPでは通信できる」という情報がポイントです。

初心者が間違えやすいポイント

① pingが通らないだけでネットワーク障害と断定する

ICMPがファイアウォールなどで拒否されている可能性があります。

pingだけではなく、 ルーティングや実際に使用するTCP/UDP通信なども含めて判断しましょう。

② IPアドレスだけ確認して終わる

IPアドレスが正しくても、 デフォルトゲートウェイなどの ルーティング設定が間違っていれば通信できません。

IP OK NETWORK OK

③ サービス起動=ポート待ち受け、と考える

サービスが起動しているように見えても、 想定したポートやアドレスで待ち受けているとは限りません。

ss -lntpなどで、 実際の待ち受け状態を確認しましょう。

④ IPでは通信できるのにDNSを疑わない

IPアドレスで通信できるのであれば、 ネットワーク経路そのものは正常である可能性が高くなります。

ホスト名だけ失敗する場合は、 DNSや名前解決設定 を確認しましょう。

ネットワーク確認コマンド早見表

ip addr IPアドレス 自分のIP設定を確認
ip route ルーティング 宛先への経路を確認
ping 疎通 IPレベルの到達性を確認
ss -lntp ポート TCP待ち受け状態を確認
getent hosts 名前解決 OSから見た名前解決を確認
dig DNS DNS問い合わせを詳しく確認

確認問題:ネットワーク確認の基本をチェックしよう

QUESTION 01

Linuxサーバに設定されているIPアドレスを 確認する代表的なコマンドはどれですか?

正解:A

ip addrではネットワークインターフェースや 設定されているIPアドレスを確認できます。

QUESTION 02

デフォルトゲートウェイなど、 Linuxのルーティング情報を確認するコマンドはどれですか?

正解:B

ip routeでルーティングテーブルを確認できます。 default via … の行からデフォルトゲートウェイも確認できます。

QUESTION 03

IPアドレスでは通信できるのに、 ホスト名では通信できません。 原因として優先的に確認したいものはどれですか?

正解:C

IPアドレスで通信できるなら、 IPレベルの経路は正常である可能性があります。 getentやdigなどで名前解決を確認しましょう。

YOUR SCORE 0 / 3

3問に挑戦してみましょう。

まとめ

01

ip addrIPアドレスとインターフェース状態 を確認する

02

ip routeルーティングとデフォルトゲートウェイ を確認する

03

pingで疎通を確認するが、 pingだけで障害を断定しない

04

ss -lntpサービスのTCP待ち受け状態 を確認する

05

IPでは通信できるのに名前では失敗する場合、 getentdig名前解決を確認する

次はLinuxの処理を自動化してみよう

ここまでのLinux中級講座では、 プロセス・サービス・ログ・パッケージ・ディスク・ネットワークなど、 Linuxサーバを管理するための基本操作を学んできました。

しかし実際のサーバ運用では、 毎日・毎週繰り返す処理を 人が毎回コマンドで実行するとは限りません。

EVERY DAY バックアップ
EVERY NIGHT バッチ処理
EVERY WEEK 定期処理

Linuxでは、 cronを使うことで、 指定した日時にコマンドやスクリプトを自動実行できます。

NEXT LESSON

次は「cronでLinux処理を自動実行する」を学びましょう

次の記事では、 cron・crontabの基本から、 「毎日3時」「5分ごと」「毎週月曜日」 といった実行スケジュールの指定方法を学習します。

cron特有の 「分 時 日 月 曜日」 の読み方も、 実際にスケジュールを作りながら理解していきます。

cronでLinux処理を自動実行する
LINUX INTERMEDIATE

Linux中級講座の一覧へ戻る

Linux中級の学習順を確認したい場合は、 講座一覧へ戻りましょう。

← Linux中級講座へ戻る
目次