hbstudy#3で話した時にデモした、Amazon EC2 上で BGP peer を張る環境の作り方をメモしておく。
構成情報
環境は以下、
- EC2 の instance は CentOS5.0(Final)
- Quagga(旧Zebra)を使う
構成は以下、
- 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 が張れて経路情報に属性を付けれましたと。