Amazon EC2 上で BGP peer を張ってみる


hbstudy#3で話した時にデモした、Amazon EC2 上で BGP peer を張る環境の作り方をメモしておく。

構成情報

環境は以下、

  • EC2 の instance は CentOS5.0(Final)
  • Quagga(旧Zebra)を使う

構成は以下、

f:id:d_sea:20090917093725p:image:w500

  • instance 2つを立ち上げる
  • Quagga 上で zebra, bgpd を起動
  • AWS 内の private network 内部で BGP peering
instance 1 側の設定内容
interface ip address : 10.254.202.228
AS65001
広報するprefix: 10.1.0.0/16、10.11.0.0./16、10.111.0.0/16
instance 2 側の設定内容
interface ip address : 10.209.162.213
AS65002
広報するprefix: 10.2.0.0/16
BGP的な設定内容
2つのinstance の interface ip address が異なるネットワークになるので、EBGP multihop を設定
route-map を使って Local Preference、MED、Community を付けてみる
確認内容
peerが張れているか
広報されている経路情報が route-map で指定しているものかどうか

構築

CentOS だと yum で quagga がインストールできるので、簡単にすませる。


[root@domU-12-31-39-07-A1-27:~] yum -y install quagga

/etc/quagga 配下にファイルが作られる


[root@domU-12-31-39-07-A1-27:~] cd /etc/quagga/

[root@domU-12-31-39-07-A1-27:/etc/quagga]ll

total 48

-rw-r--r-- 1 root   root      570 May 30  2007 bgpd.conf.sample

-rw-r--r-- 1 root   root     2801 May 30  2007 bgpd.conf.sample2

-rw-r--r-- 1 root   root     1110 May 30  2007 ospf6d.conf.sample

-rw-r--r-- 1 root   root      182 May 30  2007 ospfd.conf.sample

-rw-r--r-- 1 root   root      410 May 30  2007 ripd.conf.sample

-rw-r--r-- 1 root   root      394 May 30  2007 ripngd.conf.sample

-rwxr-x--- 1 quagga quaggavt  128 May 30  2007 vtysh.conf.sample

-rw-r--r-- 1 root   root      373 May 30  2007 zebra.conf.sample

-rw-r----- 1 quagga quagga     32 Sep 12 03:32 zebra.conf.sample02

zebra.conf と bgpd.conf を以下のように書いた。bgpd.confのほうで空白行は必ず “!” を記述しないと動作してくれなかったので注意。

instance1の場合

zebra.conf


[root@domU-12-31-39-07-A1-27:/etc/quagga] more zebra.conf

! -*- zebra -*-

!

! zebra sample configuration file

!

! $Id: zebra.conf.sample,v 1.1.1.1 2002/12/13 20:15:30 paul Exp $

!

hostname Router

password zebra # ここは変える

enable password zebra # ここは変える

!

! Interface's description.

!

!interface lo

! description test of desc.

!

!interface sit0

! multicast



!

! Static default route sample.

!

!ip route 0.0.0.0/0 203.181.89.241

!



!log file zebra.log

bgpd.conf


[root@domU-12-31-39-00-C5-16:~] more /usr/local/etc/bgpd.conf

! -*- bgp -*-

!

! BGPd sample configuratin file

!

! $Id: bgpd.conf.sample,v 1.1.1.1 2002/12/13 20:15:29 paul Exp $

!

hostname bgpd

password zebra

!enable password please-set-at-here

!

!bgp mulitple-instance

!

router bgp 65001

! bgp router-id 10.254.202.228

network 10.1.0.0/16

network 10.11.0.0/16

network 10.111.0.0/16

neighbor 10.209.162.213 remote-as 65002

neighbor 10.209.162.213 route-map TEST-ROUTEMAP-IN in

neighbor 10.209.162.213 route-map TEST-ROUTEMAP-OUT out

neighbor 10.209.162.213 ebgp-multihop

! neighbor 10.0.0.2 next-hop-self

!

! access-list all permit any

!

route-map TEST-ROUTEMAP-IN permit 10

set local-preference 200

