シナプス技術者ブログ

シナプスの技術者公式ブログ。インターネットで、鹿児島の毎日を笑顔にします。

BGP経路広報のルーティングポリシーを検証

シナプスの技術部ネットワーク課の福山と申します。

インターネットは世界中のネットワークがTCP/IPというプロトコルで相互接続された巨大なネットワークです(まさにネットワークの「集合体」と言っていいと思います)。

そしてほとんどの場合、いつくかのネットワークを1つの組織がまとめて管理しています。具体的にはシナプスのようなISPやGoogle、Amazonなどが統一したポリシーで運用/管理しています。統一したポリシーで運用されているネットワークをまとめたものをASと呼び、AS同士の相互接続にはBGPというプロトコルが使われます。

AS同士を相互接続する際にBGPで自らのAS(以降"自AS"と表記します)が管理するIPアドレスの情報(以降"経路情報"と表記します)と自AS配下にあるASの経路情報を他ASに伝える(以降"広報"と表記します)わけですが、現在これらの経路情報は比較的紳士協定的にやりとりされており、誤った経路情報を広報してしまうと、インターネット上に混乱が生じます。

もう少し具体的に説明すると本来ASが保有/広報しているIPアドレスの情報を、異なるASが広報してしまうと、それが世界中に伝搬され、インターネット上でやりとりされる情報が意図しないASに吸い寄せられてしまい「インターネットがつながらない」というトラブルになり得ます。 こういったトラブルが起きる原因は単純な設定の誤りであることが多いのですが、時々悪意を持ったものがインターネットに流れる情報を詐取したり遮断するためにやっていることもあります。

よって、これらのトラブルを防ぐためにも意図しない経路広報を防止する必要があり、そのための1つの手段としてルーティングポリシーがあります。 今回、そのルーティングポリシーについて検証してみました。

検証環境

以前、ご紹介した Juniper vLabs でトポロジー「BGP - Multi-AS」の一部を利用して検証しました。

  • Junos OS 21.1R3.11
  • デフォルトで以下のような基本的な設定は投入済みです。
    • インターフェース、IPアドレス
    • IGPとしてOSPF
    • BGP(iBGP、eBGP)
      • vMX1 ~ vMX2 間は iBGP
      • vMX2 ~ vMX4 間と vMX2 ~ vMX5 間は eBGP
  • ルーティングポリシーは未設定

ネットワーク構成とIPアドレスは以下の通りです。

事前設定

  • AS64522は自ASの経路を 192.168.1.0/24 とし、 vMX1から vMX2にiBGPで経路広報し、vMX2から他ASにeBGPで経路広報する
  • AS64533は自ASの経路を 172.16.1.0/24 とし、 vMX4から vMX2にeBGPで経路広報する

vMX1(AS64522)設定内容

set routing-options static route 192.168.1.0/24 discard
set policy-options prefix-list 1 192.168.1.0/24
set policy-options policy-statement ADVERTISE term 1 from prefix-list 1
set policy-options policy-statement ADVERTISE term 1 then accept
set protocols bgp group IBGP neighbor 10.100.100.2 export ADVERTISE

vMX4(AS64533)設定内容

set routing-options static route 172.16.1.0/24 discard
set policy-options prefix-list 1 172.16.1.0/24
set policy-options policy-statement ADVERTISE term 1 from prefix-list 1
set policy-options policy-statement ADVERTISE term 1 then accept
set protocols bgp group to-AS64522 export ADVERTISE

vMX2(AS64522)で vMX5(AS64544)に広報している経路を確認

  • vMX2にはまだルーティングポリシーを設定していないので、デフォルトの動作で 受信した経路を vMX4, vMX5 に広報する
jcluser@vMX2> show route table inet.0 advertising-protocol bgp 10.100.25.2 

