KokeLab

Cisco/Linux/AWS/Ansible/Kubernetes

NW障害時の切り分けに役立つコマンド集

皆さん、おはこんばんにちは。最近、花粉のせいでSAN値ピンチなコケラです。

タイトルにもある通り、今回はNW障害時のトラブルシューティングに役立つコマンドをいくつか紹介していこうかなと思います。基本的にはCisco IOSで、もしくはMS-DOS系で使えるコマンドとなります。
内容的には、超初心者~初中級者向けとなっているので、それほど難しいものではありません。とてもよく使うコマンドを★★★に、よく使うコマンドを★★☆に、たまに使うコマンドを★☆☆と、使用頻度別に分類して紹介していきますね。

ping [アドレス](★★★)

いわずもがな、IT技術に携わる全ての人たちが知っておくべき超定番コマンドです。ネットワークやサーバとの疎通確認ができます。

Router#ping 34.0.0.4 

Type escape sequence to abort. 
Sending 5, 100-byte ICMP Echos to 34.0.0.4, timeout is 2 seconds: 
!!!!! 
Success rate is 100 percent (5/5), round-trip min/avg/max = 32/35/36 ms 

Cisco IOSでは、上記のように!!!!!マークが表示されれば通信成功です。

MS-DOS系だと以下のようになります。

C:\Users\●●●>ping 127.0.0.1

127.0.0.1 に ping を送信しています 32 バイトのデータ:
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128

127.0.0.1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 0ms、平均 = 0ms

ping [アドレス] -t(★★☆)

pingコマンドに-tオプションを付けることで、Ctrl+Cで明示的に終了させるまでずっと、pingを連続実行することができます。

C:\Users\●●●>ping 127.0.0.1 -t

127.0.0.1 に ping を送信しています 32 バイトのデータ:
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128

127.0.0.1 の ping 統計:
    パケット数: 送信 = 9、受信 = 9、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 0ms、平均 = 0ms
Ctrl+C
^C

こうした連続pingを実行したい場合や、例えば複数のIPアドレスに連続pingを実行したい場合は、ExPingというツールがよく使われたりします。非常に有名な定番ツールなので、覚えておいて損はないでしょう。

ping [アドレス] -n 回数(★★☆)

MS-DOS系で、実行する回数を指定してpingを実行させたい時は-nオプションを付けます。Cisco IOSなら、-nをrepeatに変えてください。ハイフンは不要です。

C:\Users\●●●>ping 127.0.0.1 -n 10

127.0.0.1 に ping を送信しています 32 バイトのデータ:
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128

127.0.0.1 の ping 統計:
    パケット数: 送信 = 10、受信 = 10、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 0ms、平均 = 0ms

ping vrf [vrf名] [アドレス](★★☆)

VRFによって、L3でシステムを分離させている場合、各システムで設定したVRF名を指定しないとpingを実行できません。VRFに関しては、いずれまた別記事でまとめようかと思います。とりあえずは、VLANのL3バージョンだという認識で良いです。

CoreSW#ping vrf Kokera 192.168.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.3.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/38/44 ms

telnet [アドレス](★★★)

pingと同じくらい重要なコマンドです。指定したアドレスが設定されている機器へ接続し、遠隔で操作することができます。telnetで機器に遠隔で接続し、showコマンドで機器の状態を調べたり、機器の設定を変更したりすることができます。

Router#telnet 10.10.10.1
Tryng 10.10.10.1 ... Open
User Access Verification

Password:

telnet [アドレス] /vrf [VRF名](★★☆)

VRFが設定されている機器へtelnet接続を行う場合、pingと同様、VRF名を指定しないといけません。pingの時とは少しVRF名の指定方法が異なるのでややこしいです。末尾に/vrf [vrf名]を付けてください。

CoreSW#telnet 10.10.10.1 /vrf Kokera
Tryng 10.10.10.1 ... Open
User Access Verification

Password:

show logging(★★★)

sh logも定番のコマンドです。主に機器のインターフェースのリンク状況を調べたい時に使います。

Switch#sh log
*Feb 31 17:14:01.095: %LINK-3-UPDOWN: Interface FastEthernet 0/1, changed state to up
*Feb 31 17:14:01.103: %LINK-3-UPDOWN: Interface GigabitEthernet1/0, changed state to up
*Feb 31 17:14:01.111: %LINK-3-UPDOWN: Interface GigabitEthernet2/0, changed state to up
*Feb 31 17:15:02.215: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down
*Feb 31 17:15:02.223: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0, changed state to down

