BGPよくある構成の冗長・経路制御について(Local Preference)
はじめに
前回、他組織と接続するときにBGPを使うことが多い理由について説明しました。今回はエンタープライズ系ネットワークにおける他組織と接続する際によく使われるBGPの冗長方法と経路制御について実機を使ってご紹介します。
早速、今回の環境から説明します。
環境について
- BGPルータはCiscoのCSR1000vを使用します。
- 下図の両端にN9Kv(Cisco Nexus9000v)が存在しますが、通信テスト用にクライアントとして配置しているだけとなり、BGPの設計に関連する訳ではありません。
- WANを冗長回線とした構成です。WANには広域イーサネットを想定していますが、インターネット越しにGRE over IPsecという技術を使いVPNトンネルの中でBGPを行うことも可能です。※GRE over IPsec+BGPは今後コンフィグ紹介等しようと思います。
- 自組織のASを111、他組織のASを222とします。
- BGPルータの構成に渡りセグメント(Vlan111や222の箇所)を設けます。BGPの構成において渡りは必須ではありませんが今回設けました。
- 他組織側のBGP設計はシンプルに最低限の設定とします。あくまで自組織のBGPルータで〇〇設定を行うと、他組織のBGPルータでこうなる、という形で紹介します。
- Active/Standbyの構成とします。ここでいうActive/Standbyというのは回線のことです。(Vlan10とVlan20)
ホスト名 | 用途 | 機種、バージョン |
---|---|---|
CSR1000v-01 | 自組織のBGPルータ(Active) | 03.16.06.S |
CSR1000v-02 | 自組織のBGPルータ(Standby) | 03.16.06.S |
CSR1000v-03 | 他組織のBGPルータ(Active) | 03.16.06.S |
CSR1000v-04 | 他組織のBGPルータ(Standby) | 03.16.06.S |
BGPの設計で考えること
BGPを設計するうえで重要なことは「行き」と「戻り」のルーティングをどういったBGPパス属性で設計するかと言う点です。以降で詳細な説明をしますが、その前に本記事で取り上げるベースとなるBGPコンフィグを紹介します。
まずは自組織のAS111のBGPルータから。
hostname CSR1000v-01
<省略>
router bgp 111
bgp log-neighbor-changes
network 66.0.0.0 mask 255.255.255.0
network 77.0.0.0 mask 255.255.255.0
timers bgp 3 9
neighbor 10.10.0.2 remote-as 222
neighbor 10.10.0.2 soft-reconfiguration inbound
neighbor 10.111.0.2 remote-as 111
neighbor 10.111.0.2 next-hop-self
neighbor 10.111.0.2 soft-reconfiguration inbound
!
<省略>
ip route 66.0.0.0 255.255.255.0 192.168.11.1
ip route 77.0.0.0 255.255.255.0 192.168.11.1
hostname CSR1000v-02
<省略>
router bgp 111
bgp log-neighbor-changes
network 66.0.0.0 mask 255.255.255.0
network 77.0.0.0 mask 255.255.255.0
timers bgp 3 9
neighbor 10.20.0.2 remote-as 222
neighbor 10.20.0.2 soft-reconfiguration inbound
neighbor 10.111.0.1 remote-as 111
neighbor 10.111.0.1 next-hop-self
neighbor 10.111.0.1 soft-reconfiguration inbound
!
<省略>
ip route 66.0.0.0 255.255.255.0 192.168.11.1
ip route 77.0.0.0 255.255.255.0 192.168.11.1
次に他組織のAS222のBGPルータ。
hostname CSR1000v-03
<省略>
router bgp 222
bgp log-neighbor-changes
network 88.0.0.0 mask 255.255.255.0
network 99.0.0.0 mask 255.255.255.0
timers bgp 3 9
neighbor 10.10.0.1 remote-as 111
neighbor 10.10.0.1 soft-reconfiguration inbound
neighbor 10.222.0.2 remote-as 222
neighbor 10.222.0.2 next-hop-self
neighbor 10.222.0.2 soft-reconfiguration inbound
!
<省略>
ip route 88.0.0.0 255.255.255.0 192.168.22.1
ip route 99.0.0.0 255.255.255.0 192.168.22.1!
hostname CSR1000v-04
<省略>
router bgp 222
bgp log-neighbor-changes
network 88.0.0.0 mask 255.255.255.0
network 99.0.0.0 mask 255.255.255.0
timers bgp 3 9
neighbor 10.20.0.1 remote-as 111
neighbor 10.20.0.1 soft-reconfiguration inbound
neighbor 10.222.0.1 remote-as 222
neighbor 10.222.0.1 next-hop-self
neighbor 10.222.0.1 soft-reconfiguration inbound
!
<省略>
ip route 88.0.0.0 255.255.255.0 192.168.22.1
ip route 99.0.0.0 255.255.255.0 192.168.22.1
いたってシンプルなBGPコンフィグです。
行きの経路(Vlan66/77→Vlan88/99)
まず行きの経路から考えてみます。AS111のCSR1000v-01/02は、AS222のCSR1000v-03/04から広報してくるVlan88/99のプレフィックス(ルート情報)を受信しどう経路制御するかです。今回はActive/Standbyの冗長構成ですが、まずは特別な処理はせずそのまま受信した場合を確認してみます。
CSR1000v-01#show ip bgp
<省略>
Network Next Hop Metric LocPrf Weight Path
* i 66.0.0.0/24 10.111.0.2 0 100 0 i
*> 192.168.11.1 0 32768 i
* i 77.0.0.0/24 10.111.0.2 0 100 0 i
*> 192.168.11.1 0 32768 i
* i 88.0.0.0/24 10.111.0.2 0 100 0 222 i
*> 10.10.0.2 0 0 222 i
* i 99.0.0.0/24 10.111.0.2 0 100 0 222 i
*> 10.10.0.2 0 0 222 i
CSR1000v-01#
CSR1000v-01#show ip route
<省略>
88.0.0.0/24 is subnetted, 1 subnets
B 88.0.0.0 [20/0] via 10.10.0.2, 00:58:16
99.0.0.0/24 is subnetted, 1 subnets
B 99.0.0.0 [20/0] via 10.10.0.2, 00:58:16
<省略>
CSR1000v-01#
CSR1000v-02#show ip bgp
<省略>
Network Next Hop Metric LocPrf Weight Path
* i 66.0.0.0/24 10.111.0.1 0 100 0 i
*> 192.168.11.1 0 32768 i
* i 77.0.0.0/24 10.111.0.1 0 100 0 i
*> 192.168.11.1 0 32768 i
* i 88.0.0.0/24 10.111.0.1 0 100 0 222 i
*> 10.20.0.2 0 0 222 i
* i 99.0.0.0/24 10.111.0.1 0 100 0 222 i
*> 10.20.0.2 0 0 222 i
CSR1000v-02#
CSR1000v-02#show ip route
<省略>
88.0.0.0/24 is subnetted, 1 subnets
B 88.0.0.0 [20/0] via 10.20.0.2, 00:04:09
99.0.0.0/24 is subnetted, 1 subnets
B 99.0.0.0 [20/0] via 10.20.0.2, 00:04:09
<省略>
CSR1000v-02#
特別なルート制御をしていない場合はeBGPの先となるCSR1000v-03、CSR1000v-04をベストパスとします。(ベストパスはshow ip bgpの”>”が付いているNext Hop)
この場合、LAN側のN9Kv-V9-01がCSR1000v-01/02のHSRP VIPにスタティックルートでNexthopを向けているので、LAN側から発生したトラフィックはCSR1000v-01が着信し、CSR1000v-01はCSR1000v-03に転送します。つまり、何もせずともVlan10のActive回線を通ることになります。
しかし、CSR1000v-01のLAN側インタフェースに障害が発生し、HSRP VIPがCSR1000v-02に遷移した場合、この場合はVlan20の回線を通ってしまうことになります。
StandbyのVlan20のルートでも問題はありませんが、今回はActive側の回線が生きている以上極力Vlan10を通すこととします。その場合、Local Preferenceというパス属性を使い、CSR1000v-02から見たVlan88,99のルートのNexthopをeBGPのCSR1000v-04ではなく、常時iBGPのCSR1000v-01にすることで可能となります。
Local Preferenceで制御
Local Preferenceの使い方を二つ紹介します。一つ目はCSR1000v-01がVlan88/99宛てのルートのLocalPreference値(以下、LP値)を高く付けCSR1000v-02に広報させる方法。二つ目はCSR1000v-02自身がVlan88/99のルートに対して高いLP値を付け優先させる方法。
まず、一つ目のCSR1000v-01がVlan88/99宛てのルートのLP値を高く付けCSR1000v-02に広報させる方法をご紹介します。
一つ目:Vlan88/99のルートをLP値200という値にして、CSR1000v-02へOUTで広報します。
CSR1000v-01#configure terminal
ip prefix-list PL seq 5 permit 88.0.0.0/24
ip prefix-list PL seq 10 permit 99.0.0.0/24
route-map RM-LP permit 10
match ip address prefix-list PL
set local-preference 200
!
route-map RM-LP permit 20
router bgp 111
neighbor 10.111.0.2 route-map RM-LP out
Vlan88/99宛てのルート情報の詳細を確認してみます。まず、上記の設定前はCSR1000v-01から受け取っているルートのLP値100となっています(12行目と26行目)。そして設定後はLP値が200になっています(51行目、63行目)。
LP値は高い方が優先されるため、CSR1000v-04から受け取っているルートよりLP値が高くなり、ルーティングとしてはCSR1000v-01の10.111.0.1に向いたことが確認できます。(CSR1000v-04から受け取っているルートのLP値は46行目と58行目)
■Local Preferenceの設定前---------------------------------------------------------
CSR1000v-02#show ip bgp 88.0.0.0/24
<省略>
Refresh Epoch 1
222, (received & used)
10.20.0.2 from 10.20.0.2 (192.168.22.252)
Origin IGP, metric 0, localpref 100, valid, external, best
rx pathid: 0, tx pathid: 0x0
Refresh Epoch 1
222, (received & used)
10.111.0.1 from 10.111.0.1 (192.168.11.253)
Origin IGP, metric 0, localpref 100, valid, internal
rx pathid: 0, tx pathid: 0
CSR1000v-02#
CSR1000v-02#show ip bgp 99.0.0.0/24
<省略>
Refresh Epoch 1
222, (received & used)
10.20.0.2 from 10.20.0.2 (192.168.22.252)
Origin IGP, metric 0, localpref 100, valid, external, best
rx pathid: 0, tx pathid: 0x0
Refresh Epoch 1
222, (received & used)
10.111.0.1 from 10.111.0.1 (192.168.11.253)
Origin IGP, metric 0, localpref 100, valid, internal
rx pathid: 0, tx pathid: 0
CSR1000v-02#
CSR1000v-02#show ip route
<省略>
88.0.0.0/24 is subnetted, 1 subnets
B 88.0.0.0 [20/0] via 10.20.0.2, 00:02:21
99.0.0.0/24 is subnetted, 1 subnets
B 99.0.0.0 [20/0] via 10.20.0.2, 00:02:21
<省略>
CSR1000v-02#
■Local Preferenceの設定後---------------------------------------------------------
CSR1000v-02#show ip bgp 88.0.0.0/24
<省略>
Refresh Epoch 1
222, (received & used)
10.20.0.2 from 10.20.0.2 (192.168.22.252)
Origin IGP, metric 0, localpref 100, valid, external
rx pathid: 0, tx pathid: 0
Refresh Epoch 1
222, (received & used)
10.111.0.1 from 10.111.0.1 (192.168.11.253)
Origin IGP, metric 0, localpref 200, valid, internal, best
rx pathid: 0, tx pathid: 0x0
CSR1000v-02#show ip bgp 99.0.0.0/24
<省略>
Refresh Epoch 1
222, (received & used)
10.20.0.2 from 10.20.0.2 (192.168.22.252)
Origin IGP, metric 0, localpref 100, valid, external
rx pathid: 0, tx pathid: 0
Refresh Epoch 1
222, (received & used)
10.111.0.1 from 10.111.0.1 (192.168.11.253)
Origin IGP, metric 0, localpref 200, valid, internal, best
rx pathid: 0, tx pathid: 0x0
CSR1000v-02#
CSR1000v-02#show ip route
<省略>
88.0.0.0/24 is subnetted, 1 subnets
B 88.0.0.0 [200/0] via 10.111.0.1, 00:00:52
99.0.0.0/24 is subnetted, 1 subnets
B 99.0.0.0 [200/0] via 10.111.0.1, 00:00:52
<省略>
CSR1000v-02#
続いて、二つ目のCSR1000v-02自身がVlan88/99のルートに対して高いLP値を付け優先させる方法です。※下記は、上記のCSR1000v-01で行ったLocal Preference設定を削除したうえで実施しています。
二つ目:指定したルートに対してLP値200を設定し、CSR1000v-01から広報されてきたルートにINでLP値を付けます。
CSR1000v-02#configure terminal
ip prefix-list PL seq 5 permit 88.0.0.0/24
ip prefix-list PL seq 10 permit 99.0.0.0/24
route-map RM-LP permit 10
match ip address prefix-list PL
set local-preference 200
!
route-map RM-LP permit 20
router bgp 111
neighbor 10.111.0.1 route-map RM-LP in
ステータスを確認します。CSR1000v-01から受け取っているルートにLP値200が付いていることが確認できます。(12行目と29行目)。また、ルーティングとしてもNexthopがCSR1000v-01の10.111.0.1に向いていることが確認できます。
■Local Preferenceの設定後---------------------------------------------------------
CSR1000v-02#show ip bgp 88.0.0.0/24
<省略>
Refresh Epoch 1
222, (received & used)
10.20.0.2 from 10.20.0.2 (192.168.22.252)
Origin IGP, metric 0, localpref 100, valid, external
rx pathid: 0, tx pathid: 0
Refresh Epoch 1
222
10.111.0.1 from 10.111.0.1 (192.168.11.253)
Origin IGP, metric 0, localpref 200, valid, internal, best
rx pathid: 0, tx pathid: 0x0
Refresh Epoch 1
222, (received-only)
10.111.0.1 from 10.111.0.1 (192.168.11.253)
Origin IGP, metric 0, localpref 100, valid, internal
rx pathid: 0, tx pathid: 0
CSR1000v-02#
<省略>
Refresh Epoch 1
222, (received & used)
10.20.0.2 from 10.20.0.2 (192.168.22.252)
Origin IGP, metric 0, localpref 100, valid, external
rx pathid: 0, tx pathid: 0
Refresh Epoch 1
222
10.111.0.1 from 10.111.0.1 (192.168.11.253)
Origin IGP, metric 0, localpref 200, valid, internal, best
rx pathid: 0, tx pathid: 0x0
Refresh Epoch 1
222, (received-only)
10.111.0.1 from 10.111.0.1 (192.168.11.253)
Origin IGP, metric 0, localpref 100, valid, internal
rx pathid: 0, tx pathid: 0
CSR1000v-02#
CSR1000v-02#show ip route
<省略>
88.0.0.0/24 is subnetted, 1 subnets
B 88.0.0.0 [200/0] via 10.111.0.1, 00:02:21
99.0.0.0/24 is subnetted, 1 subnets
B 99.0.0.0 [200/0] via 10.111.0.1, 00:02:21
<省略>
CSR1000v-02#
このように、Local Preferenceの設定によって「行き」つまり送信側の経路制御を可能とします。
以上で「行き」の経路制御 Local Preferenceの紹介を終えます。次回は戻りの制御についてAS-PATHプリペンドとMEDの使用例を紹介します。
ディスカッション
コメント一覧
まだ、コメントがありません