IP / 経路制御(BGP)


プロトコル概要
AS(Autonomous System)
プレフィックス
BGPスピーカー
BGPセッション
BGPメッセージ
パス属性
基本設定
IPv4/IPv6の違いと注意事項
IPv4環境
IPv6環境
IPv4/IPv6混在環境
設定項目詳細
経路選択プロセス
経路フィルタリングとポリシー設定
iBGPフルメッシュの回避(IPv4のみ)
ルートリフレクション(IPv4のみ)
ASコンフェデレーション(IPv4のみ)
その他の機能
TCP MD5認証
プライベートASフィルター(IPv4のみ)
ピアグループ(ピアテンプレート)
BGPネクストホップトリガー
設定や状態の確認


経路制御プロトコルBGP(Border Gateway Protocol)について解説します。

BGPはISPなどのネットワーク運用組織(経路制御ドメインまたは自律システム(AS)と呼びます)間で経路情報の交換を行うために開発されたプロトコルです。BGPは現在のインターネットを支える基幹的な経路制御プロトコルです。

本製品のBGPはマルチプロトコル拡張(Multiprotocol Extensions)をサポートしており、IPv4だけでなく、IPv6のユニキャスト経路制御(BGP4+)にも対応しています。

ここでは、IPv4/IPv6におけるBGPの概要と設定手順について解説します。なお、BGP経路のフィルタリングやポリシー設定については「IP」の「経路制御(フィルタリング)」をご覧ください。

Note
本解説編は「IP」の章ですが、本製品のBGPはIPv4/IPv6両対応として実装されているため、ここではIPv6におけるBGPの使用方法についても説明しています。
Note
IPv4だけに対応したオリジナルのBGPを「BGP」または「BGP4」、マルチプロトコル拡張によってIPv6に対応したBGPを「BGP+」または「BGP4+」と言い表すことがありますが、本マニュアルでは原則として「BGP/BGP+」という呼び分けをせずに、「BGP/BGP+」の総称として「BGP」を用いています。なお、IPv4、IPv6のそれぞれに特化した話題は、適宜「IPv4環境における~」、「IPv6 BGPピアに対して~」のように対象を明記しています。
Note
本製品のIPv6ホスト機能はつねに有効なため、インターフェースにIPv6アドレスを設定するだけでIPv6ホストとしての動作が可能です。ただし、IPv6パケットの転送機能(IPv6ルーティング)は初期設定で無効なため、IPv6ルーターとして動作させる場合は同機能の有効化(ipv6 forwardingコマンド)が必要です。詳しくは「IPv6」/「一般設定」をご覧ください。

プロトコル概要

BGPは、インターネットに代表される相互接続型ネットワークにおいて、ASと呼ばれる組織(ISPや企業など)間で経路情報をやりとりするために開発された経路制御プロトコルです。現在使われているBGPバージョン4(BGP4)は基本仕様がRFC1771で規定されており、その他運用上の詳細や拡張機能の仕様などが多数のRFCで規定されています。

同じ経路制御プロトコルでも、RIPやOSPFは組織内のトラフィックを配送するために使用されるため、IGP(Interior Gateway Protocol)と呼ばれるのに対し、BGPは組織間でトラフィックを配送するために使用されるため、EGP(Exterior Gateway Protocol)と呼ばれます。ただし、後述するようにBGPはAS内(組織内)での経路制御にも使用でき、実際そのような形に限定した使い方もされています。

アルゴリズム的に見ると、BGPはディスタンスベクターアルゴリズム(パスベクター)を使用した比較的シンプルな設計になっています。ただし、他組織との関係(契約など)に応じた柔軟な配送制御ができるよう、各ASにおいて経路情報にさまざまな情報(「属性」と呼びます)を付加して、各組織のポリシーに基づくルーティングが可能になっています。

AS(Autonomous System)

BGPは組織間で経路情報を交換するEGP(Exterior Gateway Protocol)です。

ここでいう「組織」は、より正確には「AS(Autonomous System = 自律システム)」と呼ぶべきものです。BGPでは、RIPやOSPFでいうASと比べ、若干その意味が拡張されています。すなわち、「1つの経路制御プロトコルとメトリックを使って経路情報を交換しあっているルーターの集まり」という旧来の定義ではなく、「外部から見たときに、首尾一貫した経路制御ポリシーを持つように見えるルーターの集合(ネットワーク)。内部では複数の経路制御プロトコルやメトリックを使用していてもよい」という意味でASという言葉を使っています。ASは通常同一組織の管理下に置かれており、経路制御ドメインなどと呼ばれることもあります。

ASは1~4294967295の番号(ASN = AS番号)によって識別されます。AS番号はICANN(Internet Corporation for Assigned Names and Numbers)が管理していますが、64512~65535はプライベートAS番号として予約されており、各組織内で自由に使用できます。ただし、プライベートAS番号は絶対にインターネット上に流してはなりません。

ASの種類

ASは他ASとの接続形態やトラフィックの配送ポリシーによって次のように分類できます。
名称
説明
スタブAS(Stub AS) 1つのASとだけ1点で接続しているAS。自AS宛てのトラフィックだけを受け入れる。
マルチホームAS(Multihomed AS) 1つのASと複数点で接続している、あるいは、複数のASと接続しているASのうち、自AS宛てのトラフィックだけを受け入れ、他AS宛てのトラフィックは通過させないもの
トランジットAS(Transit AS) 複数のASと接続しており、自AS宛てのトラフィックだけでなく、他AS宛てのトラフィックも(ポリシーに応じて)通過を許可するAS

ASとトラフィック

AS間の関係を考慮した場合、トラフィックは次の2つに分類して考えることができます。


また、BGPでは、トラフィックの配送ポリシーを表すときに「トランジット」「非トランジット」という言葉が使われます。この場合それぞれの意味は次のとおりです。


BGPの基本は、自AS内のプレフィックスを他ASに通知することで自AS宛てのトラフィックを受け取れるようにすること、および、他ASから経路を学習することで他AS宛てにトラフィックを送信できるようにすることです。