例えば、1行目の「*Feb 31 17:14:01.095: %LINK-3-UPDOWN: Interface FastEthernet0/1, changed state to up」を見ると、Switch1のFa0/1が2月31日の17時14分にリンクアップして、
4行目の「*Feb 31 17:14:02.215: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down」で、17時15分にリンクダウンしていることが分かります。
このログによって「Fa0/1に繋がっているケーブルの接触が悪いか故障したのかも?あるいは、機器を移動させたりするために、誰かがケーブルを抜き差ししてるのかも?」と推測することができます。
余談ですが、デフォルトの状態では、上記のように日時が表示されません。日時が表示されないとあまり意味がないので、以下のコマンドを投入しましょう。

Switch(config)#service timestamps log datetime msec

show version(★★★)

sh verでは主に、機器のIOSのバージョンやFlashメモリのサイズ、シリアルナンバーや機器が起動してからの経過時間を確認することができます。これらの4項目はどれも重要ですが、運用・保守業務において特に重要なのは「機器が起動してからの経過時間」です。

Router#sh ver
Cisco IOS Software, C860 Software (C860-UNIVERSALK9-M), Version 12.4(24)T3, RELEASE SOFTWARE (fc2)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2010 by Cisco Systems, Inc.
Compiled Tue 23-Mar-10 18:07 by prod_rel_team

ROM: System Bootstrap, Version 12.4(22r)YB5, RELEASE SOFTWARE (fc1)

Router uptime is 1 minute
System returned to ROM by power-on
System image file is "flash:c860-universalk9-mz.124-24.T3.bin"

(略)

A summary of U.S. laws governing Cisco cryptographic products may be found at:
http://www.cisco.com/wwl/export/crypto/tool/stqrg.html

If you require further assistance please contact us by sending email to
export@cisco.com.

Cisco 861 (MPC8300) processor (revision 1.0) with 249856K/12288K bytes of memory.
Processor board ID ●●●●●
5 FastEthernet interfaces
256K bytes of non-volatile configuration memory.
125440K bytes of ATA CompactFlash (Read/Write)

License Information for 'c860-data'
    License Level: advsecurity   Type: Permanent
    Next reboot license Level: advsecurity


Configuration register is 0x2102

show ip interface brief(★★☆)

機器のすべてのインターフェースに設定されているIPアドレスおよび、それらの物理層データリンク層の状態を確認できます。

Router#sh ip int brief

Interface              IP-Address      OK? Method Status                Protocol
Serial1/0              192.168.1.1     YES unset  administratively down down
Serial1/1              172.16.1.1      YES unset  administratively down down
Serial1/2              unassigned      YES unset  administratively down down
Serial1/3              unassigned      YES unset  administratively down down
FastEthernet0/0        10.1.1.1        YES unset  up                    up

show interfaces status(★☆☆)

機器のすべてのインターフェースのリンクステータス、Vlan番号、Duplex/Speedの状態を確認できます。意外と使う機会がないように感じます。

Switch#sh int status

Port    Name               Status       Vlan     Duplex Speed   Type
------- ------------------ ------------ -------- ------ ------- ----
Fa0/1                      notconnect   1         Auto   Auto   100BaseTX/FX
Fa0/2                      notconnect   1         Auto   Auto   100BaseTX/FX
Fa0/3                      notconnect   1         Auto   Auto   100BaseTX/FX
Fa0/4                      notconnect   1         Auto   Auto   100BaseTX/FX
Fa0/5                      notconnect   1         Auto   Auto   100BaseTX/FX
Fa0/6                      notconnect   1         Auto   Auto   100BaseTX/FX
Fa0/7                      notconnect   1         Auto   Auto   100BaseTX/FX
Fa0/8                      notconnect   1         Auto   Auto   100BaseTX/FX
Fa0/9                      notconnect   1         Auto   Auto   100BaseTX/FX
Fa0/10                     notconnect   1         Auto   Auto   100BaseTX/FX
Fa0/11                     notconnect   1         Auto   Auto   100BaseTX/FX
Fa0/12                     notconnect   1         Auto   Auto   100BaseTX/FX

show interfaces [インターフェース] | include broadcasts(★★☆)

該当機器の配下でループ接続になっている場合、ブロードキャストストームが発生する時があります。このコマンドは、指定したインターフェースが受け取ったブロードキャスト値だけを抜き出して確認することができます。
数回コマンドを実行し、受け取ったブロードキャスト値が激しく増加していたら、該当機器の配下でのループを疑いましょう。

