JANOG55 NETCON 問題解説(現地問題7)

BGP

京都で開催された JANOG55 盛況でしたね。参加者が 4000 人超えるとかすごいことになってるなって思いました。

さて、今回私は NETCON 実行委員として参加して、オンライン問題1問 / 現地問題3問を作成しました。ここでは現地問題7について解説していこうと思います。

問題

問題はこう言うものでした。

問題文

RT-01 と RT-02 で eBGP 設定をしてあるというが、ピアが確立していない。RT-01(55.55.1.1) と RT-02(55.55.2.2) のピアを確立させてください。なお、RT-02 を操作しての情報収集はできない。

達成条件

以下のようにピアが確立し、プレフィックスを受信できること。

RT-01#sh bg ipv4 uni sum | b Neigh
Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
55.55.2.2       4        65002       5       5        1    0    0 00:00:33        1

制約

  • 既存の設定は削除、変更してはならない。
  • セカンダリアドレスを追加するなどのアドレス割り当てを変更することは許可されない。
  • 新たなインターフェース、ルーティングプロトコルの追加は許可されない。

事象の確認

とりあえずピアが上がっていないと言うことなので、確認してみます。

RT-01#show bgp ipv4 unicast summary
BGP router identifier 55.55.1.1, local AS number 65001
BGP table version is 1, main routing table version 1
2 network entries using 288 bytes of memory
2 path entries using 176 bytes of memory
1/0 BGP path/bestpath attribute entries using 160 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 624 total bytes of memory
BGP activity 2/0 prefixes, 2/0 paths, scan interval 60 secs

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
55.55.2.2       4        65002       0       0        1    0    0 never    Idle

確かに上がってないですね。

原因調査

疎通性の問題?

RT-01#ping 55.55.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 55.55.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms

飛びますねぇ…と言うことはレイヤ3(IP) の問題ではない?BGP はそれより上のレイヤ4で動作するので、BGP の観点で確認してみます。ネイバとのセッションはどうなってる?

RT-01#show bgp ipv4 unicast neighbors 55.55.2.2
BGP neighbor is 55.55.2.2,  remote AS 65002, external link
  BGP version 4, remote router ID 0.0.0.0
(略)
  Route to peer address reachability Up: 1; Down: 0
    Last notification 00:05:34
  Connections established 0; dropped 0
  Last reset never
  External BGP neighbor not directly connected.
  External BGP neighbor configured for connected checks (single-hop no-disable-connected-check)
  Interface associated: (none) (peering address NOT in same link)
  Transport(tcp) path-mtu-discovery is enabled
  Graceful-Restart is disabled
  SSO is disabled
  No active TCP connection

reachability Up: 1 ってまぁ ping 飛んでるしなぁ…ん?

External BGP neighbor not directly connected.

な ん で す と ! ?

そういえば、ping 飛ぶかしかみてませんでした。自分の送信元アドレスはどうなってるんだ?

RT-01#show running-config | section router bgp
router bgp 65001
 bgp router-id 55.55.1.1
 bgp log-neighbor-changes
 redistribute connected
 neighbor 55.55.2.2 remote-as 65002

特に指定はないな…じゃあインターフェースにはどんなアドレスが設定されてるんだ?

RT-01#show ip interface brief | exclude down
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet1              unassigned      YES unset  up                    up
GigabitEthernet0           55.55.1.1       YES TFTP   up                    up
Vlan1                      55.55.10.1      YES TFTP   up                    up
Vlan2                      55.55.20.1      YES TFTP   up                    up
Vlan3                      55.55.30.1      YES TFTP   up                    up

ネイバのアドレスが 55.55.2.2 だから、なんか上位 2 オクテットが揃ってるし /16 とか?

RT-01#show running-config | include ip address 55
 ip address 55.55.1.1 255.255.255.0
 ip address 55.55.10.1 255.255.255.0
 ip address 55.55.20.1 255.255.255.0
 ip address 55.55.30.1 255.255.255.0

/24…だとどれも直接通信できないじゃん!なんで!?ルータ2台直結でしょ?ping は飛んだよ?そんなバカな。

RT-01#traceroute 55.55.2.2
Type escape sequence to abort.
Tracing the route to 55.55.2.2
VRF info: (vrf in name/id, vrf out name/id)
  1 55.55.10.2 0 msec 0 msec 4 msec
  2 55.55.20.1 0 msec 0 msec 0 msec
  3 55.55.30.2 0 msec *  0 msec

…はああぁ!?

とにかく、ネイバは複数ホップ先にいること、IP レベルの疎通性はあることが確認できました。

対処

なんかモヤっとするけど、これか?

RT-01#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
RT-01(config)#router bgp 65001
RT-01(config-router)#neighbor 55.55.2.2 ebgp-multihop
RT-01(config-router)#end
RT-01#
*Jan 29 15:44:23.079: %SYS-5-CONFIG_I: Configured from console by console
*Jan 29 15:44:28.207: %BGP-5-ADJCHANGE: neighbor 55.55.2.2 Up

上がった…

RT-01#sh bg ipv4 uni sum | b Neigh
Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
55.55.2.2       4        65002       9       6        1    0    0 00:01:33        1

できた…

解説

この問題の作成にあたっては大きな2つのテーマがありました。

  • show running-config で回答させない
  • 目に見えるものだけにとらわれない

1つ目は、NETCON が「ネットワークのトラブルシューティングコンテスト」であることから、「トラブルシューティングをやってほしい」と言う思いからです。