また、トランジットASの場合は、特定のトランジットトラフィックだけが自ASを通過できるよう、他ASに通知する経路情報を操作することも重要になります。BGPには、このようなポリシーを実施するために必要な機能が備えられています。

プレフィックス

プレフィックスとは、IPv4/IPv6ネットワーク(IPv4/IPv6アドレスの範囲)をアドレスとネットワーク部の長さの組で表したものです。次に表記例を挙げます。


IPv4における2つの例は同じプレフィックス(IPアドレス 172.16.10.0~172.16.10.255の範囲)を表しています。最初の例では、ネットワーク部の長さをビット数で表しています(マスク長またはプレフィックス長)。一方2番目の例では、ネットワーク部の長さをIPアドレスと同じ形式のビットマスクで表しています(ネットマスク)。どちらも同じ意味ですが、(文字数が少ないためか)どちらかというと最初の例のほうがよく使われています。

IPv4では、このようにナチュラルサブネットマスク(クラスA、B、C)にこだわらないネットワークの設定方法を「CIDR」(Classless Inter-Domain Routing)と呼びます。CIDRは、限られたIPアドレスを効率的に割り当てるため、また、次に述べる経路集約によってインターネット上の経路数を少なくするために役立っています。

一方、IPv6ではプレフィックス長による表記だけが使われています。
IPv6には、IPv4における「ナチュラルサブネットマスク」や「アドレスクラス」のような概念は最初からありません。

経路集約

経路集約とは、複数のプレフィックスを1つのプレフィックスにまとめることを言います。

たとえば、IPv4において、172.16.0.0/24、172.16.1.0/24、172.16.2.0/24 ~ 172.16.255.0/24という256個のプレフィックスは、172.16.0.0/16という1個のプレフィックスに集約して表すことができます。

また、IPv6においても同様で、たとえば 2001:db8::/48、2001:db8:1::/48、2001:db8:2::/48 ~ 2001:db8:ff::/48 という256個のプレフィックスは、2001:db8::/40という1個のプレフィックスに集約して表すことができます。

経路情報を適切に集約することで、ネットワーク全体に通知される経路エントリーの数を減らし、経路制御にかかる負荷を軽減することができます。

BGPスピーカー

BGPの仕様では、BGP実装機器をBGPスピーカー(BGP speaker)と呼んでいます。BGPスピーカーは通常ルーターですが、経路情報を配布できるのであれば通常のホストであってもかまいません。

BGPスピーカーは、それぞれBGP識別子(BGP Identifier)という値を持ちます。BGP識別子は32ビットの符号なし整数値で、通常IPv4アドレスと同じ形式で表されます(例:10.10.10.1)。IPv4アドレスを持つBGPスピーカーでは自身のIPv4アドレスの1つを使うことが多いのですが、IPv6のみの運用でIPv4アドレスを持たないBGPスピーカーでも、必ずIPv4形式のBGP識別子を設定する必要があります。

BGP識別子はルーターIDとも呼ばれます。

BGPセッション

BGPはTCP上で動作するため、必ず2つのBGPスピーカー間でセッションを張ることになります。互いにセッションを張っているBGPスピーカーを「BGPピア」と呼びます。また、BGPセッションを張って経路情報を交換することを「ピアリングする」などと呼ぶこともあります。

異なるASに属するスピーカー同士のセッションをeBGP(External BGP)、同じASに属するスピーカー同士のセッションをiBGP(Internal BGP)と呼びます。

eBGPはAS間で経路情報を交換するためのセッション、iBGPは他ASから学習した経路情報を同一AS内の他のスピーカーに伝えるためのセッションです。

eBGPとiBGPは原則的に同じ動作ですが、学習した経路を他のBGPピアに再通知するときのルールに違いがあります。BGPスピーカーは、あるiBGPピアから学習した経路を別のiBGPピアに通知することができません。これはAS内における経路情報のループを防ぐためです。iBGPで学習した経路をeBGPピアに通知すること、eBGPピアから学習した経路をiBGPで通知することは問題ありません。

このような制限があるため、BGPスピーカーは同一ASに所属する他のすべてのBGPスピーカーとセッションを張る必要があります。結果としてAS内にはメッシュ状にiBGPセッションが張られることになります。メッシュ構成の煩雑さを避けるための手段として「ルートリフレクション」や「ASコンフェデレーション」があります。

BGPメッセージ

BGPメッセージはTCPを使って送信されます。TCPポート番号は179です。

BGPのメッセージには以下の種類があります。
タイプ
メッセージ名
説明
1 OPEN BGPセッションを開始するためのメッセージ。ルーター間にTCPコネクションが確立した直後に送られる。各ルーターの所属ASを通知しあったり、タイマー値のネゴシエーションを行ったりする
2 UPDATE 経路情報の通知に使うメッセージ。新規プレフィックスの通知や無効になったプレフィックスの取り消し依頼などを相手に通知する
3 NOTIFICATION プロトコル上のエラーを相手に通知するためのメッセージ。BGPセッションの終了通知にも使われる
4 KEEPALIVE BGPセッションが有効であることを確認するためのメッセージ。定期的に送信される
5 ROUTE-REFRESH BGPピアに対し、すべての経路情報を送信しなおすよう要求するためのメッセージ(RFC2918による拡張)

パス属性

BGPでは、UPDATEメッセージで送信される経路情報にさまざまな情報を付加することができます。この付加情報をパス属性と呼びます。属性はポリシールーティングの基礎となる情報を相手に提供します。属性には以下の種類があります。

