next up previous contents
Next: 9.6 bgpdの設定 2. Up: 9. BGP Previous: 9.4 その他の機能

9.5 bgpdの設定 1

BGPの設定は bgpd.conf にします。

以下の例では、BGPルータがこのサイトに全部で3台あり、 それぞれIPアドレスは 202.11.98.{17,33,49} で 、以下は202.11.97.17 のルータの設定です。外部BGPルータは 3台あり、202.11.98.{30,34,50} です。 このサイトは、 202.11.97.16/28 のネットワークを持っています。 また、202.11.97.17 を主に使うルータとして設定をします。

BGP ASNは 65001です。ピアリングしているのは図では、65000, 65002 のASと行っています。

\epsfile{file=bgp-net,scale=0.7}

! BGPd config
!
hostname pc2f001-bgpd
password zebra
enable password zebra
log file /var/log/bgpd.log
!
router bgp 65001
  bgp router-id 202.11.98.17
  network       202.11.97.16/28
  ! I-BGP router
  neighbor      202.11.97.18 remote-as 65001
  neighbor      202.11.97.20 remote-as 65001
  ! prefer this route
  neighbor      202.11.98.30  remote-as 65000
  neighbor      202.11.98.30  route-map LOCAL-PREF1 in
  !
  !redistribute static
!
route-map LOCAL-PREF1 permit 10
 match as-path 65000
 set local-preference 200
!
ip as-path access-list 65000 permit ^65000_
! --- end of config ---

