hiroportation

ITの話だったり、音楽の話、便利なガジェットの話題などを発信しています

BGPを復習して備える

はじめに

BGPについてなるべく簡単に全体像を整理して説明したいと思います。 ※一部書き切れていないところは後日随時更新します

BGP について復習

まずは簡単に概要を書きます。

BGP とは

  • BGPはネットワーク経路広告/経路交換を行うNWプロトコル
  • BGPはAS(Autonomous System)番号によって広告相手を選定する
  • ASにはグローバルAS番号とプライベートAS番号(64512~65534)が存在する
  • BGPはTCPで経路交換をしており、ポートは 179
  • BGPは同じAS通しで経路交換し合うiBGP(InternalBGP)と、異なるAS通しで経路交換し合うeBGP(ExternalBGP)の2種類が存在する

f:id:thelarklife1021:20210101223537p:plain:h400:w700

BGPが使われている場所

BGPは幅広く且つ、身近なネットワークに使われています。

  • インターネット
  • VPN(閉塞網)
  • DCネットワーク
  • etc...

BGP の立ち位置

f:id:thelarklife1021:20210101221936p:plain:h400:w700

BGPに必要な情報

下記は Peer UP するために必要最低限の情報になります。

項目名 説明
ASN BGPネットワークを形成する集合体の番号
Peer BGPルータに接続している別のBGPルータこと、又その情報
Router-id 普段には loopback に設定する ipv4 を登録する。ipv6で動かしてもipv4になる
Path Attribute必須項目 BGPではベストパス(最適経路)を処理する上で付加情報としてPath Attributeと呼ばれる情報を設定します

BGP 4種類のメッセージ

BGPには4種類のメッセージがあります

項目名 説明
OPEN ネイバールータと経路交換をするために必要な情報をやり取りする際のメッセージ。このメッセージによりネイバールータとセッションを確立させます(Establised)。
UPDATE ネイバールータとセッションが確立されれば、UPDATEメッセージにて経路交換をネイバールータとします。
KEEPALIVE ネイバールータとのセッションを維持するために送る生存確認メッセージ。holdtimeで維持時間を制御できます。
NOTIFICATION エラーや警告時に通知されるメッセージ。ネイバーがエラーなどでセッション確立できない時や、holdtime超過などの時に通知します。

BGPステータス

ステータス名 説明
Idle BGPの設定直後か、設定が不十分な場合はこの状態になります。
Connect TCP接続を待っている状態。IP接続性があればOPENメッセージを行なってOpen sentに状態繊維、疎通性がない場合一旦
Active Connect状態の時TCP接続が失敗した場合、つまりIP疎通性がない場合はこのステータスを維持し続けます。
Open Sent
Open Confirm
Established BGP Peerとのセッション確立が完了している状態。この状態のみUPDATEメッセージを送ってネイバーと経路交換が可能になる

AS4について

BGPのASは元々2byte(0~65535)でしたが、全世界を繋ぐインターネットを確立することになり、一時枯渇状態になりました。 そのため4byte(0~約43億)対応が進み、今では4byteされていないグローバルASは(私が知る限り)存在しません。 また2byteと4byteの互換性は以下の通り保たれています。

Peerケース 互換説明
4byte -> 2byteに転送される場合 2byteで経路広告されたPeerは一時的なASN(AS_TRANS)に置き換えられ、4byteASは一時的に
2byte -> 4byteに転送される場合 前半2byteを0で埋める

AS_TRANSとはRFC4893によって定められている 4byteなAS を 2byteなAS に置き換えるための仕組みのこと(後に詳細を説明します)

  • 置換後のASNは23456となります
  • 4byteASはAS4_PATHと呼ばれるPeerパケット空間に保存され、4byte対応のルータに渡す際にASNの値に戻さます
  • 4byte未対応ASが複数経由してしまうとAS_PATHの23456が重複して記載されてしまい、通常であればループ判定になるがAS_TRANSが働いている場合はループとみなされない

BGP Attribute

BGP Attributeについてよく仕事で使った内容をpick upします。 ※必須項目 のAttributeが設定されていないと malformed error になり、Peerがはれません。

TypeCode Path Attribute 必須 説明
1 ORIGIN BGPピア送信元ASを示す
2 AS_PATH BGPで交換される経路がどのノードを経由されているものかを示す
3 NEXT_HOP 交換される経路のネクストホップアドレスを示す
5 LOCAL_PREF - 1つのAS内部において、特定プレフィックスへの経路としてどれがもっとも望ましいかを選択するための優先度です。
6 ATOMIC_AGGREGATE - 交換する経路(プレフィックス)が集約されていることを示す
7 AGGREGATOR - ネイバーASにルート集約を実施したBGPルータのルータIDとAS番号を通知
8 COMMUNITY - 交換する経路をグループ化してポリシーを作り、利用用途などわかりやすくする
14 MP_REACH_NLRI - IPv6でのBGP設定できることを示す
15 MP_UNREACH_NLRI - IPv6でBGP設定はできないことを示す

BGP Capability

BGP CapabilityはBGP Peerを交換する際のオプション情報のことです。 OPENメッセージとUPDATEメッセージで送信できるCapabilityが異なり、16進数で表現されます。 Capabilityがネイバーと一致していればその設定を有効にします。 通常は各ネットワークOSの設定にてCodeを設定するのであまり意識しませんが、ネットワーク検証を自動化する場合はCapabilityCodeを直接設定するようにすると効率が良いです。

Capabilityには Capability CodeCapability LengthCapability Value といったパラメータがあります。

パラメータ名 説明
Capability Code Capabilityの種類を示します
Capability Length Capability Valueの長さを示します。基本的にIPv4の際は0x080x0cになります
Capability Value Capability Codeフィールドの値に従って解釈される可変長フィールド

Capability Codeは以下IANAで定義されていますが、よく使うものについて今回はpickupしたいと思います。
またCapabilityにも必須項目があり、設定がされていないと malformed error になり、Peerがはれません。

www.iana.org

Capability Code Description 説明
1 Multiprotocol Extensions for BGP-4 IPv6使用の際には必須項目になります。
2 Route Refresh Capability for BGP-4 Route Refresh。指定したBGPピアの経路をリセットする(※)
3 Outbound Route Filtering Capability
5 Extended Next Hop Encoding
6 BGP Extended Message
64 Graceful Restart Capability Graceful Restart。Peer再確立の際の影響を最小限にする
65 Support for 4-octet AS number capability AS4に対応しているルータでは設定
68 Multisession BGP Capability
69 ADD-PATH Capability
70 Enhanced Route Refresh Capability

※近年では膨大な経路数を扱うことも有り、Route Refreshではピアが断することはほとんどの場合ありません(多分)。

個人的に上記のAttributeだけを理解していれば仕事上一旦問題ないかと思います。

以上