タイプ
属性名
種類
説明
1 ORIGIN well-known mandatory プレフィックスがどのようにしてBGPに取り込まれたかを示す
2 AS_PATH well-known mandatory プレフィックスがどのような経路をたどって通知されてきたかを示す
3 NEXT_HOP well-known mandatory プレフィックス宛トラフィックのネクストホップアドレスを示す
4 MULTI_EXIT_DISC optional non-transitive 隣接ASと複数点で接続している場合に、特定プレフィックス宛トラフィックのNEXTHOPとしてどちらが適切であるかを(隣接ASに対して)示す一種のメトリック(コスト)。小さいほどコストが低い(優先度が高い)
5 LOCAL_PREF well-known discretionary AS内における(iBGP)経路選択のための優先度。大きいほど優先度が高い
6 ATOMIC_AGGREGATE well-known discretionary プレフィックスが集約されたものであることを示す
7 AGGREGATOR optional transitive プレフィックスを集約したASおよびBGPスピーカーのBGP識別子を示す
8 COMMUNITIES optional transitive コミュニティーを示す(RFC1997による拡張属性)
9 ORIGINATOR_ID optional non-transitive 該当経路を最初に学習したiBGPピアのBGP識別子(ルーターID)を示す。ルートリフレクション使用時に経路情報のループを防ぐために使われる(RFC2796による拡張属性)
10 CLUSTER_LIST optional non-transitive AS内における該当経路のリフレクトパスを示す。ルートリフレクターは、経路を再通知(リフレクト)するときに自身のクラスターID(CLUSTER_ID)を本属性に付加する。ルートリフレクション使用時に経路情報のループを防ぐために使われる(RFC2796による拡張属性)
14 MP_REACH_NLRI optional non-transitive BGPが標準でサポートしているIPv4ユニキャスト以外の到達可能プレフィックスを通知するための拡張属性。本製品はIPv6ユニキャスト経路にのみ対応している
15 MP_UNREACH_NLRI optional non-transitive BGPが標準でサポートしているIPv4ユニキャスト以外の削除対象プレフィックスを通知するための拡張属性。本製品はIPv6ユニキャスト経路にのみ対応している

以下、おもなパス属性について説明します。

Note
以下の例ではIPv4のプレフィックスを使用していますが、IPv6の場合もプレフィックスの長さと形式が異なるだけで各属性の説明には違いがありません。

AS_PATH

AS_PATH(ASパス)とは、あるプレフィックスの経路情報がどのASをどんな順番で経由してきたのかを示すAS番号のリストです。

たとえば、次の図ではAS 10が「10.0.0.0/12」というプレフィックスを他のASに通知しています。AS 10は同プレフィックスのAS_PATH属性に「10」をセットしてAS 20に通知します。

AS 20から見ると、プレフィックス10.0.0.0/12へは、AS 10経由で到達できるという意味になります。次にAS 20は、同プレフィックスのAS_PATH属性に自AS番号を追加し、「20 10」としてAS 30に通知します。

AS 30から見ると、プレフィックス10.0.0.0/12へは、AS 20、AS 10の順番に経由して到達できるという意味になります。


一般的に、AS_PATH属性は「30 20 10」のように表します。「30」「20」「10」はいずれもAS番号を示します。先ほどの例にもあるように、リストの末尾(右端)がプレフィックスの通知元(起源AS)、リストの先頭(左端)が直前のASとなります。

BGPスピーカーは、あるプレフィックスへの経路が複数ある場合、AS_PATHの短い経路を優先します。この仕組みを利用し、自ASに向かうトラフィックを操作することもできます。たとえば、自AS内のプレフィックスを通知するときに、AS_PATH属性に自AS番号を複数回含めることがあります。こうすることにより、AS_PATHを長くし、他ASにとって該当経路の優先度を引き下げさせることができます。

AS_PATHは、経路情報のループを検出するためにも使用されます。BGPスピーカーは、受信した経路情報のうち、AS_PATHに自AS番号を含むものを受け取らずに破棄します。これによりループを防いでいます。

MULTI_EXIT_DISC

MULTI_EXIT_DISC(MED = MULTI-EXIT DISCRIMINATOR)属性は、隣接ASと複数点で接続している場合に、特定プレフィックスへのNEXT HOPとしてどちらの接続点がより望ましいかを通知するために使用する一種のメトリック(コスト指標)です。

次の図では、AS 20がAS 10に対して2つのプレフィックス「10.1.0.0/16」と「10.16.0.0/12」を通知しようとしています。

AS 20とAS 10はA-C、B-Dという2つの回線で接続しています。ここで、AS 20はAS 10に対し、「10.1.0.0/16」宛てのトラフィックはA-C経由で、「10.16.0.0/12」宛てのトラフィックはB-D経由で送ってほしいと考えています。そのほうがAS 20内での配送コストが低いためです。MED属性はこのような場合に使います。

MED属性は小さい値ほどコストが低いことを示します。そのため、AS 20はAS 10にプレフィックスを通知するにあたり、「10.1.0.0/16」のMED属性はA-Cのほうが小さくなるようにし、「10.16.0.0/12」のMED属性はB-Dのほうが小さくなるようにします。

これにより、AS 10でMED属性を考慮するポリシーが運用されていれば、AS 20の意図通り、「10.1.0.0/16」宛てのトラフィックはA-C経由で、「10.16.0.0/12」宛てのトラフィックはB-D経由でAS 20に送信されることになります。


本製品は、デフォルトでは経路情報にMED属性を含めません。しかし、後述するルートマップを使えば、特定の経路に任意のMED値を設定することができます。

LOCAL_PREF

LOCAL_PREF属性は、1つのAS内部において、特定プレフィックスへの経路としてどれがもっとも望ましいかを選択するための優先度です。複数のASと接続しているなど、あるプレフィックス宛ての経路が複数存在する場合に使用します。

たとえば次の図では、AS 10からプレフィックス「10.16.0.0/12」への経路として、AS 20経由とAS 40経由の2通りがあります。

ここで、AS 10ではAS 40経由のほうが回線が太いなど条件がよいことを知っているとします。このような場合、AS 10ではルーターA、Bに設定を施し、プレフィックス「10.16.0.0/12」のLOCAL_PREF属性値をBのほうが高くなるよう設定することで、「10.16.0.0/12」宛ての経路としてルーターB側を使うようにできます。


本製品は、iBGPセッションにおけるデフォルトLOCAL_PREF値として100を通知します。後述するルートマップを使えば、特定の経路情報に任意のLOCAL_PREF値を設定することも可能です。

ATOMIC_AGGREGATE

ATOMIC_AGGREGATE属性は、プレフィックスが集約されたものであることを示すフラグ属性(「あり」か「なし」だけが意味を持つ属性)です。