Router#sh int fa 1 | include broadcasts
Received 153355 broadcasts , 0 runts, 0 giants, 0 throttles

show ip dhcp binding(★★☆)

DHCPによって配布されたIPアドレスの払い出し状況を確認することができます。配下のクライアント端末が何台あって、どのIPアドレスがどの端末に配布されたのか調べることができます。

Router#sh ip dhcp binding
Bindings from all pools not associated with VRF:
IP address          Client-ID/              Lease expiration        Type
                    Hardware address/
                    User name
172.16.1.2          0100.9f31.0a00.00       Jan 18 2014 04:36 PM    Automatic
172.16.1.3          0100.9f31.0b00.00       Jan 18 2014 04:38 PM    Automatic

show mac address-table(★★☆)

機器が学習しているMACアドレスの情報をインターフェース毎に確認することができます。

Switch#sh mac address-table               
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
 All    0100.0ccc.cccc    STATIC      CPU    
 All    0180.c200.0001    STATIC      CPU
 All    0180.c200.0002    STATIC      CPU
 All    0180.c200.0003    STATIC      CPU
 All    0180.c200.0004    STATIC      CPU
 All    0180.c200.0005    STATIC      CPU
 All    0180.c200.0006    STATIC      CPU
 All    0180.c200.0007    STATIC      CPU
 All    0180.c200.0008    STATIC      CPU
 All    0180.c200.0009    STATIC      CPU
 All    0180.c200.000a    STATIC      CPU
 All    0180.c200.000b    STATIC      CPU
 All    0180.c200.000c    STATIC      CPU
 All    0180.c200.000d    STATIC      CPU
 All    0180.c200.000e    STATIC      CPU
 All    0180.c200.000f    STATIC      CPU
 All    0180.c200.0010    STATIC      Fa0/1
 All    ffff.ffff.ffff    STATIC      CPU
Total Mac Addresses for this criterion: 20

show process cpu(★☆☆)

機器での過去5秒間、1分間、5分間のCPU使用率をプロセス毎に確認できます。historyを付け加えると、過去60秒間、60分間、72時間におけるCPU使用率をグラフィカルに表示させることもできます。

Switch#sh process cpu
CPU utilization for five seconds: 16%/4%; one minute: 17%; five minutes: 17%
 PID  Runtime(ms)  Invoked  uSecs    5Sec   1Min   5Min TTY Process
   1           0      1956      0   0.00%  0.00%  0.00%   0 Load Meter
   2          47        18   2611   0.20%  0.01%  0.00%   0 Exec
   3        6374      1162   5485   0.00%  0.04%  0.05%   0 Check heaps
   4           0         1      0   0.00%  0.00%  0.00%   0 Chunk Manager
   5           0         1      0   0.00%  0.00%  0.00%   0 Pool Manager
   6           0         2      0   0.00%  0.00%  0.00%   0 Timers
   7          21         3   7000   0.00%  0.00%  0.00%   0 Entity MIB API
   8          46      2442     18   0.00%  0.00%  0.00%   0 HC Counter Timer
   9          11       165     66   0.00%  0.00%  0.00%   0 ARP Input
  10         760      9702     78   0.00%  0.00%  0.00%   0 Enet Aging
  11           0         1      0   0.00%  0.00%  0.00%   0 Critical Bkgnd
  12         129      4673     27   0.00%  0.00%  0.00%   0 Net Background

(後略)

show tech-support(★☆☆)

障害時に参考になるであろう確認コマンドを全てまとめて実行してくれるコマンドです。どういう時に使うのか、察しの良い方なら気付かれるでしょう。要するにこういうことです。
どんだけ調べても障害の原因が分からねーから、超絶エキスパートな人に障害切り分け丸投げだー!という時に使います。
もちろんシスコの中の人でも良いですし、シスコ機器の取り扱い企業No1のNOS(ネットワンシステムズ)のサポートに、このsh techを送り付けるのも良いでしょう。サポート契約を結んでないと出来ませんが。
当然ながら、コマンドの実行例は割愛させて頂きます。とてつもなく膨大な量ですし、文字通りいろいろな確認コマンドをまとめて実行しているだけなので。

以上でコマンド紹介を終わらせて頂きます。いかがだったでしょうか。本記事で紹介したコマンドは、すべて実際に業務で使用したことがあるので、かなり実用的な内容になったのではないかと思います。
本記事の内容が、少しでも皆さんのお役に立てれば幸いです。