通常トラブルシューティングの際は ping / traceroute / 各種 show コマンドの出力 / ログ確認が主体になるはずですが、全ての装置のコンフィグが確認できる場面では全体把握を優先して show run を叩いてしまいがちです。それも悪くはないのですが、例えば運用中の装置の障害の場合は「何も設定変更していないのに障害が発生」するわけですから、トラブルシューティング目的とはいえ稼働中装置のコンフィグを改めて見ることは稀でしょう。また、対向装置が他社装置の場合はコンフィグを見せてもらえる保証はないので、限られた装置からの情報でなんとかするしかない場面は多々あると思います。
と言うことで、いきなり与えられたトラブルシューティングの場面でもいつも通りの流れで情報収集してその中から得られた情報で妥当な対処策を考える、と言うことに挑戦していただこうというのが狙いでした。

2つ目は「先入観にとらわれて視野を狭めることがないように」と言う思いからです。私もよくやるのですが、「あーこれだったらいつものあれでしょ」のように断片的な情報からパッと原因(と思われるもの)を特定し、その証拠を固めようと情報収集してみたら「あれ、これ違うぞ…やり直しだ」となり、そうするとドツボにハマって別の観点に切り替えるのに時間がかかってしまったりと言うことがあります。その反省をこの問題に込めてみました。

この問題の構成は、物理的には1対1になっているのですが、前述の調査の通りマルチホップになっています。これは実は VRF(Virtual Routing and Forwarding) という機能を使って、仮想的なルータを間に入れているのです。レイヤ3 の論理構成図(アドレスなし、各ホップの矢印がメイン)的にはこのようになっています。

皆さんのところでも物理構成図と論理構成図は別々で、しかも物理ケーブルの本数よりも論理的なパスの方が多かったりしませんか?1本のケーブル内を複数の論理的なリンクで利用しているなど、見た目と実際の通信経路が異なるといったことはご経験があると思います。今回は2台のルータを直結している、しかも ping は通ると言うことで「まさかそんなマルチホップになってるわけないよね」と言う先入観が邪魔してしまったのではないでしょうか。

コンフィグも含め、見えているものだけで構成を想像するだけではなく、実際にどのようになっているのかを確認してその想像をさらに補強すると良いのかなと思っています。

コンフィグ

さぁではコンフィグです。現地問題では確認できなかった RT-02 のコンフィグもここで公開します。

RT-01

version 15.7
!
hostname RT-01
!
vrf definition 23
 !
 address-family ipv4
 exit-address-family
!
vlan 2,3
!
no ip domain lookkup
!
interface FastEthernet1
 switchport mode trunk
 no ip address
!
interface GigabitEthernet0
 ip address 55.55.1.1 255.255.255.0
 no shutdown
!
interface Vlan1
 ip address 55.55.10.1 255.255.255.0
 ip router isis janog55
!
interface Vlan2
 vrf forwarding 23
 ip address 55.55.20.1 255.255.255.0
 ip router isis janog55-23
!
interface Vlan3
 vrf forwarding 23
 ip address 55.55.30.1 255.255.255.0
 ip router isis janog55-23
!
router ospf 23 vrf 23
 network 0.0.0.0 255.255.255.255 area 0
!
router isis janog55
 net 49.0055.0000.0001.00
 passive-interface GigabitEthernet0
!
router isis janog55-23
 vrf 23
 net 49.0055.0023.0001.00
!
router bgp 65001
 bgp router-id 55.55.1.1
 bgp log-neighbor-changes
 redistribute connected
 neighbor 55.55.2.2 remote-as 65002
!
end

RT-02

version 15.7
!
hostname RT-02
!
vrf definition 12
 !
 address-family ipv4
 exit-address-family
!
vrf definition 30
 rd 65002:30
 !
 address-family ipv4
 exit-address-family
!
enable password **********
!
vlan 2,3
!
no ip domain lookup
!
interface FastEthernet1
 switchport mode trunk
 no ip address
!
interface GigabitEthernet0
 vrf forwarding 30
 ip address 55.55.2.2 255.255.255.0
 no shutdown
!
interface Vlan1
 vrf forwarding 12
 ip address 55.55.10.2 255.255.255.0
 ip router isis janog55-12
!
interface Vlan2
 vrf forwarding 12
 ip address 55.55.20.2 255.255.255.0
 ip router isis janog55-12
!
interface Vlan3
 vrf forwarding 30
 ip address 55.55.30.2 255.255.255.0
 ip router isis janog55-30
!
router isis janog55-12
 vrf 12
 net 49.0055.0012.0002.00
!
router isis janog55-30
 vrf 30
 net 49.0055.0030.0002.00
 passive-interface GigabitEthernet0
!
router bgp 65002
 bgp router-id 55.55.2.2
 bgp log-neighbor-changes
 neighbor 55.55.1.1 remote-as 65001
 !
 address-family ipv4 vrf 30
  network 55.55.2.0 mask 255.255.255.0
  neighbor 55.55.1.1 remote-as 65001
  neighbor 55.55.1.1 ebgp-multihop 255
  neighbor 55.55.1.1 update-source GigabitEthernet0
  neighbor 55.55.1.1 activate
 exit-address-family
!
line con 0
 privilege level 0
!
end

補足

RT-01 の vrf 23 に対応するプロトコルが OSPF と IS-IS の2つあるのはなぜ?と言う疑問が浮かぶかと思いますが、これは私のミスで OSPF を入れっぱなしにしてしまっていただけなのです。「あっ、消し忘れてる…まぁでもマルチホップでの eBGP ピアリングには直接影響しないからいいか」と言う私の横着のせいで惑わされてしまった挑戦者の方には大変申し訳ない思いです。

コメント

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