set community 65001:65002

!

route-map TEST-ROUTEMAP-OUT permit 10

set metric 111

!

!

!route-map set-nexthop permit 10

! match ip address all

! set ip next-hop 10.0.0.1

!

!log file bgpd.log

!

log stdout

instance2の場合

zebra.conf は内容が同じなので、省略。

bgpd.conf


[root@domU-12-31-39-07-A1-27:/etc/quagga] more bgpd.conf

! -*- bgp -*-

!

! BGPd sample configuratin file

!

! $Id: bgpd.conf.sample,v 1.1.1.1 2002/12/13 20:15:29 paul Exp $

!

hostname bgpd

password zebra

!enable password please-set-at-here

!

!bgp mulitple-instance

!

router bgp 65002

! bgp router-id 10.209.162.213

network 10.2.0.0/16

neighbor 10.254.202.228 remote-as 65001

! neighbor 10.0.0.2 route-map set-nexthop out

neighbor 10.254.202.228 ebgp-multihop

! neighbor 10.0.0.2 next-hop-self

!

! access-list all permit any

!

!route-map set-nexthop permit 10

! match ip address all

! set ip next-hop 10.0.0.1

!

!log file bgpd.log

!

log stdout

起動

起動する。bgpを使うので、zebraとbgpd。


[root@domU-12-31-39-07-A1-27:/etc/quagga] zebra -d

[root@domU-12-31-39-07-A1-27:/etc/quagga] bgpd -d

zebra(2601)とbgpd(2605)のポートが空く


root@domU-12-31-39-07-A1-27:/etc/quagga] netstat -an | grep 260*

tcp        0      0 0.0.0.0:2601                0.0.0.0:*                   LISTEN

tcp        0      0 0.0.0.0:2605                0.0.0.0:*                   LISTEN

確認

bgpd にログインして確認してみる。instance2 側にて。


[root@domU-12-31-39-07-A1-27:/etc/quagga] telnet localhost bgpd

まずは peer が張れているかどうか確認


bgpd# show ip bgp su

BGP router identifier 10.209.162.213, local AS number 65002

2 BGP AS-PATH entries

0 BGP community entries



Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd

10.254.202.228  4 65001       7       8        0    0    0 00:04:34        3



Total number of neighbors 1

張れている。続いて、経路情報を確認する。


bgpd# show ip bgp

BGP table version is 0, local router ID is 10.209.162.213

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal

Origin codes: i - IGP, e - EGP, ? - incomplete



Network          Next Hop            Metric LocPrf Weight Path

*> 10.1.0.0/16      10.254.202.228         111             0 65001 i

*> 10.2.0.0/16      0.0.0.0                  0         32768 i

*> 10.11.0.0/16     10.254.202.228         111             0 65001 i

*> 10.111.0.0/16    10.254.202.228         111             0 65001 i



Total number of prefixes 4

AS65001から3prefixがMED111で広報されていていることが分かる。

instance1側で経路情報を見ると、


bgpd# show ip bgp

BGP table version is 0, local router ID is 10.254.202.228

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal

Origin codes: i - IGP, e - EGP, ? - incomplete



Network          Next Hop            Metric LocPrf Weight Path

*> 10.1.0.0/16      0.0.0.0                  0         32768 i

*> 10.2.0.0/16      10.209.162.213           0    200      0 65002 i

*> 10.11.0.0/16     0.0.0.0                  0         32768 i

*> 10.111.0.0/16    0.0.0.0                  0         32768 i



Total number of prefixes 4

AS65002からの経路情報に local preference 200 がついていることが分かる。

communityを見ると、


bgpd# show ip bgp community 65001:65002

BGP table version is 0, local router ID is 10.254.202.228

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal

Origin codes: i - IGP, e - EGP, ? - incomplete



Network          Next Hop            Metric LocPrf Weight Path

*> 10.2.0.0/16      10.209.162.213           0    200      0 65002 i



Total number of prefixes 1

AS65002からの経路情報に community 65001:65002 がついていることが分かる。

ということで、めでたく BGP が張れて経路情報に属性を付けれましたと。