経路情報がATOMIC_AGGREGATE属性付きで通知された場合、通知されたプレフィックスに含まれる特定のプレフィックスへの経路がAS_PATHとは異なることがあります。

COMMUNITIES

COMMUNITIES属性は、BGPのポリシー運用を簡略化するために追加された属性です。共通の性質を持つプレフィックスを「コミュニティー」にグループ化し、コミュニティー単位でポリシー制御を行うことを目的としています。

「コミュニティー」は32ビットの整数値で表します。コミュニティー値の意味は各ASが独自に定義できます。たとえば、コミュニティー「100」はトランジットさせる経路、コミュニティー「200」はトランジットさせない経路、といった使い方ができます。慣例として、コミュニティーの前半16ビットは自AS番号、後半16ビットは自AS内でのコミュニティー識別子とします。この場合、読みやすさを考慮して「65001:100」といった表記がよく使われます。

なお、0x00000000~0x0000FFFF(0:0~0:65535)の範囲と、0xFFFF0000~0xFFFFFFFF(65535:0~65535:65535)の範囲は予約済みとなっています。

また、定義済みの特殊なコミュニティー(Well-known Communities)として次のものが定義されています。
本製品では、ルートマップを使って、特定の経路情報に任意のコミュニティー値を設定したり、経路情報に付加されているコミュニティー値に基づいて経路を分類したりすることができます。

基本設定

IPv4環境、IPv6環境、およびIPv4/IPv6混在環境でBGPを使用するための基本的な設定手順について説明します。

IPv4/IPv6の違いと注意事項

最初に、BGPにおけるIPv4とIPv6の違いや注意事項をまとめておきます。

IPv4環境

ここでは、IPv4環境におけるBGPの基本設定手順を示します。
  1. BGPルーティングプロセスの設定を行うため、router bgpコマンドを実行してBGPモードに移行します。このとき、自AS番号を指定します。
    awplus(config)# router bgp 65010
    

  2. 自身のBGP識別子(ルーターID)を設定します。これには、bgp router-idコマンドを使います。
    awplus(config-router)# bgp router-id 10.10.10.1
    

  3. 自らが提供するIPv4経路情報を設定します。たとえばIPv4のインターフェース直結経路をBGPで通知したいときは、BGPモードのredistributeコマンドを使って次のようにします。
    awplus(config-router)# redistribute connected
    

    なお、通知するIPv4プレフィックスを明示的に指定したいときは、BGPモードのnetworkコマンドで該当プレフィックスを指定します。
    awplus(config-router)# network 192.168.10.0/24
    

  4. IPv4経路情報の交換相手となるBGPスピーカー(BGPピア)を指定します。これには、neighbor remote-asコマンドを使います。相手のIPアドレスと相手の所属AS番号を指定してください。remote-asパラメーターに指定した番号が自ASと同じならiBGPピア、違うならeBGPピアとなります。
    awplus(config-router)# neighbor 10.10.10.5 remote-as 65050
    
    Note
    初期設定では、neighbor remote-asコマンドの実行と同時にIPv4経路情報の交換が開始されます。ただし、bgp default ipv4-unicastコマンドをno形式で実行している場合は、BGPモードのneighbor activateコマンドを実行しないとIPv4経路情報の交換が開始されません。

設定は以上です。

IPv6環境

ここでは、IPv6環境におけるBGPの基本設定手順を示します。
  1. BGPルーティングプロセスの設定を行うため、router bgpコマンドを実行してBGPモードに移行します。このとき、自AS番号を指定します。
    awplus(config)# router bgp 65010
    

  2. 自身のBGP識別子(ルーターID)を設定します。これには、bgp router-idコマンドを使います。IPv6上でBGPを使う場合も、ルーターIDはIPv4アドレス形式で設定します。
    awplus(config-router)# bgp router-id 10.10.10.1
    

  3. 初期設定ではIPv6 BGPピアに対してもIPv4経路情報の交換が有効になるため、あらかじめbgp default ipv4-unicastコマンドをno形式で実行し、BGPピア設定後にIPv4の経路交換が自動的に有効化されないよう設定しておきます。
    awplus(config-router)# no bgp default ipv4-unicast
    

  4. IPv6経路情報の交換相手となるBGPスピーカー(BGPピア)を指定します。これには、neighbor remote-asコマンドを使います。相手のIPv6アドレスと相手の所属AS番号を指定してください。remote-asパラメーターに指定した番号が自ASと同じならiBGPピア、違うならeBGPピアとなります。
    awplus(config-router)# neighbor 2001:db8:2222:10::5 remote-as 65050
    

  5. 自らが提供するIPv6経路情報を設定します。たとえばIPv6のインターフェース直結経路をBGPで通知したいときは、BGP IPv6アドレスファミリーモードのredistributeコマンドを使って次のようにします。
    awplus(config-router)# address-family ipv6
    awplus(config-router-af)# redistribute connected
    

    なお、通知するIPv6プレフィックスを明示的に指定したいときは、BGP IPv6アドレスファミリーモードのnetworkコマンドで該当プレフィックスを指定します。
    awplus(config-router-af)# network 2001:db8:10:10::/64
    

  6. IPv6 BGPピアとIPv6経路情報の交換を開始します。これには、BGP IPv6アドレスファミリーモードのneighbor activateコマンドを使います。
    awplus(config-router-af)# neighbor 2001:db8:2222:10::5 activate
    
    Note
    初期設定では、IPv4の経路情報は neighbor remote-asコマンドの実行と同時に交換が開始されますが、IPv6の経路情報は BGP IPv6アドレスファミリーモードでneighbor activateコマンドを実行しないと交換が開始されません。

設定は以上です。

IPv4/IPv6混在環境

