SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【LPIC102】ネットワークトラブルシューティングコマンド LPICで学ぶLinux13


今回はLPIC試験で「ネットワークのトラブルシューティング」の範囲になっているコマンドについて扱います。
実際これらのコマンドだけでどこまでトラブルシューティングができるかは微妙なところですが、実践で使用頻度が高そうなコマンドもあります。

疎通確認系コマンド

pingコマンド

LPICを受けようとしている人ならさすがに知らない人はいないでしょう。
疎通確認の王道、pingコマンドです。

通信プロトコルはICMPです。

・オプション

オプション 内容
-i 疎通間隔を指定する(interval)
-c 疎通の回数を指定する
-n 疎通結果をアドレスで表示する

・疎通確認の実行

[root@server1 wantan]# ping 192.168.142.134
PING 192.168.142.134 (192.168.142.134) 56(84) bytes of data.
64 bytes from 192.168.142.134: icmp_seq=1 ttl=64 time=0.291 ms
64 bytes from 192.168.142.134: icmp_seq=2 ttl=64 time=0.368 ms
64 bytes from 192.168.142.134: icmp_seq=3 ttl=64 time=0.447 ms
64 bytes from 192.168.142.134: icmp_seq=4 ttl=64 time=0.388 ms

・疎通確認の回数と間隔を指定する
以下の例では10秒間隔で3回の疎通確認を実行。

[root@server1 wantan]# ping -i 10 -c 3 192.168.142.134
PING 192.168.142.134 (192.168.142.134) 56(84) bytes of data.
64 bytes from 192.168.142.134: icmp_seq=1 ttl=64 time=0.489 ms
64 bytes from 192.168.142.134: icmp_seq=2 ttl=64 time=0.360 ms
64 bytes from 192.168.142.134: icmp_seq=3 ttl=64 time=0.410 ms

--- 192.168.142.134 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 20001ms
rtt min/avg/max/mdev = 0.360/0.419/0.489/0.058 ms

・結果をアドレスで表示する
ホスト名を指定してpingを実行した場合は通常ホスト名で結果が返ってきます。

[root@server1 wantan]# ping test-server
PING test-server (192.168.142.134) 56(84) bytes of data.
64 bytes from test-server (192.168.142.134): icmp_seq=1 ttl=64 time=0.301 ms
64 bytes from test-server (192.168.142.134): icmp_seq=2 ttl=64 time=0.364 ms
64 bytes from test-server (192.168.142.134): icmp_seq=3 ttl=64 time=0.361 ms

「-n」オプションを付与するとアドレス表記になります。

[root@server1 wantan]# ping test-server -n
PING test-server (192.168.142.134) 56(84) bytes of data.
64 bytes from 192.168.142.134: icmp_seq=1 ttl=64 time=0.833 ms
64 bytes from 192.168.142.134: icmp_seq=2 ttl=64 time=0.376 ms
64 bytes from 192.168.142.134: icmp_seq=3 ttl=64 time=0.424 ms

実践的にはどうゆうシーンで使うんだろうか。

■IPv6での疎通確認

pingコマンドでは(試験範囲内で)2種類の方法で疎通確認をすることができます。

・ping6コマンドを実行する
pingコマンドと同様のping6コマンドを使用することでIPv6の疎通確認を実行することができます。

[root@server1 wantan]# ping6 localhost
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.211 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.052 ms
64 bytes from localhost (::1): icmp_seq=3 ttl=64 time=0.040 ms

・「-6」オプションで実行する
こちらはpingコマンドにオプションを付与することで実行します。

[root@server1 wantan]# ping -6 localhost
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.064 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.044 ms
64 bytes from localhost (::1): icmp_seq=3 ttl=64 time=0.041 ms
tracerouteコマンド

tracerouteコマンドも比較的有名だと思います。
特定のホストやIPアドレスとの通信経路を表示します。

補足:以下の例ではWindowsホストマシンで起動したVMwareの仮想マシンからホストマシンにコマンドを実行しています。便宜上オプションなしのコマンド実行を記載していますが、そのままでは通信が通らなかったです。
tracerouteコマンドではUDPを使用しますがどうもそれがいけないみたい。実際に試すときにはICMPで通信を行う「-I」オプションを付与した。
なんかVMwareの仮想スイッチがいけないっぽいけど詳細は分からなかった。こうゆうときのトラブルシューティングではないのか。。。

なお試験的にはデフォルトではUDPで通信を行っているということは覚えておいていいかもしれませんが、オプションは試験対象外だと思われます。

・通信経路を表示する

