今回は、サーバ構築中などにネットワークがつながらない状況になった際に、よく使うコマンドを紹介します。
ネットワークの基礎知識については、こちらをご覧ください。
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が同じ名前になっていることを確認しましょう。
コメント