トラシューするときは show run よりも、状態を見るshow コマンドの出力を使って原因を特定するクセをつける

このツイートに関して、書いていきます。

トラブルの原因を特定した後は、最終的に設定変更が必要になることが多いので、調査のためのアプローチとしては間違いではありません。しかし、show run を中心にトラブルシューティングをしようとすると、時間がかかることが多いと感じます。

トラブルシューティングでは、被疑箇所を狭い範囲で想定することが重要です。想定が正しければ対処を行い、違っているのであれば別の被疑箇所を想定し確認するフローを繰り返して行くほうが show run とにらめっこするよりも早く原因を見つけることができます。

この、被疑箇所を狭い範囲で想定することがミソです。show run コマンドでは、1台のノードの設定が正しいかどうかしか確認できません。また、一度にチェックする範囲が広くなってしまい、見落としが発生することがよくあります。

例えば、次のような構成を作成しているとします。最終目的は RT1 と RT3 で lo0 を使用して iBGP ネイバーを確立させることです。

f:id:naoki029:20181230160458j:plain
BGP

設定を投入し、BGPの状態を確認してみるとセッションが確立していません。

RT1#show bgp all summary 
For address family: IPv4 Unicast
BGP router identifier 192.168.0.1, local AS number 65001
BGP table version is 1, main routing table version 1

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
192.168.0.3     4        65001       0       0        1    0    0 00:45:09 Idle
RT1#

RT3#show bgp all summary 
For address family: IPv4 Unicast
BGP router identifier 192.168.0.3, local AS number 65001
BGP table version is 1, main routing table version 1

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
192.168.0.1     4        65001       0       0        1    0    0 01:39:14 Idle
RT3#

先に原因を明かしますが、RT1とRT3 の lo 0 が OSPF で広告されていないことが原因です。

この状態からトラブルシューティングを行う際に、どのように進めるべきでしょうか?

まず、どのノードから調査するかという問題がありますが、ここでは RT1 から見ていく場合を考えます。

状態を確認するshow コマンドを使用

前提として、ルーターのあるべき状態とプロトコルの動作に関して十分に理解している必要があります。今回の場合であれば、BGPのネイバーを張るためには、その IP に対して疎通性が必要であるということを理解している必要があります。

(コンフィグをコピペして動かないと言っている場合は、設定しようとしている機能やプロトコルに関して理解が浅い場合が多いです。)

ここでは、被疑箇所として RT1 と RT3 の間で疎通性がないことを疑っています。

RT1のルート情報を確認すると、RT3 の lo0 のアドレスが載ってきていないので、BGPピアとして指定しているノードに対して疎通性がないことがわかります。この後は、RT1 から RT3 の lo0 へ疎通をもたせるにはどうすればいいのか、という観点でトラブルシューティングを進めることができます。

RT1#show ip route
      10.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
C        10.0.0.4/30 is directly connected, GigabitEthernet0/1
L        10.0.0.5/32 is directly connected, GigabitEthernet0/1
O        10.0.0.8/30 [110/2] via 10.0.0.6, 01:00:51, GigabitEthernet0/1
      192.168.0.0/32 is subnetted, 2 subnets
C        192.168.0.1 is directly connected, Loopback0
O        192.168.0.2 [110/2] via 10.0.0.6, 01:01:47, GigabitEthernet0/1
RT1#

この方法だと、RT3 の IP がルーティングテーブルに存在するかどうかだけをチェックすればいいので、仮に被疑箇所が間違っていたとしても、すぐに気づくことが出来ます。

RT2、または、RT3から確認を始めた場合でも、ルート情報が適切ではないことがわかります。

show run

show run のみでトラシューを行おうとするとどうなるでしょうか。

RT1の config は以下のようになっています。

RT1

--- snip---

interface Loopback0
 description Loopback
 ip address 192.168.0.1 255.255.255.255
!
interface GigabitEthernet0/1
 description to iosv-2
 ip address 10.0.0.5 255.255.255.252
 ip ospf network point-to-point
 ip ospf cost 1
!
router ospf 1
 passive-interface Loopback0
 network 10.0.0.4 0.0.0.3 area 0
!
router bgp 65001
 bgp log-neighbor-changes
 neighbor 192.168.0.3 remote-as 65001
 neighbor 192.168.0.3 update-source Loopback0
!
---snip---

BGP のconfig は間違っていないので、lo0 を広告していない OSPF の設定ミスに気づく必要があります。今回の構成だと機器台数が少ないので config は短く、ミスに気づくのは簡単です。しかし、ネットワークを構成する機器の台数多くなればなるほど、1台あたりの config は長く複雑になり、show run だけで原因を見つけることは難しくなります。