[root@server1 wantan]# traceroute 192.168.139.1
traceroute to 192.168.139.1 (192.168.139.1), 30 hops max, 60 byte packets
 1  gateway (192.168.142.2)  0.620 ms  0.574 ms  0.555 ms
 2  192.168.139.1 (192.168.139.1)  0.535 ms  0.518 ms  0.655 ms

・IPv6で通信経路を表示する
基本的にはpingコマンドと同じ感じです。

[root@server1 wantan]# traceroute6 localhost
traceroute to localhost (::1), 30 hops max, 80 byte packets
 1  localhost (::1)  0.100 ms  0.003 ms  0.002 ms
[root@server1 wantan]# traceroute -6 localhost
traceroute to localhost (::1), 30 hops max, 80 byte packets
 1  localhost (::1)  0.012 ms  0.002 ms  0.003 ms
tracepathコマンド

tracepathコマンドはtracerouteコマンドと同様に対象までのネットワーク経路を示します。
途中で最大伝送単位(MTU)を提供したりroot権限でなくても実行できるという違いはありますが、試験的にはそこまで気にしなくてよさそうです。
あとはUDP以外のプロトコルで実行できなかったりと、tracerouteの方が高級コマンドな感じはします。

・ネットワーク経路を表示

[root@server1 wantan]# tracepath test-server
 1?: [LOCALHOST]                                         pmtu 1500
 1:  test-server                                           0.705ms !H
 1:  test-server                                           0.362ms !H
     Resume: pmtu 1500

・IPv6で通信経路を表示する
こちらも6用のコマンドがあるのはpingコマンドあるいはtracerouteコマンドと同様。
「-6」オプションはこちらにはないみたいですね。

[root@server1 wantan]# tracepath6 localhost
 1?: [LOCALHOST]                        0.051ms pmtu 65536
 1:  localhost                                             3.209ms reached
 1:  localhost                                             0.029ms reached
     Resume: pmtu 65536 hops 1 back 1
[root@server1 wantan]# tracepath -6 localhost
tracepath: invalid option -- '6'
Usage: tracepath [-n] [-b] [-l <len>] [-p port] <destination>

ネットワーク全般管理系コマンド

ネットワーク系コマンドにも多機能なものがあり分類が難しいものはこちらにぶち込みました。。

netstatコマンド

netstatコマンドはネットワーク機能に関する表示します。
多様なオプションがあるのでそちらをうまく使うことになります。

・主要オプション一覧

オプション 内容
-a 全てのソケット情報を表示
-c 1秒ごとにリアルタイム表示
-i ネットワークインタフェースの統計情報表示
-n アドレスやポートを数値表示
-p PIDとプロセスを表示
-r ルーティングテーブルを表示
-t TCPポートのみ表示
-u UDPポートのみ表示

・デフォルト実行

[root@server1 wantan]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0     36 server1.test:ssh        192.168.142.1:59228     ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  3      [ ]         DGRAM                    8997     /run/systemd/notify
unix  2      [ ]         DGRAM                    8999     /run/systemd/cgroups-agent
unix  5      [ ]         DGRAM                    9017     /run/systemd/journal/socket
unix  17     [ ]         DGRAM                    9019     /dev/log
*****省略*****

・接続待ちしているTCPポートを調べる
よく使われるやつですね。
実践的にもそのまま覚えてしまってもいいと思います。

[root@server1 wantan]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0     36 192.168.142.11:22       192.168.142.1:59228     ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
tcp6       0      0 :::3306                 :::*                    LISTEN

・接続待ちしているUDPポートを調べる
同様にUDPポートを調べる。

[root@server1 wantan]# netstat -anu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 0.0.0.0:68              0.0.0.0:*

・ルーティングを表示する
他のコマンドでも可能ですが、「-r」オプションで実行することでルーティング情報を表示することができます。

[root@server1 wantan]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 0          0 ens33
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 ens33
192.168.142.0   0.0.0.0         255.255.255.0   U         0 0          0 ens33

■ssコマンド
ssコマンドはnetstatコマンドの後継として同様のことができます。

[root@server1 wantan]# ss -ant
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port     
LISTEN     0      128          *:22                       *:*
LISTEN     0      128    127.0.0.1:631                      *:*                 
LISTEN     0      100    127.0.0.1:25                       *:*                 
ESTAB      0      0      192.168.142.11:22                 192.168.142.1:59228  
ESTAB      0      0      192.168.142.11:22                 192.168.142.1:60010  
LISTEN     0      128       [::]:22                    [::]:*
LISTEN     0      128      [::1]:631                   [::]:*
LISTEN     0      100      [::1]:25                    [::]:*
LISTEN     0      80        [::]:3306                  [::]:*
ncコマンド

