【Linux】ネットワークのトラブルシューティング手順とコマンドまとめ

2021.07.06
2024.03.24
ネットワーク
DNSLinuxポート

はじめに

ネットワークに問題が発生したときのトラブルシューティングについて、順番にコマンドで確認することで原因を特定できるようにまとめてみました。

どんな問題もこれで特定できるわけではないと思いますが、どこらへんに原因があるかはある程度目処が付けられると思います。

切り分け手順

以下の順番で自身のネットワークインターフェースの確認から対向側のサーバへの疎通を確認していきます。自身に近い方から疎通確認していくイメージになります。

  1. ネットワークインターフェースの確認
  2. デフォルトゲートウェイの確認と疎通
  3. DNSでの名前解決
  4. インターネット上のサーバへのpingとtraceroute
  5. 対向サーバへのpingとtraceroute
  6. ポートを指定して疎通確認

想定している構成

今回想定しているのは下記のような構成です。自身のサーバはCentOSを想定しています。

ネットワークインターフェースの確認

まずは自身のサーバのネットワークインターフェースを確認します。ここで想定していなかった状態であれば自身のサーバのネットワークインターフェースの設定を見直します。

イメージとしては下記の部分になります。

下記のコマンドで確認できます。

1ifconfig
1ip addr show

例えば以下のような結果だと、2つのイーサネットインターフェース(eth0とeth1)が有効になっていることがわかります。

1$ ifconfig
2eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
3        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
4        inet6 fe80::5054:ff:fe4d:77d3  prefixlen 64  scopeid 0x20<link>
5        ether 52:54:00:4d:77:d3  txqueuelen 1000  (Ethernet)
6        RX packets 201225  bytes 287635311 (274.3 MiB)
7        RX errors 0  dropped 0  overruns 0  frame 0
8        TX packets 40521  bytes 2669360 (2.5 MiB)
9        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
10
11eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
12        inet 192.168.0.1  netmask 255.255.255.0  broadcast 192.168.0.255
13        inet6 fe80::a00:27ff:fe30:42f2  prefixlen 64  scopeid 0x20<link>
14        ether 08:00:27:30:42:f2  txqueuelen 1000  (Ethernet)
15        RX packets 24  bytes 4244 (4.1 KiB)
16        RX errors 0  dropped 0  overruns 0  frame 0
17        TX packets 21  bytes 2786 (2.7 KiB)
18        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
19
20lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
21        inet 127.0.0.1  netmask 255.0.0.0
22        inet6 ::1  prefixlen 128  scopeid 0x10<host>
23        loop  txqueuelen 1000  (Local Loopback)
24        RX packets 0  bytes 0 (0.0 B)
25        RX errors 0  dropped 0  overruns 0  frame 0
26        TX packets 0  bytes 0 (0.0 B)
27        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

また、グローバルIPアドレスについては、下記で確認できます。

1curl https://ifconfig.io

デフォルトゲートウェイの確認と疎通

次にデフォルトゲートウェイの確認と疎通を試します。ここで想定していない結果であればデフォルトゲートウェイまでの設定等を見直します。

イメージとしては下記の部分になります。

デフォルトゲートウェイは下記のコマンドで確認します。

1route -n

Genmaskが0.0.0.0となっている行がデフォルトゲートウェイになります。

1$ route -n
2Kernel IP routing table
3Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
40.0.0.0         10.0.2.2        0.0.0.0         UG    100    0        0 eth0
510.0.2.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
6192.168.0.0     0.0.0.0         255.255.255.0   U     101    0        0 eth1

デフォルトゲートウェイの設定が想定通りであれば、デフォルトゲートウェイまでの疎通が可能かを確認します。

1ping -c 5 デフォルトゲートウェイのIPアドレス

疎通ができれば以下のようになります。

