今回はCiscoルータでのBGPの設定方法を学びましょう。BGPの設定の基本的な設定方法を押さえるとともに,実際の運用時に欠かせないコマンドもチェックしましょう。

BGPの基本設定

 BGPの基本設定で使うコマンドは,IGP(RIPやOSPFなど)の基本設定と同様に,routerコマンドとnetworkコマンドです。ただし,networkコマンドで,ワイルドカードマスクではなくサブネットマスクを使う点が,IGPの設定と異なります。二つのコマンドは,以下になります。

  • (config)# router bgp [AS番号] … BGPを動作させ,設定モードに入る
    • [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番号

 この3つのコマンドが,BGPの基本設定のコマンドになります(図2)。

 図2 BGPの基本設定コマンド
BGPの基本設定コマンド

Neighborコマンドの応用

 Neighborコマンドの基本的な設定は上記の通りですが,いくつか応用的な使用方法があります。

 BGPでは,複数のBGPスピーカと隣接関係を結ぶことが多く,複数のピアに対して同一のポリシー(経路情報をやりとりする際の条件)を適用することがあります。通常ならば,1台1台のピアにそれぞれ同じポリシー情報を設定することになりますが,ピアグループを使うと,複数のピアをまとめてグループ化し,グループに対して一つのポリシーを適用できます。なお,ピアグループの設定が適用されるのはあくまでも設定したルータだけで,他のルータにそのポリシー情報が伝わることはありません(図3)。

  • (config-router)# neighbor [IPアドレス] peer-group [グループ名]
    • [IPアドレス]
      • ピアグループに所属させるピアのIPアドレス
    • [グループ名]
      • ピアグループの名前
  • (config-router)# neighbor [グループ名] {ピアグループの設定}
    • [グループ名]
      • ピアグループの名前
    • {ピアグループの設定}
      • ピアグループに対して行う設定。

 図3 ピアグループ
ピアグループ

 既存のBGPピアやピアグループを無効にしたい場合は,neighbor shutdownコマンドを使います。また一度無効にしたピアを再び有効にしたい場合は,no neighbor shutdownコマンドを使います。

  • (config-router)# neighbor [IPアドレス or グループ名] shutdown
    • [IPアドレス or グループ名]
      • ピアのIPアドレスまたはピアグループ名

 また,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アドレス
    • [インタフェース名]
      • ループバックインタフェースを指定

 図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とみなす

 eBGPマルチホップを使うと,eBGPピア同士でもループバックアドレスを使った障害対策が可能になります(図6)。

 図6 eBGPマルチホップ