LoginSignup
0
0

BGPでジェンガしてみる1(構築編)

Last updated at Posted at 2023-09-18

概要

BGPの設定コマンドについての検証です。
BGPとは、ネットワークの自律システム(AS)内外を接続するプロトコルです。
自律システム内か外かで必要な設定が変わってきますが、コマンドの使いどころを理解していないとうまく設定できなくて悩んでしまいます。

今回、必要な設定と不要だけど影響のない設定を理解するために検証を行いました。
検証にあたっては、基本的な設定を投入して動作することを確認し、不要な設定を削除して最小にしていく方法をとりました。(ジェンガみたい!)

構築編では、できるだけ削らないように基本的な設定を投入していきます。

設定コマンドと用途

コマンド 用途
router bgp ルータプロセスと、ルータが属するAS番号を定義する
remote-as BGPネイバを形成する
ebgp-multihop 直接接続されていない2つのネットワークを接続する
update-source BGP接続の送信元を指定する
next-hop-self ネクストホップを自身のアドレスに設定する

確認コマンドと用途

コマンド 用途
#show ip bgp all summary BGP接続の確認 State/PfxRcd が数字であればOK
#show tcp TCP接続の確認 Connection state is ESTABであればOK
#debug ip bgp all BGP接続のデバッグ
#debug ip tcp transactions TCP接続のデバッグ

参考にしたサイト

構成

image.png

前提

IBGP区間にはIF単位でospfを設定します。
ospfを設定するIF
 R1: Gi0/0, Gi0/1, L0
 R2: Gi0/0, L0
 R3: Gi0/1, L0

Loopback0をospfに参加させる理由は、BGP設定の送信元と宛先としてLoopback0を使用するためです。
BGPで接続するためには、IP到達性が確保されている=#show ip routeにアドレスが表示されている必要があります。

検証でも以下2点がポイントになるかなと思います。
・IP到達性が確保されているか
・TCP接続が確立できているか

設定 とりあえずよく見るコマンドをいれてみる

各ルータにBGP設定コマンドを投入します。
まずはR1,R2,R3,R4,R5すべてに同じ設定を投入してみます。

コマンド
router bgp XX
neighbor A.B.C.D remote-as YY
neighbor A.B.C.D ebgp-multihop 2
neighbor A.B.C.D update-source Loopback0
neighbor A.B.C.D next-hop-self

各区間の設定
省略していますが、IBGP区間はフルメッシュで接続しています。
image.png

各ルータのBGP設定例
【IBGP(Loopback)区間】
例:R1
router bgp 10
bgp log-neighbor-changes
neighbor 2.2.2.2 remote-as 10
neighbor 2.2.2.2 ebgp-multihop 2
neighbor 2.2.2.2 update-source Loopback0
neighbor 2.2.2.2 next-hop-self
neighbor 3.3.3.3 remote-as 10
neighbor 3.3.3.3 ebgp-multihop 2
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self

【EBGP (物理IF-物理IF)区間】
例:R4
router bgp 40
bgp log-neighbor-changes
neighbor 24.0.0.2 remote-as 10
neighbor 24.0.0.2 ebgp-multihop 2
neighbor 24.0.0.2 update-source Loopback0
neighbor 24.0.0.2 next-hop-self

【IBGP(Lo-Lo)区間】
例:R5
router bgp 50
bgp log-neighbor-changes
neighbor 30.0.0.1 remote-as 10
neighbor 30.0.0.1 ebgp-multihop 2
neighbor 30.0.0.1 update-source Loopback0
neighbor 30.0.0.1 next-hop-self

確認

BGP接続できているか確かめます。

IBGP(Loopback)区間は接続できています。
image.png

EBGP(物理IF-物理IF)区間は接続できていません。
image.png

EBGP(Lo-Lo)区間も接続できていません。
image.png

では、各区間の設定を修正していきます。

原因 EBGP(物理IF-物理IF)区間

#debug ip bgp allで接続できない原因を特定します。

出力結果から
・TCB(TCP Connection Block)が使用できない
・状態遷移がActiveで止まってIdleに戻っている
ことがわかります。
ActiveはTCP接続できていない状態なので、TCPに原因がありそうです。

image.png

debug出力をエクセルにコピペして"from"でフィルタしてみます。
Active-Idle-Active-Idle...を繰り返していることがわかります。
image.png

#debug ip tcp transactionsでTCP接続の詳細を確認します。

出力結果から
・Loopback0のIPアドレスに対してリセット(RST)されている
・[0 -> UNKNOWN(0)] ポート番号と宛先IPアドレスが特定できていない
ことがわかります。
Loopback0がなにかしているみたいです。

image.png

#show tcpでも状態を確認します。
TCP送信元のLocal hostがLoopback0のIPアドレスになっています。
image.png

修正 EBGP(物理IF-物理IF)区間

neighborは正しく物理IFを指定しているので、BGP接続の送信元を指定するupdate-sourceの設定が原因です。

update-sourceをLoopback0から物理IFに修正します。
R2(config-router)#neighbor 24.0.0.4 update-source GigabitEthernet0/2
R4(config-router)#neighbor 24.0.0.2 update-source GigabitEthernet0/2

BGP接続できました!
image.png

image.png

ちなみにR2のみ修正した段階でR2側のTCPは確立できていたようです。
TCP確立後にBGPのOPENメッセージを送る"OpenSent"まで遷移してIdleに戻っていました。
image.png

原因 EBGP(Lo-Lo)区間①

次はEBGPのLoopback接続区間です。
#debug ip bgp allで接続できない原因を特定します。

宛先へのルート情報がないことがわかります。
image.png

#show tcpの出力がありません。
image.png

修正 EBGP(Lo-Lo)区間①

原因はR3とR5にIP到達性がないことのようです。

R3とR5にstatic routeを追加します。
R3(config)# ip route 50.0.0.0 255.255.255.0 35.0.0.5
R5(config)# ip route 30.0.0.0 255.255.255.0 35.0.0.3

...がまだBGPはupしません。

原因 EBGP(Lo-Lo)区間②

#debug ip bgp allを確認します。
image.png

EBGP(物理IF-物理IF)と同様で、TCP接続が原因のようです。

#show tcpで状態を確認します。
update-sourceによってLocal hostがLoopback0のアドレスになっています。
image.png

R3-R5のneighborはLoopback0ではなく、Loopback1を設定しています。

例:R5
router bgp 50
bgp log-neighbor-changes
neighbor 30.0.0.1 remote-as 10
neighbor 30.0.0.1 ebgp-multihop 2
neighbor 30.0.0.1 update-source Loopback0
neighbor 30.0.0.1 next-hop-self

image.png

修正 EBGP(Lo-Lo)区間②

update-sourceをLoopback0からLoopback1に修正します。

R3(config-router)#neighbor 50.0.0.1 update-source Loopback1
R5(config-router)#neighbor 30.0.0.1 update-source Loopback1

BGP接続できました!
image.png

まとめ

よく見るコマンド(ebgp, update, next-hop-self)はすべて投入してもBGP接続を確立できます。
ただし、update-sourceのIF指定はいつもL0ではなく、状況に応じて修正してあげる必要があります。
image.png

学んだこと

・TCPが確立できない場合、BGPの状態はActive-Idleを繰り返す
・BGPがうまく設定できない原因がIPかTCPかは#debug ip bgp allで確認できる
 →IPの場合は静かにno route、TCPの場合はBGP状態遷移のどこで止まっているか出力される
・update-sourceは物理IFも指定できる

次回はこの状態から設定を削除して最小にしていきます!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0