BGPむずかしい
この記事はOIC ITCreate Club Advent Calendar 2016 24日目の記事です。
BGP難しすぎるのでRFCとかCCOとかinfraexpertとかで色々調べて実際に設定してみました。
ちなみにクリスマス予定ありません。
BGPとは
パスベクトル型のルーティングプロトコルで、インターネットの中核を成すものです。
パスベクトル型では経由するASの数に基いて経路制御を行います。
ルーティングプロトコルにはIGPsとEGPsの2種類があり、BGPは後者に当たります。
IGPs(Interior Gateway Protocols)に分類されるものはRIPやOSPF、IS-ISやCisco独自のEIGRP等様々ですが、
EGPs(Exterior Gateway Protocols)に分類されるものはEGPとBGPしかなく、現在使われているのはBGPのみです。
BGP Message
BGPスピーカ(BGPルータ)間では以下の4種類のメッセージを使用します。
OPEN
TCP接続が確立された際に各側から送信される最初のメッセージです。
OPENメッセージが受け入れ可能な場合、OPENを確認するKEEPALIVEメッセージが返送されます。UPDATE
BGPピア間のルーティング情報を転送するために使用されます。
UPDATEメッセージを受け取った場合もKEEPALIVEのHold Timerはリセットされるそうです。KEEPALIVE
BGPピアの生存確認メッセージです。
1秒間に1回以上の送信は禁止されています。NOTIFICATION
エラー状態が検出されると送信されるメッセージです。
NOTIFICATIONメッセージが送信された直後にBGP接続は閉じられます。
iBGP & eBGP
内部ASで張るBGPピアをiBGP(InternalBGP)ピアと呼び、
外部ASと張るBGPピアをeBGP(ExternalBGP)ピアと呼びます。
AS内部ではBGPスプリットホライズンによってループ回避がされているため、
iBGPピアの張り方に気を付けないとeBGPのルートが正しく広告されない事があります。
基本的にはiBGPフルメッシュ,Route-Reflector,BGP Confederation等で対応します。
eBGPピアと交換するメッセージはTTLが"""1"""のため、対向のピアとは直接接続されている必要があります。
もし対向ピアのアドレスとしてLoopbackI/Fを指定する場合はebgp-multihopでTTLを増やします。
またBGPピアを張る際には送信元I/Fのアドレスと対向ピアの指定するアドレスが一致している必要があるため、
LoopbackI/Fを使用する場合はupdate-sourceで送信元としてLoopbackI/Fを指定します。
Path Attribute
BGPでは最適パス選定の際にPath Attributeを使用します。
選定で使用されるPath Attributeは以下の5つです。
- WEIGHT (Cisco独自)
- LOCAL_PREF
- AS_PATH
- ORIGIN
- MULTI_EXIT_DISC
またローカルルートが生成元であるかどうかも選定に影響します。
Configuration
実際に設定してみます。
Objective
上図トポロジに基づき全てのルータ間で通信出来るようにします。
BGPでルートを広告する際はredistribute IGPとnetworkコマンドのみを使用します。
IPアドレスは以下の通りに設定されています。プレフィックスは全て24です。
RTs | L0 | F0/0 | F0/1 | F2/0 | S1/0 | S1/1 |
---|---|---|---|---|---|---|
R1 | 1.1.1.1 | 192.168.13.1 | 192.168.12.1 | - | - | - |
R2 | 2.2.2.2 | 192.168.12.2 | 192.168.24.2 | - | - | - |
R3 | 3.3.3.3 | 192.168.34.3 | 192.168.13.3 | - | - | - |
R4 | 4.4.4.4 | 192.168.24.4 | 192.168.34.4 | - | 192.168.124.4 | 192.168.48.4 |
R5 | 5.5.5.5 | 192.168.56.5 | 192.168.57.5 | - | - | - |
R6 | 6.6.6.6 | 192.168.68.6 | 192.168.56.6 | - | - | - |
R7 | 7.7.7.7 | 192.168.57.7 | 192.168.78.7 | - | - | - |
R8 | 8.8.8.8 | 192.168.78.8 | 192.168.68.8 | - | 192.168.48.8 | 192.168.168.8 |
R9 | 9.9.9.9 | 192.168.109.9 | 192.168.119.9 | - | - | - |
R10 | 10.10.10.10 | 192.168.109.10 | 192.168.102.10 | - | - | - |
R11 | 11.11.11.11 | 192.168.119.11 | 192.168.112.11 | - | - | - |
R12 | 12.12.12.12 | 192.168.112.12 | 192.168.102.12 | 192.168.126.12 | - | 192.168.124.12 |
R13 | 13.13.13.13 | 192.168.135.13 | 192.168.134.13 | - | - | - |
R14 | 14.14.14.14 | 192.168.134.14 | 192.168.146.14 | - | - | - |
R15 | 15.15.15.15 | 192.168.156.15 | 192.168.135.15 | - | - | - |
R16 | 16.16.16.16 | 192.168.146.16 | 192.168.156.16 | 192.168.126.16 | 192.168.168.16 | - |
Task
- 全てのルータでIGPを起動し、適用するI/Fはトポロジの通りにします
ループバックI/Fも含めます
RIPはversion2を使用します
RIPとEIGRPでは自動集約を絶対に切ります - 全てのAS内でiBGPピアをフルメッシュで張ります
ピアアドレスは対向のLoopbackI/Fを指定します
AS300内ではBGP Confederationの設定を行い2つのサブASに分割します
サブAS間でeBGPピアを張る際、ピアアドレスはLoopbackI/Fを指定しても構いません - 全てのAS間でeBGPピアを張ります
ピアアドレスは対向の物理I/Fを指定します - R4,8,12,16の外部AS側の(Serialで接続している)ネットワークをnetworkコマンドを使用してBGPで広告します
- IGPで学習しているルートをR4,8,12,16でBGPに再配布します
- BGPテーブルとルーティングテーブルに全てのルートが載っているか確認します
気が向いたらroute-mapを使って経路制御などもやろうと思います。
最後にconfigファイルを載せておきます
チラシの裏
RIPってデフォルトで自動集約が有効になってるんですね。
R1に外部ASのルートが一生載らなくてブチギレてたら、
自動集約がこっそり有効になってる事をその場で知って余計ブチギレました。
EIGRPみたいにauto-summaryが表示されないので気付きませんでしたね。
自動集約が有効の場合
router rip version 2 network 1.0.0.0 network 192.168.12.0 network 192.168.13.0 //❓❓❓❓❓❓❓❓
自動集約が無効の場合
router rip version 2 network 1.0.0.0 network 192.168.12.0 network 192.168.13.0 no auto-summary //👈👈👈👈👎👎👎😠😠😠😠😠😠😠😠😠😠😠😠
良いお年をお迎えください。