17.2. Zebra による BGP4 の設定

Border Gateway Protocol Version 4 (BGP4) は、 RFC 1771 で記述されている動的ルーティングプロトコルです。 BGP4 を使うと、到達性情報すなわち経路テーブルを、 他の BGP4 ノードに配布できます。EGP か IGP が使え、 IGP モードでは各ノードに固有の Autonomous System (AS) 番号がつきます。 BGP4 は、クラスレスインターネットドメインルーティング (CIDR) と、経路集合 (複数の経路をひとつにまとめる) とをサポートします。

17.2.1. ネットワーク図 (例)

次のネットワーク図を以降での例として用います。 AS 1 と 50 には他にも近隣ノードがありますが、 ここでは 1 と 50 だけを私たちの近隣として設定すれば良いだけです。 この例では、各ノードはトンネルを経由して通信しますが、 これは必ずしも必要ではありません。

注意: この例での AS 番号は予約済みですので、 公式な接続を設定する場合は、RIPE から AS を取得してください。

          --------------------
          | 192.168.23.12/24 |
          |    AS: 23        |
          --------------------
            /             \
           /               \
          /                 \
------------------       ------------------
| 192.168.1.1/24 |-------| 10.10.1.1/16   |
|    AS: 1       |       |    AS: 50      |
------------------       ------------------

17.2.2. 設定 (例)

次の設定は 192.168.23.12/24 のものです。 他のノードにあわせるのも簡単でしょう。

まずホスト名、パスワード、デバッグスイッチなどの一般情報から始まります。

! hostname
hostname anakin

! login password
password xxx

! enable password (super user mode)
enable password xxx

! path to logfile
log file /var/log/zebra/bgpd.log

! debugging: be verbose (can be removed afterwards)
debug bgp events
debug bgp filters
debug bgp fsm
debug bgp keepalives
debug bgp updates

プライベートネットワーク (RFC 1918) の再配布を制限するための アクセスリストです。

! RFC 1918 networks
access-list local_nets permit 192.168.0.0/16
access-list local_nets permit 172.16.0.0/12
access-list local_nets permit 10.0.0.0/8
access-list local_nets deny any

次のステップは AS ごとの設定です。

! Own AS number
router bgp 23

    ! IP address of the router
    bgp router-id 192.168.23.12

    ! announce our own network to other neighbors
    network 192.168.23.0/24

    ! advertise all connected routes (= directly attached interfaces)
    redistribute connected

    ! advertise kernel routes (= manually inserted routes)
    redistribute kernel

'router bgp' ブロックには、必ずルータが接続する近隣のリストが含まれます。

    neighbor 192.168.1.1 remote-as 1
    neighbor 192.168.1.1 distribute-list local_nets in
    neighbor 10.10.1.1   remote-as 50
    neighbor 10.10.1.1   distribute-list local_nets in

17.2.3. 設定の確認

注意: vtysh はマルチプレクサで、 Zebra インターフェースをすべてひとまとめに接続します。

anakin# sh ip bgp summary 
BGP router identifier 192.168.23.12, local AS number 23
2 BGP AS-PATH entries
0 BGP community entries

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.10.0.1       4    50      35      40        0    0    0 00:28:40        1
192.168.1.1     4     1   27574   27644        0    0    0 03:26:04       14

Total number of neighbors 2
anakin#
anakin# sh ip bgp neighbors 10.10.0.1
BGP neighbor is 10.10.0.1, remote AS 50, local AS 23, external link
  BGP version 4, remote router ID 10.10.0.1
  BGP state = Established, up for 00:29:01
  ....
anakin#

近隣から受けとった経路を見てみましょう。

anakin# sh ip ro bgp 
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       B - BGP, > - selected route, * - FIB route

B>* 172.16.0.0/14 [20/0] via 192.168.1.1, tun0, 2d10h19m
B>* 172.30.0.0/16 [20/0] via 192.168.1.1, tun0, 10:09:24
B>* 192.168.5.10/32 [20/0] via 192.168.1.1, tun0, 2d10h27m
B>* 192.168.5.26/32 [20/0] via 192.168.1.1, tun0, 10:09:24
B>* 192.168.5.36/32 [20/0] via 192.168.1.1, tun0, 2d10h19m
B>* 192.168.17.0/24 [20/0] via 192.168.1.1, tun0, 3d05h07m
B>* 192.168.17.1/32 [20/0] via 192.168.1.1, tun0, 3d05h07m
B>* 192.168.32.0/24 [20/0] via 192.168.1.1, tun0, 2d10h27m
anakin#