ここでは、IPv4/IPv6混在環境におけるBGPの基本設定手順を示します。
  1. BGPルーティングプロセスの設定を行うため、router bgpコマンドを実行してBGPモードに移行します。このとき、自AS番号を指定します。
    awplus(config)# router bgp 65010
    

  2. 自身のBGP識別子(ルーターID)を設定します。これには、bgp router-idコマンドを使います。
    awplus(config-router)# bgp router-id 10.10.10.1
    

  3. 初期設定ではIPv6 BGPピアに対してもIPv4経路情報の交換が有効になるため、あらかじめbgp default ipv4-unicastコマンドをno形式で実行し、BGPピア設定後にIPv4の経路交換が自動的に有効化されないよう設定しておきます。
    awplus(config-router)# no bgp default ipv4-unicast
    

  4. IPv4経路情報の交換相手となるBGPスピーカー(BGPピア)を指定します。これには、neighbor remote-asコマンドを使います。相手のIPアドレスと相手の所属AS番号を指定してください。remote-asパラメーターに指定した番号が自ASと同じならiBGPピア、違うならeBGPピアとなります。
    awplus(config-router)# neighbor 10.10.10.5 remote-as 65050
    

  5. 自らが提供するIPv4経路情報を設定します。たとえばIPv4のインターフェース直結経路をBGPで通知したいときは、BGPモードのredistributeコマンドを使って次のようにします。
    awplus(config-router)# redistribute connected
    

    なお、通知するIPv4プレフィックスを明示的に指定したいときは、BGPモードのnetworkコマンドで該当プレフィックスを指定します。
    awplus(config-router)# network 192.168.10.0/24
    

  6. IPv4 BGPピアとIPv4経路情報の交換を開始します。これには、BGPモードのneighbor activateコマンドを使います。
    awplus(config-router)# neighbor 10.10.10.5 activate
    
    Note
    初期設定では、IPv4の経路情報は neighbor remote-asコマンドの実行と同時に交換が開始されますが、本例では手順3で「no bgp default ipv4-unicast」を実行しているため、BGPモードのneighbor activateコマンドを実行するまでIPv4の経路交換は開始されません。

  7. IPv6経路情報の交換相手となるBGPスピーカー(BGPピア)を指定します。これには、neighbor remote-asコマンドを使います。相手のIPv6アドレスと相手の所属AS番号を指定してください。remote-asパラメーターに指定した番号が自ASと同じならiBGPピア、違うならeBGPピアとなります。
    awplus(config-router)# neighbor 2001:db8:2222:10::5 remote-as 65050
    

  8. 自らが提供するIPv6経路情報を設定します。たとえばIPv6のインターフェース直結経路をBGPで通知したいときは、BGP IPv6アドレスファミリーモードのredistributeコマンドを使って次のようにします。
    awplus(config-router)# address-family ipv6
    awplus(config-router-af)# redistribute connected
    

    なお、通知するIPv6プレフィックスを明示的に指定したいときは、BGP IPv6アドレスファミリーモードのnetworkコマンドで該当プレフィックスを指定します。
    awplus(config-router-af)# network 2001:db8:10:10::/64
    

  9. IPv6 BGPピアとIPv6経路情報の交換を開始します。これには、BGP IPv6アドレスファミリーモードのneighbor activateコマンドを使います。
    awplus(config-router-af)# neighbor 2001:db8:2222:10::5 activate
    
    Note
    初期設定では、IPv4の経路情報は neighbor remote-asコマンドの実行と同時に交換が開始されますが、IPv6の経路情報は BGP IPv6アドレスファミリーモードでneighbor activateコマンドを実行しないと交換が開始されません。

設定は以上です。

設定項目詳細

BGPのおもな設定項目について説明します。

■ 自AS番号の設定は、BGPルーティングプロセスの設定を開始するときにrouter bgpコマンドで行います。
awplus(config)# router bgp 65010

■ 初期設定では、インターフェースに設定されたIPv4アドレスの中でもっとも大きなものがBGP識別子(ルーターID)として使われます。ただし、bgp router-idコマンドでルーターIDを明示的に指定した場合はその値が使われます。また、明示的に指定していない場合でも、ループバックインターフェース(lo)にIPv4アドレスを設定している場合は、そのアドレスがルーターIDとして使われます。

Note
純粋なIPv6環境では必ずルーターIDを明示的に設定してください。同環境ではインターフェースにIPv4アドレスが設定されていないため、明示的な設定を行わない場合にルーターIDが無効な値となり、BGPセッションを確立できないことがあります。


■ BGPで通知する経路情報はredistributeコマンドで指定します。


■ BGPで通知する経路情報の設定は、経路種別ごとではなく、プレフィックスごとに行うこともできます。これには、networkコマンドを使います。


■ 経路情報を集約したいときは、aggregate-addressコマンドを使います。


■ BGPピアの指定はneighbor remote-asコマンドで行います。

IPv4で通信するBGPピアの場合はIPv4アドレスと所属ASを、IPv6で通信するBGPピアの場合はIPv6アドレスと所属ASを指定してください。BGPピアの所属ASが自ASと違うならeBGPピア(外部ピア)、同じならiBGPピア(内部ピア)となります。
awplus(config-router)# neighbor 10.10.10.5 remote-as 65050
awplus(config-router)# neighbor 2001:db8:2222:10::5 remote-as 65050

■ 経路交換の有効・無効はneighbor activateコマンドで制御します。


■ BGPピアの有効・無効(BGPセッションの開始・切断)はneighbor shutdownコマンドで行います。通常形式でセッション切断、no形式でセッション開始ができます。neighbor remote-asコマンドで設定した直後のBGPピアは有効です。
awplus(config-router)# neighbor 10.10.10.5 shutdown
awplus(config-router)# no neighbor 10.10.10.5 shutdown
awplus(config-router)# neighbor 2001:db8:2222:10::5 shutdown
awplus(config-router)# no neighbor 2001:db8:2222:10::5 shutdown

■ その他、BGPピア固有の各種設定はneighbor xxxxコマンドで行います。
IPv4/IPv6共通の設定はBGPモード、IPv4経路に固有の設定はBGPモードかBGP IPv4アドレスファミリーモード、IPv6経路に固有の設定はBGP IPv6アドレスファミリーモードのコマンドを使います。
awplus(config-router)# neighbor 10.10.10.5 distribute-list AS65050_in

