今回はCiscoルータでのBGPの設定方法を学びましょう。BGPの設定の基本的な設定方法を押さえるとともに,実際の運用時に欠かせないコマンドもチェックしましょう。
BGPの基本設定
BGPの基本設定で使うコマンドは,IGP(RIPやOSPFなど)の基本設定と同様に,routerコマンドとnetworkコマンドです。ただし,networkコマンドで,ワイルドカードマスクではなくサブネットマスクを使う点が,IGPの設定と異なります。二つのコマンドは,以下になります。- (config)# router bgp [AS番号] … BGPを動作させ,設定モードに入る
- [AS番号]
- ルータの所属するAS番号
- [AS番号]
- (config-router)# network [ネットワークアドレス] mask [サブネットマスク]
- [ネットワークアドレス]
- ルータがアドバタイズするネットワークのネットワークアドレス
- [サブネットマスク]
- アドレスのサブネットマスク。省略した場合はメジャーネットワークとみなす
- [ネットワークアドレス]
IGPのnetworkコマンドはルーティングを有効にするインタフェースを特定するコマンドですが,BGPではそのネットワークを通知するという意味になります。なお,networkコマンドで指定するネットワークは,ルーティングテーブルのエントリと一致している必要があります(図1)。
図1 networkコマンド
また,BGPスピーカは,対向(ピア)のBGPスピーカを自動で発見しないため,neighborコマンドで明示的にBGPピアのアドレスを設定する必要があります。
- (config-router)# nighbor [IPアドレス] remote-as [AS番号]
- [IPアドレス]
- BGPピアのIPアドレス
- [AS番号]
- BGPピアのAS番号
- [IPアドレス]
この3つのコマンドが,BGPの基本設定のコマンドになります(図2)。
図2 BGPの基本設定コマンド
Neighborコマンドの応用
Neighborコマンドの基本的な設定は上記の通りですが,いくつか応用的な使用方法があります。
BGPでは,複数のBGPスピーカと隣接関係を結ぶことが多く,複数のピアに対して同一のポリシー(経路情報をやりとりする際の条件)を適用することがあります。通常ならば,1台1台のピアにそれぞれ同じポリシー情報を設定することになりますが,ピアグループを使うと,複数のピアをまとめてグループ化し,グループに対して一つのポリシーを適用できます。なお,ピアグループの設定が適用されるのはあくまでも設定したルータだけで,他のルータにそのポリシー情報が伝わることはありません(図3)。
- (config-router)# neighbor [IPアドレス] peer-group [グループ名]
- [IPアドレス]
- ピアグループに所属させるピアのIPアドレス
- [グループ名]
- ピアグループの名前
- [IPアドレス]
- (config-router)# neighbor [グループ名] {ピアグループの設定}
- [グループ名]
- ピアグループの名前
- {ピアグループの設定}
- ピアグループに対して行う設定。
- [グループ名]
図3 ピアグループ
既存のBGPピアやピアグループを無効にしたい場合は,neighbor shutdownコマンドを使います。また一度無効にしたピアを再び有効にしたい場合は,no neighbor shutdownコマンドを使います。
- (config-router)# neighbor [IPアドレス or グループ名] shutdown
- [IPアドレス or グループ名]
- ピアのIPアドレスまたはピアグループ名
- [IPアドレス or グループ名]
また,BGPではピアへの経路があるにもかかわらず,ピアが確立されなくなるという問題が発生します。以下のルータDの動作に注目してみましょう(図4)。ルータDには,iBGPピアのアドレスが1.0.0.1と設定されています。この状態で,ルータDとルータBの間のリンクが切断されると,ルータDはルータBの2.0.0.1からBGPキープアライブやBGPアップデートを受信することになります。こうなるとルータDは,設定したアドレス(1.0.0.1)から情報を受信していないため,ピアが確立されません。
図4 iBGPで発生する問題
このような問題を解決するには,BGPスピーカに「ループバックインタフェース」と呼ばれる仮想インタフェースを作成し,その仮想インタフェースのIPアドレスをneighborコマンドで設定します。さらに,update-sourceコマンドで,ループバックインタフェースを使っていることを明記します(図5)。こうして,ループバックインタフェース同士でiBGPピアを張るわけです。
- (config-router)# neighbor [IPアドレス] update-source [インタフェース名]
- [IPアドレス or グループ名]
- ピアのループバックインタフェースのIPアドレス
- [インタフェース名]
- ループバックインタフェースを指定
- [IPアドレス or グループ名]
図5 ループバックインタフェースの使用
eBGPピアで同様のことを実現するには,もう一工夫必要になります。eBGPでピアを確立するには,ピアのBGPスピーカ同士が直接隣接されていて,対向ルータのインタフェースのアドレスをneighborコマンド指定する必要があります。というのも,eBGPパケットのTTL(time to live)はデフォルトで1に設定されており,対向アドレスに1ホップで到達できないといけないからです。そこで,eBGPのパケットのTTLを増やして,直接接続していないルータ同士でBGPピアを確立する方法を「BGPマルチホップ」と呼びます。BGPマルチホップを設定するコマンドは次の通りです。
- (config-router)# neighbor [IPアドレス] ebgp-multihop [TTL]
- [IPアドレス or グループ名]
- ピアにするルータのIPアドレス
- [TTL]
- ホップ数。省略した場合255とみなす
- [IPアドレス or グループ名]
eBGPマルチホップを使うと,eBGPピア同士でもループバックアドレスを使った障害対策が可能になります(図6)。
図6 eBGPマルチホップ