はじめに
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種類が存在する
BGPが使われている場所
BGPは幅広く且つ、身近なネットワークに使われています。
- インターネット
- VPN(閉塞網)
- DCネットワーク
- etc...
BGP の立ち位置
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 Code と Capability Length、Capability Value といったパラメータがあります。
パラメータ名 | 説明 |
---|---|
Capability Code | Capabilityの種類を示します |
Capability Length | Capability Valueの長さを示します。基本的にIPv4の際は0x08、0x0cになります |
Capability Value | Capability Codeフィールドの値に従って解釈される可変長フィールド |
Capability Codeは以下IANAで定義されていますが、よく使うものについて今回はpickupしたいと思います。
またCapabilityにも必須項目があり、設定がされていないと malformed error になり、Peerがはれません。
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だけを理解していれば仕事上一旦問題ないかと思います。
以上