一,黑洞的解决方案
1.使用环回口建立邻居
在使用bgp建立邻居时,有时会有多条冗余链路,为防止单点故障和路由表抖动,建议使用环回口建立邻居关系。
方法很简单,建立邻居时填写对方环回口地址,然后指定更新源是环回口(neighbor X.X.X.X update-source loopback X),记得要有路由哦。
如果是EBGP的话,还要指定跳数(neighbor [ip] ebgp-multihop X)
BGP路由黑洞的解决方案:
1:选择性重分布(Redistribute Selected BGP Route into IGP);
2:冗余的IBGP(Full-mesh IBGP);
3:路由反射器(Part-mesh IBGP+Refilector);
4:联邦(Confederation);
5:(MPLS)。
二,使用手工汇聚路由条目和简单的认证
同上为了防止单点故障造成的抖动,可以将多条路由汇聚成一条。
有两种办法 一种是 通过指向NULL0 口的静态路由进行汇总。但这种不利于排错
二是 通过汇聚命令 aggregate-address [network] [mask] summary-only。此命令只起汇聚不添加路由,比较好
在BGP建立邻居时可使用简单的认证如:neighbor [ip] password [password] 两端需一致哦
四,使用本地优先级操纵离开BGP的数据流
如图:
http://www.douban.com/photos/photo/886203721/
1.当R4想访问130.130.1.0 时,是这样走的:R4——R3——R1——130.130.1.1
主要原因是,BGP在选择最佳路由时,并不会考虑具体带宽。为解决此问题,可以配置本地优先级来操纵路由,使其按照需求选择路径。
如果需要使R4的数据流:R4——R2——R1——130.130.1.1
可以在R2上的BGP进程里将本地优先级设成200(值越高优先级越高)
R2(config-router)#bgp default local-preference 200
然后通告R4下一跳是自己
r2(config-router)#neighbor 10.1.1.1 next-hop-self
就OK了
2.如果R4想访问130.130.1.0和150.150.1.0,并希望去130.130.1.0通告R2走,去150.150.1.0是通过R3走怎么办?
因为在默认情况下都是通过R3走的,所以我们只需要把去往130.130.1.0的流量单独提出来就好了。
在R2上建一个访问列表匹配去130.130.1.0的网段
r2(config)#access-list 1 permit 130.130.1.0 0.0.0.255
然后用route-map调用它,设一个名为set_lp的route-map,匹配允许,进程为10
r2(config)#route-map set_lp permit 10
当匹配访问列表1时
r2(config-route-map)#match ip address 1
设置本地优先级为200
r2(config-route-map)#set local-preference 200
当出现其他情况时,按默认方式进行
r2(config)#route-map set_lp permit 20
在进程下指定方向并套用route-map
R2(config-router)#neighbor 192.168.2.2 route-map set_lp in
将下一跳指为自己
r2(config-router)#neighbor 10.1.1.1 next-hop-self
就OK了
五,使用MED(多出口鉴别器)操纵流入BGP的数据流
http://www.douban.com/photos/photo/886203721/
根据以上例子,想让R4通过R2访问130.130.1.0,让R4通过R3访问150.150.1.0。
通常访问这两个网段 都从R3走,那么需要将去往130.130.1.0网络的流量改成从R2走
因为MED是操纵流入的流量,我们只要将R2通过R3去往130.130.1.0流量的metric值提高。那么它自然会从R2走了
下面是命令:
和上一个例子一样,设置一个访问列表,route-map匹配它时执行MED,然后在BGP进程下套用。
在R3上输入
access-list 1 permit 130.130.1.0 0.0.0.255
route-map set-med permit 10
match ip address 1
set metric 100
route-map set-med permit 20
router bgp 64512
neighbor 192.168.1.2 route-map set-med out
最后记得在R2上nei 10.1.1.1 next-hop-self
六,使用weight(权重)在本地路由器上操纵去往多个AS的流量
如图
http://www.douban.com/photos/photo/886203773/#next_photo
R2要去往150.150.1.0。由于R4的route-id比较小,根据BGP选路原则可能会选R4,但我们想让去150.150.1.0的流量从R1走。所以我们必须人为操纵。使用weight是一种办法。当然,就像前面两个例子一样,我们也使用route-map,因为route-map可以精确匹配。
在R2上输入
access-list 1 permit 150.150.1.0 0.0.0.255
route-map weight permit 10
match ip address 1
set weight 100
route-map weight permit 20
router bgp 64512
neighbor 192.168.4.1 route-map weight in
七,使用AS_path(路径欺骗)在本地路由器上操纵去往多个AS的流量
还是如上图
http://www.douban.com/photos/photo/886203773/#next_photo
其实AS-path和MED差不多,可以算是MED的一种替代解决方法,但是它适用范围不大
access-list 1 permit 150.150.1.0 0.0.0.255
route-map as-path permit 10
match ip address 1
set as-path prepend 64514 64514
在set as-path prepend后添加的AS号,最好是本地自治系统号,否则可能会产生无效路由
route-map as-path permit 20
router bgp 64514
neighbor 192.168.2.1 route-map as-path out