inet.0: 18 destinations, 19 routes (18 active, 0 holddown, 0 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
* 172.16.1.0/24           Self                                    64533 I
* 192.168.1.0/24          Self                                    I
  • vMX1から受信した 自AS64522の経路 192.168.1.0/24 を vMX5(AS64544)に広報している
  • vMX4から受信した 他AS64533の経路 172.16.1.0/24 を vMX5(AS64544)に広報している

自AS64522の経路/他AS64533の経路の両方をvMX5(AS64544)に経路広報しているため、自AS64522の経路のみ経路広報するようにルーティングポリシーで制御したいと思います。

ルーティングポリシーでプレフィックスリストによる制御

ルーティングポリシーで指定したプレフィックス(IPアドレス範囲)のみ経路広報を許可するように設定します。

vMX2(AS64522)設定内容

  • prefix-listに自AS64522の経路 192.168.1.0/24 を設定
  • prefix-listの経路のみ広報し、それ以外の経路は広報しないルーティングポリシーを作成
  • 作成したルーティングポリシーをeBGP向けエクスポートポリシーとして適用
set policy-options prefix-list 1 192.168.1.0/24
set policy-options policy-statement ADVERTISE term 1 from prefix-list 1
set policy-options policy-statement ADVERTISE term 1 then accept
set policy-options policy-statement ADVERTISE term 2 then reject
set protocols bgp group to-AS64533 export ADVERTISE
set protocols bgp group to-AS64544 export ADVERTISE

vMX2(AS64522)で vMX5(AS64544)に広報している経路を確認

  • 経路広報を許可しているのは 192.168.1.0/24 のみ
  • vMX1から受信した 自AS64522の経路 192.168.1.0/24 は vMX5(AS64544)に広報している
  • vMX4から受信した 他AS64533の経路 172.16.1.0/24 は vMX5(AS64544)に広報しない
jcluser@vMX2> show route table inet.0 advertising-protocol bgp 10.100.25.2    

inet.0: 18 destinations, 19 routes (18 active, 0 holddown, 0 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
* 192.168.1.0/24          Self                                    I

この場合、以下のような条件で 自AS64522の経路 192.168.1.0/24 を他ASの経路として広報してしまうことがあります。

  • vMX4(AS64533)から 自AS64522の経路と同じ 192.168.1.0/24 を広報される
    • この時点では vMX1(AS64522)から受信した 192.168.1.0/24 がアクティブ経路なので vMX4(AS64533)から受信した 192.168.1.0/24 は広報されない
  • vMX1 と vMX2 の iBGPをシャットダウンする
    • vMX4(AS64533)から受信した 192.168.1.0/24 がアクティブ経路になる
  • vMX4(AS64533)の経路として 192.168.1.0/24 を vMX5(AS64544)に広報してしまう
jcluser@vMX2> show route table inet.0 advertising-protocol bgp 10.100.25.2 

inet.0: 18 destinations, 19 routes (18 active, 0 holddown, 0 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
* 192.168.1.0/24          Self                                    64533 I

このようなことがないように、というよりも、他のASから広報されること自体が本来おかしいので、自AS64522の経路 192.168.1.0/24 が他のASから広報されてきた場合、受信しないように設定します。

vMX2(AS64522)設定内容

  • prefix-listに自AS64522の経路 192.168.1.0/24 を設定
  • prefix-listの経路か、それよりも長いプレフィックスの経路は受信しないルーティングポリシーを作成
  • 作成したルーティングポリシーをeBGP向けエクスポート(送信)ポリシーとして適用
set policy-options prefix-list 1 192.168.1.0/24
set policy-options policy-statement RECEIVE term 1 from prefix-list-filter 1 orlonger
set policy-options policy-statement RECEIVE term 1 then reject
set protocols bgp group to-AS64533 import RECEIVE 
set protocols bgp group to-AS64544 import RECEIVE

ルーティングポリシーでコミュニティによる制御

次は、ルーティングポリシーで指定したコミュニティが付与された経路のみ広報するように設定してみます。

vMX1(AS64522)に設定追加

  • 自ASの経路 192.168.1.0/24 に community(64522:64522)を付与して vMX2へ広報する
set policy-options community AS64522_ORIGIN members 64522:64522                          ←追加
set routing-options static route 192.168.1.0/24 discard
set policy-options prefix-list 1 192.168.1.0/24
set policy-options policy-statement ADVERTISE term 1 from prefix-list 1
set policy-options policy-statement ADVERTISE term 1 then community add AS64522_ORIGIN   ←追加
set policy-options policy-statement ADVERTISE term 1 then accept
set protocols bgp group IBGP neighbor 10.100.100.2 export ADVERTISE

vMX2(AS64522)設定内容

  • communityとして 64522:64522 が付与された経路のみ広報し、それ以外の経路は広報しないルーティングポリシーを作成
  • 作成したルーティングポリシーをeBGP向けエクスポート(送信)ポリシーとして適用
set policy-options community AS64522_ORIGIN members 64522:64522
set policy-options policy-statement ADVERTISE term 1 from community AS64522_ORIGIN
set policy-options policy-statement ADVERTISE term 1 then accept
set policy-options policy-statement ADVERTISE term 2 then reject
set protocols bgp group to-AS64533 export ADVERTISE
set protocols bgp group to-AS64544 export ADVERTISE

この場合、vMX2は以下のような条件に合致すると、他のASから受信した経路をさらに別の他ASに広報してしまうことがあります。

  • vMX4(AS64533)から community(64522:64522)を付与して経路広報される
  • vMX4(AS64533)から受信した経路に community(64522:64522)が付与されているので、その経路を vMX5(AS64544)に広報してしまう
jcluser@vMX2> show route table inet.0 advertising-protocol bgp 10.100.25.2 detail     

inet.0: 18 destinations, 19 routes (18 active, 0 holddown, 0 hidden)
* 172.16.1.0/24 (2 entries, 1 announced)
 BGP group to-AS64544 type External
     Nexthop: Self
     AS path: [64522] 64533 I 
     Communities: 64522:64522

* 192.168.1.0/24 (1 entry, 1 announced)
 BGP group to-AS64544 type External
     Nexthop: Self
     AS path: [64522] I 
     Communities: 64522:64522

このようなことがないように、他のASから受信した経路に community(64522:64522)が付与されていた場合、そのcommunityを削除して受信するように設定します。

vMX2(AS64522)設定内容

  • 受信した経路に community(64522:64522)が付与されていた場合、そのcommunityを削除して受信するルーティングポリシーを作成
  • 作成したルーティングポリシーをeBGP向けインポート(受信)ポリシーとして適用
set policy-options community AS64522_ORIGIN members 64522:64522
set policy-options policy-statement REMOVE_COMMUNITY term 1 then community delete AS64522_ORIGIN
set protocols bgp group to-AS64533 import REMOVE_COMMUNITY 
set protocols bgp group to-AS64544 import REMOVE_COMMUNITY

vMX2(AS64522)で vMX5(AS64544)に広報している経路を確認

  • vMX4(AS64533)から受信した経路に community(64522:64522)が付与されていても、そのcommunityは削除されるので、vMX5(AS64544)に広報されない
  • vMX1から受信した 自AS64522の経路 192.168.1.0/24 には community(64522:64522)が付与されているので、vMX5(AS64544)に広報している
jcluser@vMX2> show route table inet.0 advertising-protocol bgp 10.100.25.2 detail

inet.0: 18 destinations, 18 routes (18 active, 0 holddown, 0 hidden)
* 192.168.1.0/24 (1 entry, 1 announced)
 BGP group to-AS64544 type External
     Nexthop: Self
     AS path: [64522] I 
     Communities: 64522:64522

ルーティングポリシーでASパスによる制御

次は、ルーティングポリシーで指定したASパスの経路のみ広報するように設定してみます。

vMX2(AS64522)設定内容

  • 自ASで生成した経路(BGPで空のASパスを持つ経路)のみ広報し、それ以外の経路は広報しないルーティングポリシーを作成
  • 作成したルーティングポリシーをeBGP向けエクスポート(送信)ポリシーとして適用
set policy-options as-path AS64522_ORIGIN "()"
set policy-options policy-statement ADVERTISE term 1 from protocol bgp
set policy-options policy-statement ADVERTISE term 1 from as-path AS64522_ORIGIN
set policy-options policy-statement ADVERTISE term 1 then accept
set policy-options policy-statement ADVERTISE term 2 then reject
set protocols bgp group to-AS64533 export ADVERTISE
set protocols bgp group to-AS64544 export ADVERTISE

vMX2(AS64522)で vMX5(AS64544)に広報している経路を確認

  • 自ASで生成した経路(BGPで空のASパスを持つ経路)のみ広報している
  • vMX4から受信した AS64533の経路 172.16.1.0/24 には ASパス(64533)が付加されているので、vMX5(AS64544)に広報しない
jcluser@vMX2> show route table inet.0 advertising-protocol bgp 10.100.25.2    

inet.0: 18 destinations, 19 routes (18 active, 0 holddown, 0 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
* 192.168.1.0/24          Self                                    I

まとめ

  • BGP経路広報において、いろいろなルーティングポリシーで経路制御できることを確認することができました。
  • ルーティングポリシーでどのように経路制御されるか十分に検証する必要があると思いました。
  • これらのルーティングポリシーは、自ASがインターネット上でどういう立ち位置であるかによって考え方も違ってくるので、それらに応じて設計する必要があると思いました。