以下、上の例にもとづいて解説します。

  1. router bgp ASN

    このBGPルータの所属するASの番号を表します。AS番号は、IPアドレスなどと 同じように APNICから取得しなければなりませんが、単一のプロバイダーなど に所属しているような場合や、IGP としてのみ使うような場合には、 プライベートASNが利用できます。
             private AS number: 64512-65535
    
    この例では、65001がASNです。

    また、router セクションは他の定義が続きます。

  2. bgp router-id BGP-ID

    ルータのBGP-IDを決めます。設定をしないと、インターフェースのIPアドレス の内、もっとも大きな番号のものが自動的に振られます。但し、zebraを 動かさず、bgpd のみを動かしていると、zebraからインターフェースの情報を 取れませんので、注意してください。また、先に説明したように、ループバック アドレスに仮想的なアドレスを振ることもされます。これは、インターフェース がダウンした場合の対策です。

  3. network IPaddress/prefix

    このルータが他のピアルータに公告を行うネットワークを書きます。

  4. neighbor IPaddress remote-as ASN

    ピアリングを行うルータを全て指定します。 neighbor で指定されないルータとはピアリングをしません。 IP addressで指定しなければいけません。また、ASNも書きます。 なお、iBGP と eBGP の区別はなく、ASN から自動的に外と内の区別 がされます。

  5. neighbor IPaddress route-map NAME [in | out]

    ここに指定したピアルータから入っていくる(in)、あるいは出て行く (out)アップデート情報に対して、属性を付けます。つける属性は様々な 組み合わせや、プレフィックスによる選択が可能なように別の定義に 書きます。この定義は route-map の後ろに指定した名前(NAME)を使って、 結合します。route-mapコマンドは後で説明します。

  6. redistribute other-proto

    カーネルのルーティングテーブルや、静的な設定、あるいは他のRIPや OSPF で学習したプレフィックスを再配布する場合に、other-protoに 指定します。但し、IGPで学習したものを再配布するのは原則的には行わない 方が良いでしょう。コメントアウトされた行では、静的に設定されたルートを 再配布していますが、必要かどうかを良く考えてから設定をして下さい。 other-proto には、static,kernel, connected, rip, ospf などが設定できます。

  7. route-map NAME [permit|deny] seq-num

    ルートマップセクションの始まりを表します。名前(NAME と 順序番号(seq-num)を与えます。ルートマップで設定された内容 は全てのアップデートメッセージに対して、適用するか否かが考慮された 上で、順にセクション内に記述された set コマンドを実行するか(permit)、 あるいは実行されません(deny)。

  8. match cond ac-list-name

    このroute-mapセクションに合致するものを指定するための条件文です。 condには以下のようなものが指定可能ですが、通常は ip か as-path でしょう。

    as-path AS パスリスト
    community BGP コミュニティリスト
    extcommunity BGP/VPN 拡張コミュニティリスト
    ip IPv4
    ipv6 IPv6
    metric ルートメトリック
    origin BGP オリジンコード
    ll

    ac-list-name には、アクセスリストの名前を指定します。

  9. set attribute-command

    属性を設定します。attribute-command には多くの属性設定コマンド がありますが、ここではローカルプリファレンス( local-preference) を設定しています。
    set local-preference <0-4294967295>
    local-preferenceの後ろには、値を指定します。ローカルプリファレンスでは 大きな値ほど高い優先順位になります。 ここでの例では、ピアeBGPルータから入ってくる情報全てにローカルプリファレンス 属性をつけていますが、202.11.98.30 からのアップデート情報のルーティングを 優先させるために、それに高い値をつけて内部のピアルータにアップデートメッセージ を送っています。当然、内部の他のピアルータは200より低い値をつけて、他の アップデートメッセージを流すようにしないといけません。

    1. タイブレーク
      ASパスが同じで、どちらかを優先するような条件(例えばこの local-preference)が ないような場合をタイブレークと言います。タイブレークになった場合には、 タイブレークルールが適用され、どちらを利用するかを決定します(RFC1771)。

  10. ip as-path access-list ac-list-name [permit|deny] reg

    条件に一致するASパス情報を選びます(permit)。あるいは 、deny ならば一致するものは除外されます。上の例では、ac-list-nameを使って route-map セクションのmatchコマンドで引用をしています。regには、 正規表現を用いたASNの指定が出来ます。また、AS パスの表現では、アンダースコア (_)でパスの途中を表しますので、以下のような表現が可能です。 なお、ASパスは先頭にもっとも近いピアのASNが入り、最後には起源ASNが入ります( つまりは常に先頭に自分のASNを追加する)。

    指定 意味
    ^65000_ パスの先頭に 65000 がある。
    _5600_ パスの中に 5600 がある。
    _100$ パスの最後に 100 がある。

これに対して、202.11.98.33や202.11.98.49 のBGPルータ の設定は以下のようにします。

! BGPd config
!
hostname pc2f003-bgpd
password zebra
enable password zebra
log file /var/log/bgpd.log
!
router bgp 65001
  bgp router-id 202.11.98.33
  network       202.11.97.16/28
  ! I-BGP router
  neighbor      202.11.97.17 remote-as 65001
  !neighbor      202.11.97.18 remote-as 65001
  neighbor      202.11.97.20 remote-as 65001
  !
  neighbor      202.11.98.34 remote-as 65002
  neighbor      202.11.98.34 route-map LOCAL-PREF2 in
  !neighbor      202.11.98.50 remote-as 65002
  !neighbor      202.11.98.50 route-map LOCAL-PREF2 in
  !
route-map LOCAL-PREF2 permit 20
 match as-path 65002
 set local-preference 150
!
ip as-path access-list 65002 permit ^65002_

実は、ここまでの例では十分でない点があります。それは、BGPではASは 一つのエンティティとして考えられる事に起因し、iBGP間では NEXT-HOPが 変更されません。実際、外部ネットへのNEXT-HOPとして、202.11.98.17は 202.11.98.30 を受け取ります(eBGP間ではNEXT-HOPはBGPが適切に処理 します)。これを、202.11.98.17 のBGPルータはそのまま処理するので、 このメッセージを受け取った他のiBGPルータは202.11.98.16/28 がどこにある かを予め知っておかなければならないのです(解決できない場合には、 RIB(Routing Information Base)にも載りません)。

この解決方法は3つ考えられます。1つはBGPがiBGPに対しても適切に NEXT-HOPを処理するようにする。2つめは静的に設定を行う。あるいは、 3つめにIGP(RIPやOSPF)を利用して、202.11.98.17 の外側インターフェース のアドレスを学習・伝播させることです。

静的に設定する場合には、
     # route  add -net  202.11.98.16/28  202.11.97.17
をホストに設定をします (勿論、他の ネットについても同様です)。

Zebra のRIPやOSPFを使う場合には、202.11.98.17 の外側インターフェース の存在を学習させるために、redistribute connected (p129 11.4.2参照) を ripd.conf あるいは ospfd.conf に追加する点を忘れないで下さい。

最後に、BGPで適切にNEXT-HOPを処理させるには、router bgpセクションの 中に以下の設定を加えます(接続しているiBGP全てに指定して下さい)。

  !neighbor      202.11.97.17   next-hop-self
  neighbor      202.11.97.18   next-hop-self
  neighbor      202.11.97.20   next-hop-self

  1. next-hop-self
    通常、iBGPは受け取ったNEXT-HOP属性を書き換えずに他のiBGPに伝達します。 これを強制的に自分のアドレスにNEXT-HOP値を書き換える役割をします。


next up previous contents
Next: 9.6 bgpdの設定 2. Up: 9. BGP Previous: 9.4 その他の機能
Noriyo Kanayama