awplus(config-router)# address-family ipv6
awplus(config-router-af)# neighbor 2001:db8:2222:10::5 distribute-list AS65050_in6
Note
BGPピア固有の各種設定(neighbor xxxxコマンド)は、原則として該当ピアとの経路交換(neighbor activateコマンド)が有効になっていないと行えません。適宜 neighbor activateコマンドを実行してから設定を行ってください(経路交換の有効化については、こちらを参照)。

変更内容を反映するには、clear xxxxコマンドをsoftオプション付きで実行してください(ソフトリセット)。

Note
softオプションを付けずに実行すると、BGPセッションがいったん切断されるのでご注意ください(ハードリセット)。softオプションを付けた場合は、BGPセッションを保持したまま経路情報を更新します。詳しくはclear bgpclear ip bgpclear bgp ipv6コマンドの説明をご覧ください。

経路選択プロセス

BGP経由で学習した経路情報の中には、同じプレフィックスを持つものが複数存在する可能性があります。一般的にこれは、該当プレフィックス宛ての経路が複数あることを意味しますが、この場合どの経路をシステムの経路表に取り入れるかが重要になってきます。

あるプレフィックスへの経路が1つしか存在しない場合は、その経路を使用します。しかし、複数の経路が存在する場合は、次の流れにしたがって1つの経路に絞ります。

  1. NEXT_HOP属性のIPアドレスが到達可能な経路だけを選択
    到達できないネクストホップを持つ経路は無効として無視される。ネクストホップの到達可能性はshow ip bgp scanコマンドで確認できる。

  2. 内部的なウェイト(重み付け)の大きい経路を優先
    ウェイトは1台のルーター内でのみ意味を持つ内部的な属性値で、neighbor weightコマンド(BGPモード)、neighbor weightコマンド(BGP IPv6アドレスファミリーモード)やルートマップのset weightコマンドで任意の値を設定できる。

  3. LOCAL_PREF属性の大きい経路を優先

  4. AS_PATH属性の短い経路を優先
    ただし、bgp bestpath as-path ignoreコマンドを実行している場合は、AS_PATH属性の比較を行わず、次のステップに進む。

  5. ORIGIN属性。次の順序で優先
    (1) IGP
    (2) EGP
    (3) INCOMPLETE

  6. MULTI_EXIT_DISC(MED)属性の小さい経路を優先
    初期設定では同一ASから学習した経路間の比較にのみMED属性を使うが、bgp always-compare-medコマンドを実行している場合は、異なるASから学習した経路間の比較にもMED属性を使う。
    また、初期設定ではMED属性が付加されていない経路のMED値を0(優先度最高)と見なすが、bgp bestpath medコマンドでmissing-as-worstオプションを指定している場合は、MED値無限大(優先度最低)と見なす。

  7. iBGPピアから学習した経路よりもeBGPピアから学習した経路を優先

  8. NEXT_HOP属性のIPアドレス(IPv4)、または、MP_REACH_NLRI属性内のネクストホップアドレス(IPv6)へのコストが小さい経路を優先
    IPv4の場合、ネクストホップへのコストはshow ip bgp scanコマンドで確認できる。

  9. 先に学習した経路(学習してからの経過時間の長い経路)を優先
    ただし、bgp bestpath compare-routeridコマンドを実行している場合は、学習してからの経過時間ではなく、学習元BGPピアのルーターIDが小さい経路を優先する

  10. 学習元BGPピアのIPv4/IPv6アドレス(BGPセッションで使用しているアドレス)が小さい経路を優先

経路フィルタリングとポリシー設定

BGPの運用においては、どの経路情報を受け入れるかといったフィルタリング機能、また、特定の経路情報に付加的情報を追加するポリシー設定機能が重要な意味を持ちます。

BGP経路のフィルタリングやポリシー設定については、「IP」の「経路制御(フィルタリング)」をご覧ください。

iBGPフルメッシュの回避(IPv4のみ)

AS内部でBGPを使用する環境、すなわちiBGP環境においては、経路情報がループすることを防ぐため、すべてのBGPスピーカーがフルメッシュでセッションを張る必要があります。このため、BGPスピーカーの数が N のとき、iBGPセッション数 nSess は次のようになります。


たとえば、BGPスピーカーが4台のとき、セッション数は 6 (= 4 × (4 - 1) ÷ 2)ですが、8台のときは 28 (= 8 × (8 - 1) ÷ 2)となります。

このように、BGPスピーカーの数が少ないうちはそれほど問題になりませんが、数が増えてくると、システム資源(メモリーやCPU)や設定作業にかかる負荷が非常に大きくなります。

この問題を回避するための手段として、本製品は「ルートリフレクション」と「ASコンフェデレーション」をサポートしています。以下、それぞれについて解説します。

ルートリフレクション(IPv4のみ)

ルートリフレクションは、「ルートリフレクター」(RR)と呼ばれる特殊な役割のiBGPスピーカーを導入して、iBGPセッション数を削減するための仕組みです(RFC2796)。

Note
本機能はIPv4でのみ使用可能です。

次図の左側は通常のフルメッシュ構成を示しています。ここでは、iBGPスピーカーが5台あるため、合計10本のBGPセッションが必要になります。ここで、5台のうちの1台をRRにすると、右側のような構成となり、必要なセッション数は4本に削減されます。


通常のiBGPスピーカーは、他のiBGPピアから学習した経路を別のiBGPピアに通知することができませんが、RRとして設定されたルーターにはこれ(iBGPで学習した経路の再通知)が許可されます。RRは、他のiBGPピアを次の2種類に分けて扱います。



RRが経路を再通知するときは、該当経路にORIGINATOR_ID属性が付加されているかどうかを確認し、付加されていなければ通知元のBGP識別子(ルーターID)を値としてこれを追加します。

ルートリフレクションでは、RRとそれに依存するCPで「クラスター」と呼ばれるグループを構成します。各クラスターは4バイトのクラスターID(通常はRRのBGP識別子となる)で識別されます。クラスター外部のBGPスピーカー(NCP)からは、クラスターは1つの大きなNCPとしか意識されないことになります。