ncコマンドはネットワーク上でcatコマンドと同様のことを実行できます。
私はややイメージがしにくかったですが、対象のIPのポートに対して通信状態の表示や、テキストの送信を行うことができます。
リッスンを行うことで簡易的なサーバとしても機能します。

・オプション

オプション 内容
-l 指定ポートをリッスンする
-p ポート番号を指定
-u UDPで使用する
-o ファイルに結果を出力

・リッスン状態で実行する
まずはポートを指定してリッスン状態で実行してみます。

[root@server1 wantan]# nc -l -p 22222

・疎通確認を行う
もう一つプロンプトを開き、先ほどリッスン状態にしたポートに対して疎通確認を行います。
入力待ちの状態になるので、適当な文字列を入力してみます。

[root@server1 wantan]# nc localhost 22222
test..
wantan

するとリッスン状態にしたncコマンドの方にも同様の文字列が表示されていることが確認できると思います。

[root@server1 wantan]# nc -l -p 22222
test..
wantan
routeコマンド

routeコマンドはその名の通りルーティング全般の管理を行うコマンドです。
サブコマンドなしで実行することでルーティングテーブルが表示され、「add」サブコマンドでルーティングの追加、「del」サブコマンドで削除を行うことができます。

・ルーティングテーブルの表示
表示は原則「netstat -r」の表示とほぼ同様になります。
後述する同じようにルーティングテーブルを表示する「ip route show」とは表示形式が異なります。

[root@server1 wantan]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 ens33
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.142.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

■Flagについて
Flagの文字は以下の状態を表しています。
U:経路が有効
H:宛先がホスト
G:ゲートウェイを使用
!:経路が無効

・ルーティングの追加
ルーティングの追加は以下のような書式で行います。

[root@server1 wantan]# route add -net 192.168.139.0 netmask 255.255.255.0 gw 192
.168.142.2

・ルーティングの削除
基本的には「add」だった部分を「del」にすることでルーティングの削除を行うことができます。

[root@server1 wantan]# route del -net 192.168.139.0 netmask 255.255.255.0 gw 192
.168.142.2
ipコマンド

ipコマンドはインタフェースやルーティングなどネットワークに関する幅広い設定を管理するコマンドです。
書式としては以下のようになります。

ip [オブジェクト] [サブコマンド]

・主要オブジェクト

オブジェクト 内容
addr IPアドレス
link ネットワークデバイス
neighbour ARPキャッシュ
route ルーティング

・サブコマンド

サブコマンド 内容
add 追加
del 削除
show 表示

・IPアドレス情報の表示

[root@server1 wantan]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:24:a6:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.142.11/24 brd 192.168.142.255 scope global noprefixroute dynamic ens33
       valid_lft 1279sec preferred_lft 1279sec
    inet6 fe80::f5ef:f740:af9c:23e8/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

・IPアドレスの追加(設定)

[root@server1 wantan]# ip addr add 192.168.142.12/24 dev ens33

・データリンク層情報の表示

[root@server1 wantan]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:24:a6:01 brd ff:ff:ff:ff:ff:ff

・ARPキャッシュ情報の表示

[root@server1 wantan]# ip neighbour show
192.168.142.1 dev ens33 lladdr 00:50:56:c0:00:08 DELAY
192.168.142.254 dev ens33 lladdr 00:50:56:f5:cf:d5 REACHABLE
192.168.142.2 dev ens33 lladdr 00:50:56:e8:1a:33 STALE

・ルーティング情報の表示

[root@server1 wantan]# ip route show
default via 192.168.142.2 dev ens33 proto dhcp metric 100
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.2 metric 100
192.168.142.0/24 dev ens33 proto kernel scope link src 192.168.142.11 metric 100
ifconfigコマンド

ifconfigコマンドはIPアドレスの確認などに使用される、インタフェースの管理コマンドになります。
LinuxシステムでIPアドレスを確認するコマンドとしては有名ですかね。

ifconfigコマンドではパラメータにより各種管理を行います。

・主要パラメータ

パラメータ 内容
netmask サブネットマスクの設定
up インタフェースを有効化
down インタフェースを無効化

・インタフェース情報の表示

[root@server1 network-scripts]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.2  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::f5ef:f740:af9c:23e8  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:24:a6:01  txqueuelen 1000  (Ethernet)
        RX packets 4093  bytes 317044 (309.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2047  bytes 398001 (388.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


・IPアドレスの設定

[root@server1 network-scripts]# ifconfig ens39 192.168.142.12 netmask 255.255.255.0


・前回(第十二回)
www.wantanblog.com

・次回(第十四回)
www.wantanblog.com