よく使うネットワークトラブルシューティング(Linux)

Linux

今回は、サーバ構築中などにネットワークがつながらない状況になった際に、よく使うコマンドを紹介します。

pingコマンド

ネットワークの問題が発生した場合はとりあえずpingコマンドを打ってみるのが定石です。

[root@localhost ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=15.6 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=128 time=9.89 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=128 time=12.5 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 9.899/12.676/15.621/2.339 ms

とりあえずpingコマンドを打って、目的のサーバまで疎通できるかを確認します。

pingが通れば、サーバ間のNWが疎通している&対向のサーバが起動していることを確認できます。

もし通らなかった場合、他のコマンドを併用していくことで問題の発生原因を特定します。

arpコマンド

とりあえずpingコマンドでゲートウェイまでの疎通を確認しましょう。

ゲートウェイまでの疎通が確認できない場合は、arp -aでゲートウェイのMACアドレスが見えてるかを確認します。

[root@localhost ~]# arp -a
? (192.168.XXX.XXX) at 00:00:00:00:00:00 [ether] on ens33
? (192.168.XXX.1) at 00:00:00:00:00:00 [ether] on ens33
gateway (192.168.XXX.2) at 00:00:00:00:00:00 [ether] on ens33

上記コマンドは実行例ですが、この時ゲートウェイのIPアドレスとMACアドレスがセットで表示されるかを確認します。

ゲートウェイでICMPを拒否している場合もあります。(ICMP = ping)その場合は、MACアドレスも表示されないので、nmapなどを用いた方法でポートを指定して確認する必要があります。

tracerouteコマンド

NICを複数持っている場合で、サーバ側にルーティング設定を行っている場合、正しいNICから通信を行おうとしていない場合があります。

正しいNICで通信しようとしているかを確認するためにtracerouteコマンドを用います

[root@localhost ~]# traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  gateway (192.168.2.1)  0.215 ms  0.094 ms  0.068 ms
 2  * * *
 3  * * *
 4  * * *

上記の例では、8.8.8.8のアドレスに通信に行くためにまずgatewayの192.168.2.1を通過していることがわかります。

(そこから先は応答しないように設定されているため、どこを通ったかわからないようになっているようです)

nmapコマンド

pingコマンドでの疎通後もしくは疎通できない場合に併用して、nmapコマンドなどでポートが開いているかどうか確認します。

[root@localhost ~]# nmap 192.168.2.1 -p22

Starting Nmap 6.40 ( http://nmap.org ) at 2020-06-21 19:48 JST
Nmap scan report for 192.168.2.1
Host is up (0.00045s latency).
PORT     STATE    SERVICE
22/tcp XXXX  XXXXX

Nmap done: 1 IP address (1 host up) scanned in 0.52 seconds

上記例では192.168.2.1のサーバのTCPポート22と疎通できるかどうかを確認しています。

結果のSTATEがopenとなっていればサーバのポートまで疎通できていることが確認できます。

filterdとなっていれば、NWの経路上に問題があり、closedとなっていれば、相手のサーバのそのポートが待ち受け状態になっていないということです。

netstatコマンド

対向側の状態が見れるのであれば、netstatコマンドで、通信ポートが想定している番号で正しく待ち受け状態になっているか確認しましょう。

[root@localhost ~]# netstat -ano
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       Timer
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      off (0.00/0/0)

例えば22で待ち受け状態になっていない場合、sshdの設定やSELinux、Firewalldの設定を見直して、正しくLISTENの状態に設定しなおす必要があります。

nmcliコマンド

pingも通らない、arpも何も見えないような場合は、こちら側の設定が正しいかを確認する必要があります。

ifconfigやip addrコマンドをつかって、IPが設定されていることを確認したのに、NW疎通ができない原因として、「デバイス名とコネクションの設定が間違っている」というのがあります。

[root@localhost ~]# nmcli d
デバイス  タイプ    状態      接続
ens33     ethernet  接続済み  ens33
lo        loopback  管理無し  --
[root@localhost ~]# nmcli c
名前   UUID                                  タイプ          デバイス
ens33  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  802-3-ethernet  ens33

nmcli d で表示されたデバイス、とnmcli cで表示されたデバイス

nmcli dで表示された接続と、nmcli c で表示された名前が一致することを確認してください。

さらに、その名前が、/etc/sysconfig/network-scripts/ifcfg-ens33 のようにifcfg-<デバイス名>となっていて、中身のNAMEとDEVICEが同じ名前になっていることを確認しましょう。

コメント

タイトルとURLをコピーしました