RRが経路を再通知するときは、該当経路にCLUSTER_LIST属性が付加されているかどうかを確認し、付加されていなければ自身のクラスターIDを値としてこれを追加します。すでにCLUSTER_LIST属性が付加されていたときは、自身のクラスターIDが含まれていないかどうかを確認し、含まれている場合は経路がループしているとみなして該当経路を破棄します。自身のクラスターIDが含まれていない場合は、これを追加して再通知します。

■ ルートリフレクションを使用するには、RRとして動作させるルーター上でBGPピアを設定するときに、該当ピアがCPであるかNCPであるかを指定します。


Note
ルートリフレクションに対応している必要があるのはRRだけです。RR以外のCP、NCPは通常のiBGPの動作をするだけなので、RRをピアとして指定するときにも特殊な設定は必要ありません。また、CP、NCPは、ルートリフレクションに対応していない機器でもかまいません。

Note
neighbor route-reflector-clientコマンドはiBGPピアに対してのみ有効です。eBGPピアに対して実行した場合はエラーになります。

■ RRとして動作している場合、デフォルトではクラスターIDとして自身のBGP識別子(ルーターID)を使います。通常はこれで問題ありませんが、次図の右側の構成のようにクラスター内に複数のRRを置いて冗長性を確保する場合は、クラスター内のすべてのRRに同じクラスターID(いずれかのRRのBGP識別子)を設定する必要があります。これには、bgp cluster-idコマンドを使います。
RR1(config-router)# bgp cluster-id 10.10.10.1
RR2(config-router)# bgp cluster-id 10.10.10.1


■ ルートリフレクションの設定は、show ip bgp neighborsコマンドでピアごとに確認します。「Route-Reflector Client」という一行が表示されている場合、該当ピアはCPであり、自身は該当ピアのRRとして動作しています。
awplus> show ip bgp neighbors 10.10.10.5
BGP neighbor is 10.10.10.5, remote AS 65010, local AS 65010, internal link
  BGP version 4, remote router ID 10.10.10.5
  BGP state = Established, up for 00:02:48
  Last read 00:02:48, hold time is 180, keepalive interval is 60 seconds
  Neighbor capabilities:
    Route refresh: advertised and received (old and new)
    Address family IPv4 Unicast: advertised and received
  Received 13 messages, 0 notifications, 0 in queue
  Sent 16 messages, 3 notifications, 0 in queue
  Route refresh request: received 0, sent 2
  Minimum time between advertisement runs is 5 seconds

 For address family: IPv4 Unicast
  BGP table version 6, neighbor version 6
  Index 1, Offset 0, Mask 0x2
  Route-Reflector Client
  Community attribute sent to this neighbor (both)
  1 accepted prefixes
  10 announced prefixes
...

ASコンフェデレーション(IPv4のみ)

ASコンフェデレーションは、大きなASを複数の「サブAS」に分割することで、iBGPセッション数を削減するための仕組みです(RFC3065)。

Note
本機能はIPv4でのみ使用可能です。

次図の左側は、あるAS(65010)内における通常のフルメッシュ構成を示しています。ここでは、iBGPスピーカーが5台あるため、合計10本のBGPセッションが必要になります。ここで、AS 65010を2つのサブAS「65011」と「65012」に分割し、全体をASコンフェデレーション「65010」として設定すると、右側のような構成となり、必要なセッション数は5本に削減されます。


サブAS「65011」「65012」間は、コンフェデレーションeBGP(C-eBGP)と呼ばれる特殊なeBGPセッションで接続しています。サブASはコンフェデレーションの中からしか見えず、コンフェデレーションの外部(図ではルーターF)からは単一のAS(ここではAS 65010)として見えます。

■ ASコンフェデレーションを使用するために必要な設定項目を示します。

Note
ASコンフェデレーションを使用する場合は、コンフェデレーション内のすべてのBGPスピーカーにASコンフェデレーションの設定をする必要があります。


show ip bgp neighborsコマンドの「BGP neighbor is」行では、通常のeBGPピア、コンフェデレーションeBGPピア(C-eBGPピア)のどちらとも「external link」と表示されますが、C-eBGPピアのときは少し下の方に「Neighbor under common administration」という一行が表示されます。


show ip bgpコマンドの「Path」欄では、ASコンフェデレーション内のサブAS番号はカッコで囲んで表示されます。
awplus> show ip bgp regexp .+
BGP table version is 67, local router ID is 10.10.10.5
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 172.16.0.0       10.10.10.1               0    100      0 (65011) ?
*> 172.22.0.0       10.10.10.1               0    100      0 (65011 65013) i
*> 172.23.0.0       10.10.10.8               0             0 65080 i
*> 172.24.0.0       10.10.10.8               0             0 65080 65090 i

Total number of prefixes 4

その他の機能

TCP MD5認証

TCP MD5認証は、TCPのオプション機能であるMD5ダイジェスト認証を利用して、BGPセッションの信頼性・安全性を高めるための機能です(RFC2385)。

■ TCP MD5認証を使用するには、neighbor passwordコマンドでパスワード(認証鍵)を指定します。パスワードはピアと同じ値を指定してください。
awplus(config)# router bgp 65010
awplus(config-router)# neighbor 10.10.10.5 password 41e9re10
awplus(config-router)# neighbor 2001:db8:2222:10::5 password 1i31twoDa4o

プライベートASフィルター(IPv4のみ)

プライベートASフィルターは、UPDATEメッセージの送信時にAS_PATH属性からプライベートAS番号(64512~65535)を取り除く機能です。

Note
本機能はIPv4でのみ使用可能です。

■ プライベートASフィルターを使用するには、neighbor remove-private-asコマンドでピアごとに設定します。同コマンドを実行すると、該当ピアに送信するUPDATEメッセージのAS_PATH属性からプライベートAS番号が取り除かれます。
awplus(config-router)# neighbor 10.10.10.8 remote-as 12345
awplus(config-router)# neighbor 10.10.10.8 remove-private-as

Note
neighbor remove-private-asコマンドはeBGPピアに対してのみ有効です。iBGPピアに対して実行した場合はエラーになります。

■ プライベートASフィルターの設定は、show ip bgp neighborsコマンドで確認できます。「Private AS number removed from updates to this neighbor」という一行が表示されれば、該当ピアに対するプライベートASフィルターが有効です。
awplus> show ip bgp neighbors 10.10.10.8