1$ ping -c 5 10.0.2.2
2PING 10.0.2.2 (10.0.2.2) 56(84) bytes of data.
364 bytes from 10.0.2.2: icmp_seq=1 ttl=64 time=0.131 ms
464 bytes from 10.0.2.2: icmp_seq=2 ttl=64 time=0.304 ms
564 bytes from 10.0.2.2: icmp_seq=3 ttl=64 time=0.264 ms
664 bytes from 10.0.2.2: icmp_seq=4 ttl=64 time=0.148 ms
764 bytes from 10.0.2.2: icmp_seq=5 ttl=64 time=0.191 ms
8
9--- 10.0.2.2 ping statistics ---
105 packets transmitted, 5 received, 0% packet loss, time 4003ms
11rtt min/avg/max/mdev = 0.131/0.207/0.304/0.068 ms

DNSでの名前解決

次にDNSでの名前解決がされているかを確認します。ここで想定していない結果であればDNS周りの設定等を見直します。

イメージとしては下記の部分になります。

名前解決は下記のコマンドで確認します。

1nslookup ドメイン名
1dig ドメイン名

名前解決ができれば対応するIPアドレスが取得できます。

1$ nslookup google.com
2Server:		10.0.2.3
3Address:	10.0.2.3#53
4
5Non-authoritative answer:
6Name:	google.com
7Address: 172.217.26.14
8Name:	google.com
9Address: 2404:6800:4004:822::200e

インターネット上のサーバへのpingとtraceroute

次に対向サーバとは別のインターネット上のサーバへアクセスできるか確認します。ここで想定していない結果であればインターネットに出る通信の設定(FW等)を見直します。

イメージとしては下記の部分になります。

インターネット上のサーバへの疎通を確認する場合はGoogleのDNS(8.8.8.8)を利用するのがいいと思います。

1$ ping -c 5 8.8.8.8
2PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
364 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=11.8 ms
464 bytes from 8.8.8.8: icmp_seq=2 ttl=63 time=5.39 ms
564 bytes from 8.8.8.8: icmp_seq=3 ttl=63 time=11.7 ms
664 bytes from 8.8.8.8: icmp_seq=4 ttl=63 time=5.82 ms
764 bytes from 8.8.8.8: icmp_seq=5 ttl=63 time=11.2 ms
8
9--- 8.8.8.8 ping statistics ---
105 packets transmitted, 5 received, 0% packet loss, time 4009ms
11rtt min/avg/max/mdev = 5.396/9.217/11.868/2.954 ms

pingが届かない場合はtracerouteでどこまで届いているかを確認します。

アスタリスク「*」が表示されているのは、ルータのICMPによる問い合わせを拒否している場合かタイムアウトの場合になります。必ずしもタイムアウトではないので、最終的に宛先に届けば問題ありません。

1$ traceroute 8.8.8.8
2traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
3 1  gateway (10.0.2.2)  0.221 ms  0.170 ms  0.149 ms
4 2  * * *
5 3  * * *
6 4  * * *
7 5  * * *
8 6  * * *
9 7  * * *
10 8  dns.google (8.8.8.8)  14.568 ms  11.407 ms  14.479 ms

対向サーバへのpingとtraceroute

先程と同様に対向サーバへのpingtracerouteを確認します。ここで想定していない結果であれば対向サーバ側の設定(FW等)対向サーバ向けの通信設定(IPアドレスで制限していないか等)を見直します。

イメージとしては下記の部分になります。

確認するコマンドは下記の通りです。

1ping 対向サーバのIPアドレス
1traceroute 対向サーバのIPアドレス

ポートを指定して通信

最後にポートを指定して疎通できるかを確認します。ここで想定していない結果であれば特定のポートに対しての疎通周りの設定(特定のポートへの疎通を拒否しているFWがあるか等)を見直します。

イメージとしては下記の部分になります。

下記のコマンドでポート指定で疎通確認ができます。

1nc -vz 対向サーバのIPアドレス ポート
1curl -l 対向サーバのIPアドレス:ポート

それでも解決しない場合は

大体のことはこれまでの確認である程度の目処がたつと思いますが、それでも解決しない場合は以下のことを試してみるのがいいと思います。

  • 対向サーバ側のログを確認
  • FWのログを確認
  • パケットキャプチャ

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

関連記事

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee