BGPよくある構成の冗長・経路制御について(Local Preference)

BGPBGP

はじめに

前回、他組織と接続するときに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の使用例を紹介します。

BGPBGP