ピアグループ(ピアテンプレート)

BGPピアグループ(ピアテンプレート)は、共通のフィルタリングポリシーを適用する多数のピアとセッションを張る場合に、設定の手間を軽減するための機能です。

この機能では、複数のBGPピアを「ピアグループ」にまとめておき、通常ピアごとに行う設定(neighbor xxxxコマンドの類)をピアグループに対して行うことで、複数のピアに対して同じ設定を素早く適用することができます。

ピアグループを利用して、BGPピアの設定をする場合の基本的な流れは次のとおりです。
  1. ピアグループを作成します。これには、neighbor peer-group(create)コマンドを使います。このコマンドではピアグループに識別子となる名前を付けます。ここでは例として、いくつかのiBGPピアをまとめるピアグループ「INT」を作成します。
    awplus(config-router)# neighbor INT peer-group
    

  2. ピアグループを作成したら、次にピアグループの所属ASを指定します。これには、neighbor remote-asコマンドを使います。単一ピアの設定を行うときは、ピアのIPアドレスを指定しますが、ピアグループの設定を行うときはピアグループの名前を指定します。
    awplus(config-router)# neighbor INT remote-as 65010
    

  3. ピアグループとの経路交換を有効化します。
    ピアグループに対する設定やBGPピアの追加は、経路交換を有効にしていないと行えないためです。


  4. 続いて、ピアグループ所属のBGPピアに適用したい設定をneighbor xxxxコマンドで行います。これらのコマンドでも、ピアのアドレスではなくピアグループの名前を指定します。


  5. 最後に、ピアグループに所属させたいBGPピアのアドレスを指定します。IPv4ピアの場合はneighbor peer-group(add)コマンド(BGPモード)、IPv6ピアの場合はneighbor peer-group(add)コマンド(BGP IPv6アドレスファミリーモード)を使います。

    Note
    同一ピアグループにIPv4ピアとIPv6ピアを混在させないでください。そのような設定はサポート対象外となります。


■ ピアグループからピアを取り除くには、neighbor peer-group(add)コマンド(BGPモード)かneighbor peer-group(add)コマンド(BGP IPv6アドレスファミリーモード)をno形式で実行します。
awplus(config-router)# no neighbor 10.0.0.8 peer-group INT
awplus(config-router)# address-family ipv6
awplus(config-router-af)# no neighbor 2001:db8:2222:10::8 peer-group INT

■ ピアがどのピアグループに所属しているかは、show ip bgp neighborsコマンド、show bgp ipv6 neighborsコマンドで確認できます。「Member of peer-group XXX for session parameters」のような一行が表示されている場合、該当ピアはピアグループ「XXX」に所属しています。また、「XXX peer-group member」のような行も同じことを表しています。
awplus> show ip bgp neighbors 10.0.0.5
BGP neighbor is 10.0.0.5, remote AS 65010, local AS 65010, internal link
 Member of peer-group INT for session parameters
  BGP version 4, remote router ID 10.0.0.5
  BGP state = Established, up for 00:03:01
  Last read 00:03:01, hold time is 180, keepalive interval is 60 seconds
  Neighbor capabilities:
    Route refresh: advertised and received (old and new)
    Address family IPv4 Unicast: advertised and received
  Received 7 messages, 0 notifications, 0 in queue
  Sent 8 messages, 0 notifications, 0 in queue
  Route refresh request: received 0, sent 0
  Minimum time between advertisement runs is 5 seconds
  Update source is lo

 For address family: IPv4 Unicast
  BGP table version 5, neighbor version 5
  Index 1, Offset 0, Mask 0x2
  INT peer-group member
...

BGPネクストホップトリガー

BGPネクストホップトリガー機能について説明します。

BGPルーティングプロセスは装置のルーティングテーブルを定期的に確認し、変更があった場合に自プロセスが管理するBGP経路情報にその変更を反映させます。そのため、装置のルーティングテーブルの変更がBGPプロセスに反映されるまでいくらかの遅延が発生します。

BGPネクストホップトリガー機能はこの経路情報の反映プロセスを変更します。本機能を有効にすると装置のルーティングテーブルの更新自体を監視し、更新を検出すると直ちにその変更をBGPの経路情報に反映させます。これにより、IGPなどによる経路変更がBGPルーティングドメインへ少ない遅延で伝わることになります。
その反面、IGPルーティングドメインが不安定な場合、頻繁に発生するIGP経路変更がBGPドメインにそのまま伝播する恐れがあるため、この機能を有効にする際は注意が必要です。本装置では、この問題を軽減するためにルーティングテーブルの変更を検出した際、少し時間を空けてからBGPルーティングデータベースの更新を開始します。また、短期間にルーティングテーブルの変更が多発した場合に一時的にBGPネクストホップトリガー機能を無効にします。

BGPネクストホップトリガー機能を有効にするには、bgp nexthop-trigger enableコマンドを使用します。

awplus(config)# bgp nexthop-trigger enable

設定や状態の確認

BGPの設定や各種状態を確認するコマンドを紹介します。

■ BGPの全体設定を確認するには、show running-configコマンドでセクション名「bgp」を指定するとよいでしょう。
awplus# show running-config bgp

■ フィルタリングに用いるIPプレフィックスリスト、ASパスアクセスリスト、コミュニティーリスト、ルートマップは、それぞれshow running-configコマンドでセクション名「prefix-list」、「as-path access-list」、「community-list」、「route-map」を指定して確認します。
awplus# show running-config prefix-list
awplus# show running-config as-path access-list
awplus# show running-config community-list
awplus# show running-config route-map

■ BGPピアの情報を確認するには、下記のコマンドを使います。

■ BGP経路表を確認するには、下記のコマンドを使います。

■ IPv4/IPv6経路表(RIB)を確認するには下記のコマンドを使います。

■ IPv4/IPv6転送表(FIB)を確認するには下記のコマンドを使います。


(C) 2015 - 2019 アライドテレシスホールディングス株式会社

PN: 613-002107 Rev.AA