一、BGP概述
TCP 179
BGP是一种EGP(外部网关协议)。不同于以前的RIP,EIGRP和OSPF,它们都属于IGP(内部网关协议)
1.1 了解AS
AS(autonomous system)
AS的经典定义为:在单一的技术管理下,采用同一种内部网关协议和统一的度量值在AS内转发数据包,并使用一种外部网关协议将数据包转发到其他AS的一组路由器。
分类: 公有AS(必须申请):0—64511。电信:4134;网通:9929;CN2:1609 私有AS:64512--65535 网站:http://www.cidr-report.org/as6447/autnums.html 看到所有公有AS对应的机构 访问BGP,请telnet route-server.ip.att.net BGP是一种路径矢量的路由协议,不同于RIP的距离矢量的路由协议。 BGP的开销是从源路由器到目标路由器经过的AS;而RIP的开销是从源路由器到目标路由器路径的度量值。
在BGP中,一个AS相当于一个大的路由器,直接影响的是就是AS的下一跳。 所以,BGP又被叫做AS-by-AS routing protocol
1.2 BGP的使用
1.21 什么是时候要用到BGP
1. 2. 3. 4.
大型企事业连接多个SP(多宿主)
ISP之间(当一个数据包从一个AS传输到另一个AS的时候)。 AS交换点(当一个AS连接多个AS的时候)。 大型企业网
1.22 电信和网通为什么用BGP,而不是别的IGP
1. 方便管理,安全性能好(阻止不同AS之间的路由、过滤和认证功能)
2. 承载的路由条目海量(10几万条),而ospf(1万条),ISIS(2万条) 3. 策略比一般的IGP更强(次优路由),更多
4. 可扩展性强,不仅能传Ipv4,Ipv6,还能传VPNv4
1.3 BGP的特征
1. 2. 3. 4. 5. 6. 7.
支持VLSM,CIDR。
支持增量更新与触发更新。
使用TCP协议作为可靠地传输机制,端口号为179 没有组播地址
60s/次,180s dead,通过keeplive包来验证TCP的连通。 属性化(metric只是属性当中的一员)。 支持大型的网络拓扑。
1.4 BGP和IGP的关系
1. 2. 3. 4. 5.
BGP承载的是一个外部客户路由 IGP承载的是内部核心路由 IGP不会因BGP的影响而变化
BGP不会因IGP的影响而变化,直到BGP的下一跳不可达 BGP是IGP的递归查找
提前知道(归纳总结):
数据层面的路由黑洞IBGP IGP同步IGP不堪重负关闭同步黑洞归来每个节点都运行IBGPIBGP的水平分割(想想为什么)full mesh的IBGP邻居关系(如何部署)BGP联邦和路由反射器
二、BGP的数据包
BGP数据包分为:Open包,keeplive包,update包,notification包
在IGP中的hello包无非就是发现建立邻居,维持邻居关系(keeplive)两大作用。 在BGP中,hello包被细分成open包(只发一次)和keeplive包(60s/次;180s dead)。
2.1 Open包
包含 版本号,AS号,hold time,BGP tag(就是Route id),可选参数
2.2 Update包
NLRI(网络层可达信息)
由于TCP是一种可靠地面向连接的协议,需要保持连接的可达性,BGP的keeplive包便提供了这样一个机制
触发更新和增量更新
由于BGP是一个庞大的路由系统,每时每刻的更新会导致资源的浪费 IBGP 5s\\次;EBGP 30s\\次
路径属性
具有丰富的BGP属性值
撤销路径
2.3 Notification
错误检测
1.4 Route-refresh
通常发生在邻居路由器做完策略后,我还没有得到更新,我就会发送一个这样的报文 通常我会利用clear命令来实现这一步骤
三、BGP的3张表
邻居表:存放BGP的邻居信息(通过open包)。 BGP表(转发数据库):到达目标网络的所有路径。 路由表:到达目标网络的最优路径。
注:BGP中是不带负载均衡的,它最终只会选出一条最优的路径。
当一个网络被BGP和另一个路由协议同时学到,这时,还是比AD,AD小的会放入路由表中。这时,想想BGP的两种AD(IBGP=200;EBGP=20)的作用了……. 修改BGP AD的命令
R(config-route)#distance bgp external internal local
四、BGP的邻居的建立
4.1 BGP角色
BGP neighbor=BGP peer(对等体)
BGP分为IBGP和EBGP,IBGP是内部的(internal),EBGP是外部的(external)。
所以,IBGP形成邻居的路由器在同一个AS,而EBGP形成邻居的路由器在不同的AS。 注:IBGP必须通过IGP来保持联通
注意:
IBGP的邻居可以不直连,但要保证TCP 179的连通,可以通过neighbor命令来实现。 EBGP的邻居默认情况下是直连的,但是也可以不直连,这需要修改TTL。 IBGP不支持负载均衡;EBGP默认不支持,但是有办法让它支持。
4.2 BGP在传输中
AS之间不用多说,EBGP搞起。 AS 65102内,B和E互指IBGP,但是B和E之间必须要有路由,所以,AS内要运行一种IGP。 这样一来,来分析一下: 路由层面:
X路由从AB(EBGP),BE(IGP和IBGP),EF(EBGP) 数据层面:
F数据包(目标地址是X路由)
从FE(EBGP),EB(具体分析),BA
EB:数据包从E到B,必须要经过C和D,但是C和D中没有运行BGP,就没有X路由,所以数据包到了C和D便丢掉了。这便是数据层面的路由黑洞。
4.21 数据层面的路由黑洞
Q:为什么X路由能过去,而数据包就不能回来呢?
路由走的时候(update包):
AB:Src:A;Dst:B.而A和B之间是有EBGP路由的。
BE:Src:B;Dst:E.而B和E之间是有IGP和IBGP路由的。 EF:Src:E;Dst:F.
注:源一直在变化,这也许是矢量路由协议的特点。 数据包走的时候:
FE:Src:F;Dst:X 路由器F上通过EBGP学到了X路由,下一跳是E,扔给E。 EB:Src:E;Dst:X 路由器E上通过IBGP学到了X路由,下一跳是C,扔给C。 C上没有运行BGP,没有X路由,扔掉。 注;目标地址没有变化,这时数据包的特点
4.22 解决路由黑洞
1. 物理线路的full mesh,即B和E之间直接拉一根物理线。
2. IBGP邻居的full mesh,即中转AS内的所有路由器都起IBGP(次佳)。
3. 在B和E上把BGP重发布到IGP中,D和C能通过IGP学到X路由(不建议使用)。 4. MPLS(最佳解决方案),MPLS的双层Tag会解决这一切。
怎么部署IBGP的full mesh呢?
图一看起来很庞杂,经过优化得到图二 综上所述:IBGP的full mesh合理的部署应该是同一AS的EBGP路由器向内部节点路由器的full mesh
但是IBGP的full mesh还是很复杂,这时便引出了BGP联邦和路由发射器(下面会介绍)
4.5 BGP水平分割:
IBGP水平分割和EBGP的水平分割
4.51 EBGP水平分割
R1、R2和R3是不通AS的BGP路由器,它们之间互指EBGP邻居
当X路由R1(AS1)R2(AS2)R3(AS3)----?R1(AS1):是不是环路了?
其实不然:
这个X路由通过BGP从AS出去的时候,会携带AS信息的
当路由器接受的BGP路由中含有自己的AS号时,就丢弃 所以EBGP的水平分割是不接受含有本AS号的BGP路由
4.52 IBGP水平分割
IBGP水平分割:即从IBGP邻居学到的路由不会传到其他的IBGP邻句
X路由从AB,BD,D--/E 为什么有这个机制呢?
因为IBGP路由在同个AS之间传输时,路由的属性没有发生更改
如果BD,DE,EC,CB.这不是环路了?
所以IBGP水平分割是从IBGP邻居学到的路由不会传到其他的IBGP邻句 因此,我们在布局的时候IBGP的full mesh,或者使用路由反射器和联邦
4.6 实验 实验要求
目的一:BGP邻居关系的建立(neighbor和update Source问题) 目的二:EBGP-multihop
目的三:路由的通告(network,show查看)
目的四:解决IBGP中路由不优问题(同步和下一跳)
-------------路由层面打通了,即1.1.1.0/24的路由在R5的路由表中了----------- 目的五:解决数据层面的路由黑洞以及peer-group的应用 目的六:R5 ping R1 !!!! and R5 ping R1 so 5.5.5.5 !!!! 目的七:AS间的路由传输
目的八:no bgp default ipv4-unicast
目的九:BGP VNH(virtual next-hop)实现负载均衡 目的十:BGP在show中的各种状态 目的十一:Huawei BGP配置
目的一
分为IBGP和EBGP邻居关系的建立
EBGP peers: R2: R2(config)#router bgp 2 R2(config-router)#bgp router-id 2.2.2.2 R2(config-router)#neighbor 192.168.12.1 remote-as 1 R1和R2的配置一样 IBGP peers: R2(config)#router ospf 100 R2(config-router)#router-id 2.2.2.2 R2(config-router)#network 2.2.2.0 0.0.0.255 a 0 R2(config-router)#network 192.168.23.0 0.0.0.255 a 0 //所有AS内的BGP路由器都起IGP R2(config)#router bgp 2 R2(config-router)#neighbor 4.4.4.4 remote-as 2 //IBGP指R4 R2(config-router)#neighbor 4.4.4.4 update-source loopback 0 R4和R2的配置一样
注意:
在IGP中,network的作用有两个:hello建立邻居和路由的通告。
在BGP中,由于是基于TCP,TCP是一个点到点的连接,不支持广播,只能单播。 所以,BGP用neighbor指邻居,而network传路由。 update-source:在BGP neighbor指邻居时,会自动带上一个update-source信息。 通常,我们把 在EBGP中,update-source就是自己的物理口,而指的也是对方的物理口,匹配,邻居建立。 在IBGP中,由于是指peers的环回口,而update-source却是学习到这个路由(IGP)的物理口。 所以,有必要把update-source改写成loopback口。一边做也可以,但是建议两边都做上。 注意:我们建议用环回口作为updatesource口,以便冗余 验证: R2#sh ip bgp summary BGP router identifier 2.2.2.2, local AS number 2:自己的AS BGP table version is 1, main routing table version 1 邻居 版本 Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.168.12.1 4 1 6 6 1 0 0 00:03:46 0 R2#sh ip bgp neighbor //3张表中的邻居表,邻居的详细信息,很多的。 R2#sh tcp brief TCB Local Address Foreign Address (state) 65053418 192.168.12.2.32373 192.168.12.1.179 ESTAB 本路由的随机端口号 R1的179端口号 目的二
EBGP-multihop(EBGP多跳)
这里的hop=TTL,默认EBGP发来的报文的TTL=1(1跳),而IBGP默认是多跳
这里是EBGP的双线冗余,所以就不能neighbor物理口了,环回口是最佳选择。 但是EBGP的peers有没有对方的换回口的路由,怎么neighbor呢? 看!做静态路由,双线的静态路由。
回到话题,默认EBGP发来的报文的TTL=1,这~~不就意味着报文到了对方就不能再穿了? 环回口绝对是不能到了,因为环回口是另一个网络。 所以,要修改TTL=2或大于2 EBGP-multihop配置:
R4和R5之间EBGP对指环回口 R5(config)#ip route 4.4.4.4 255.255.255.255 Ethernet0/1 //静态让R5上有4.4.4.4的路由 R5(config)#router bgp 3 R5(config-router)#neighbor 4.4.4.4 remote-as 2 R5(config-router)#neighbor 4.4.4.4 update-source loopback R5(config-router)#neighbor 4.4.4.4 ebgp-multihop //不配就是EBGP TTL=255 R4和上一样
目的三
Network在IGP和BGP区别
在IGP中,network宣告的是接口,即路由器是宣告自己直连的本地接口。 在BGP中,network宣告的是路由,即路由器是宣告自己路由表里的路由。 PS:BGP宣告的时候,一定要学到的路由的掩码一样
Network在BGP的原则:
1. 从EBGP获得的路由会向它所有BGP相邻体通告(包括EBGP和IBGP) 2. 从IBGP获得的路由不向它的IBGP邻居通告(除非RR)
3. 从IBGP获得的路由是否通告给它的EBGP对等体要靠同步来决定 4. 多条路径时,BGP会选择一条最优的路径
配置: R1(config)#router bgp 1 R1(config-router)#network 1.1.1.0 mask 255.255.255.0 //前提是确保R1的路由表里有 R2和上一样 验证
R2#sh ip bgp //这就是3张表中的BGP表 BGP table version is 3, local router ID is 2.2.2.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 192.168.12.1 0 0 1 i *> 2.2.2.0/24 0.0.0.0 0 32768 i //*表示这条路由是可用的;>表示是最优的路由。 R4#sh ip bgp //R1R2R4 BGP table version is 2, local router ID is 4.4.4.4 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path * i1.1.1.0/24 192.168.12.1 0 100 0 1 i *>i2.2.2.0/24 2.2.2.2 0 100 0 i //i表示是从内部AS学到的路由。图中,R4的1.1.1.1的路由是从R2(同AS)学到的。 //不打i的情况:本地通告和从EBGP学到的路由。例如R2学到的1.1.1.1的路由 //发现:R4的1.1.1.1是没有>号的,说明这个路由不是最优的。 目的四
目的三的结果告诉我,R4的1.1.1.1是没有>号的,说明这个路由不是最优的。 造成路由不是最优会导致: 1. 不放进路由表。
2. 不会给其他BGP邻居传这条路由。
造成不优的原因有:
1. BGP Synchronization(同步) 2. 下一跳
BGP Synchronization(同步)
同步只是针对IBGP来说的
默认的我从IBGP学习到的路由,我不会放进路由表,也不会宣告给邻居路由器。直到我从IGP也学习到这条路由。
结合拓扑:R4中1.1.1.0/24路由为什么是不优的呢?是因为R4没有通过OSPF学到1.1.1.0/24。 好处:
1. 避免了数据层面的路由黑洞(路由可达,数据包去回不来)。Eg:每个路由器中都有
1.1.1.0/24的路由。
2. 确保穿越AS信息的一致性
注:同步只是针对数据层面的问题,但是解决数据的问题的方法有很多,包括MPLS。所以,
现在的路由器,特别是Cisco IOS 12.2(8)T或更高的版本中,默认是关闭同步
再来看看R4上1.1.1.0/24下一跳 R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path * i1.1.1.0/24 192.168.12.1 0 100 0 1 i *>i2.2.2.0/24 2.2.2.2 0 100 0 i //BGP中的下一跳不是路由器,而是AS,所以知道为什么下一跳不可达了吧! //想一想:R4上会有12网段的路由吗?肯定没有,因为只有R2、R3和R4运行了OSPF,但R2并没有宣告12网段到OSPF。 //这是一个下一跳不可达的问题。
解决不优的方法有:
对于同步:从IGP学习到/直接关闭(no synchronization) 关闭同步配置: R4(config)#router bgp 2 R4(config-router)# no synchronization 对于下一跳:静态/next-hop-self next-hop-self 当R1把1.1.1.0/24的路由通过EBGP传到R2时,R2会自动把1.1.1.0/24路由的下一跳改成自己,这样R4中1.1.1.0/24路由的下一跳就是R2了。通过IGP,R4知道R2的。 这个命令建议在AS边界路由器向自己AS的IBGP邻居做的。 配置: R2(config)#router bgp 2 R2(config-router)#neighbor 4.4.4.4 next-hop-? next-hop-self next-hop-unchanged R2(config-router)#neighbor 4.4.4.4 next-hop-self 验证:
R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 2.2.2.2 0 100 0 1 i *>i2.2.2.0/24 2.2.2.2 0 100 0 i //变成最优了,下一跳也变了(update-Source) R4#sh ip route 1.0.0.0/24 is subnetted, 1 subnets B 1.1.1.0 [200/0] via 2.2.2.2, 00:05:42 2.0.0.0/8 is variably subnetted, 2 subnets, 2 masks //路由表里也有了1.1.1.0/24这条路由。 R5#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 4.4.4.4 0 2 1 i *> 2.2.2.0/24 4.4.4.4 0 2 i //R4优了,就会向其他BGP邻居传这条路由,所以,R5也有这条路由了。
目的五
前提:
-------------路由层面打通了,即1.1.1.0/24的路由在R5的路由表中了-----------
现在,R5要向R1的1.1.1.1发送消息啦,我们看一下怎么走滴?…… R5#sh ip route
1.0.0.0/24 is subnetted, 1 subnets
B 1.1.1.0 [20/0] via 4.4.4.4, 00:33:27
//1.1.1.1的路由AD是20,EBGP学习到的,下一跳4.4.4.4 R4#sh ip route
1.0.0.0/24 is subnetted, 1 subnets
B 1.1.1.0 [200/0] via 2.2.2.2, 00:33:18
2.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
O 2.2.2.2/32 [110/21] via 192.168.34.3, 05:21:58, Ethernet0/0 B 2.2.2.0/24 [200/0] via 2.2.2.2, 02:22:26
//1.1.1.1的路由AD是200,IBGP学习到的,下一跳是2.2.2.2(R4 neighbor 2.2.2.2了嘛!) //再看看,2.2.2.2的路由是IGP的OSPF学习到的,下一跳是R2的物理口,扔给了R2 R3#sh ip route
2.0.0.0/32 is subnetted, 1 subnets
O 2.2.2.2 [110/11] via 192.168.23.2, 05:23:22, Ethernet0/1 3.0.0.0/24 is subnetted, 1 subnets
C 3.3.3.0 is directly connected, Loopback0 4.0.0.0/32 is subnetted, 1 subnets
O 4.4.4.4 [110/11] via 192.168.34.4, 05:23:22, Ethernet0/0 C 192.168.23.0/24 is directly connected, Ethernet0/1 C 192.168.34.0/24 is directly connected, Ethernet0/0 //发现:R3上并没有1.1.1.0的BGP路由。 //就这样,数据层面的路由黑洞出现了……
上文已经提过了解决黑洞的方法,现采用第二种:BGP邻居的full mesh。
引出一个技术:peer group
想一想,R3和R2、R4建立邻居的命令是一样的,这是不是要一个一个地配置呢? 这时,peer group出现了,他能: 1. 减小路由器的buffer 2. 减少命令行
peer group配置 R3(config-router)#neighbor cisco peer-group //下面是peer-group的模板,模板的名字是cisco R3(config-router)#neighbor ? A.B.C.D Neighbor address WORD Neighbor tag X:X:X:X::X Neighbor IPv6 address R3(config-router)#neighbor cisco remote-as 2 R3(config-router)#neighbor cisco update-source loopback 0 R3(config-router)#neighbor 2.2.2.2 peer-group cisco //调用 R3(config-router)#neighbor 4.4.4.4 peer-group cisco 分别在R2和R4做一条指向R3的IBGP。 R2(config)#router bgp 2 R2(config-router)#neighbor 3.3.3.3 remote-as 2 R2(config-router)#neighbor 3.3.3.3 update-source loopback 0 R3同上一样
这时
所有路由器的路由表中都有了1.1.1.0/24的路由。 路由黑洞解决……
目的六
任务是完成R5 ping R1 !!!! and R5 ping R1 so 5.5.5.5 !!!!
要知道,要完成数据包ping R5R1!!!,所有路由器光有1.1.1.0/24的路由是没有用的。 因为ping包含echo-request和echo-replay。
echo-request包是可以从R5R1,但是echo-replay回不来(R1R5),因为R1的路由表中没有45的网段和R5环回口的路由。 解决:
在R5上把R5的环回口和45网段通告出来。 配置: R5(config)#router bgp 3 R5(config-router)#network 5.5.5.0 mask 255.255.255.0 //检查各个路由器中的5.5.5.0/24是不是最优的,无非就是下一跳和同步。 验证 R5#ping 1.1.1.1 so l0 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 5.5.5.5 !!!!! 好了,做通了,不容易啊!!! 目的七
3种方法: 1. 重分布IGP到BGP 2. Network 3. 路由汇总 目的八
所谓地址族,就是把ipv4、ipv6和vpnv4分成不同的“块”,对每个“块”单独进行配置,如下所示:
Rack1R3(config-router)#address-family ?
ipv4 Address family ipv6 Address family vpnv4 Address family
由于ipv6现在应用较少,所以暂时不予讨论,如果大家配置过MPLS VPN,那么对ipv4和vpnv4这两个地址族应该有些了解。 其实如果不是有特殊应用(MPLS、Ipv6),也不会用到这些地址族的概念,直接默认建立全局BGP邻居及属性就可以了。所以可以理解地址组是BGP的一个扩展。 下面我们就这两个地址族进行分析。
Ipv4和vpnv4地址族的分析:
特殊说明:“no bgp default ipv4-unicast” 命令是在全局BGP下禁用单播的传播,在MPLS中,正确的配置就是打上此命令,然后如果需要全局BGP连接或在BGP vpnv4连接,那么就在各个地址族中激活此邻居就可以了。
但有些全局命令是可以被继承到各个地址族中的。 以下分别分析几种常见的情况
如果没有配置“no bgp default ipv4-unicast”,直接在全局配置BGP邻居关系,这样ipv4地址族会默认被激活的,但是不会显示在“show run”中,如下所示: Rack1R1#config ter Enter configuration commands, one per line. End with CNTL/Z. Rack1R1(config)#router bgp 1 Rack1R1(config-router)#bgp router-id 150.1.1.1 Rack1R1(config-router)#nei 150.1.2.2 remote-as 1 Rack1R1(config-router)#nei 150.1.2.2 update-source lo0 Rack1R1(config-router)#address-family vpnv4 Rack1R1(config-router-af)#nei 150.1.2.2 activate Rack1R1(config-router-af)#nei 150.1.2.2 send-community ex Rack1R1(config-router-af)#exit Rack1R1(config-router)#end Rack1R1# Rack1R1#sh run | b r b router bgp 1 no synchronization bgp router-id 150.1.1.1 neighbor 150.1.2.2 remote-as 1 neighbor 150.1.2.2 update-source Loopback0 no auto-summary ! >>>>> 没有ipv4地址族 address-family vpnv4 neighbor 150.1.2.2 activate neighbor 150.1.2.2 send-community extended exit-address-family !
此时如果打上“no bgp default ipv4-unicast” ,address-family ipv4地址族就会自动显示出来,此时如果再建立BGP全局邻居,这条命令就会生效: Rack1R1#config ter Enter configuration commands, one per line. End with CNTL/Z. Rack1R1(config)#router bgp 1 Rack1R1(config-router)#no bgp default ipv4-unicast Rack1R1(config-router)#end Rack1R1# Rack1R1#sh run | b r b router bgp 1 bgp router-id 150.1.1.1 no bgp default ipv4-unicast neighbor 150.1.2.2 remote-as 1 neighbor 150.1.2.2 update-source Loopback0 ! address-family ipv4 neighbor 150.1.2.2 activate no auto-summary >>>>> 这些命令从全局BGP配置中继承到了ipv4的地址族中 no synchronization exit-address-family ! address-family vpnv4 neighbor 150.1.2.2 activate neighbor 150.1.2.2 send-community extended exit-address-family 再加一个全局BGP邻居会怎么样呢? Rack1R1#config ter Enter configuration commands, one per line. End with CNTL/Z. Rack1R1(config)#router bgp 1 Rack1R1(config-router)#nei 150.1.3.3 remot 1 Rack1R1(config-router)#nei 150.1.3.3 update-source lo0 Rack1R1(config-router)#end Rack1R1# Rack1R1#sh run | b r b router bgp 1 bgp router-id 150.1.1.1 no bgp default ipv4-unicast neighbor 150.1.2.2 remote-as 1 neighbor 150.1.2.2 update-source Loopback0 neighbor 150.1.3.3 remote-as 1 neighbor 150.1.3.3 update-source Loopback0 ! address-family ipv4 >>>>> 在ipv4地址族中没有150.1.3.3 的邻居 neighbor 150.1.2.2 activate no auto-summary no synchronization exit-address-family ! address-family vpnv4 neighbor 150.1.2.2 activate neighbor 150.1.2.2 send-community extended exit-address-family ! 由于“no bgp default ipv4-unicast”命令的关系,虽然建立了全局BGP的邻居,但它是不会出现在任何地址族中的。如果想在ipv4或vpnv4中起效果,就得在地址族中用“nei 150.1.3.3 active”把邻居激活: Rack1R1(config-router)#address-family ipv4 Rack1R1(config-router-af)#nei 150.1.3.3 activate Rack1R1(config-router-af)#exit Rack1R1(config-router)#end Rack1R1# Rack1R1#sh run | b r b router bgp 1 bgp router-id 150.1.1.1 no bgp default ipv4-unicast neighbor 150.1.2.2 remote-as 1 neighbor 150.1.2.2 update-source Loopback0 neighbor 150.1.3.3 remote-as 1 neighbor 150.1.3.3 update-source Loopback0 ! address-family ipv4 neighbor 150.1.2.2 activate neighbor 150.1.3.3 activate no auto-summary no synchronization exit-address-family ! address-family vpnv4 neighbor 150.1.2.2 activate neighbor 150.1.2.2 send-community extended exit-address-family
目的九
在一个较复杂的大型网络中,一般采用IBGP(内部边界网关协议)协议承载用户路由,一方面IBGP协议属性较多,利于实现各种复杂的路由控制策略,另一方面IBGP协议较为稳定,不会因为用户路由和其他AS(自治系统)路由的波动引发内部网络的不稳定性。但大型网络中流量很大,冗余性和冗灾性要求很高,因此从一个节点到另一个节点之间通常有多条路径实现冗余备份,如何在不同路径之间实现负载均衡也显得十分重要。
IBGP负载均衡存在的问题和局限性:
在一个复杂的大型网络中打开IBGP负载均衡可能会带来很难预料的结果。众所周知,在存在多条冗余路径时,IBGP按Weight(权重)、 Local Preference(本地优先)、AS-path(自治系统路径)、Origin Code(起源)、MED(公制值)、ROUTER_ID(路由器标识)等条件进行比较选路。
假设每条路由的Weight、Local Preference、AS-path、Origin Code完全一样,全网打开IBGP负载均衡,则从源到目的的所有路径上只要MED路径相同,均可实现负载分担,如此带来的弊端是一方面从源到目的的流量在大量路由器之间穿透,各路径之间的流量难以控制,另一方面目前INTERNET全网路由约20万条,各路由器路由转发表将十分庞大,对设备资源消耗过多,影响路由器的性能。
如果不打开IBGP的负载均衡,将会引发另外一个问题——如果目的网络有两台负载均衡路由器,假设源到目的路由的Weight、Local Preference、AS-path、 Origin Code、MED均相同,则根据IBGP选路顺序,在Weight、Local Preference、 AS-path、Origin Code、MED均相同的情况下,根据ROUTER_ID大小进行选路,因此从源到目的流量只选择ROUTER_ID小的路由器,不能做到负载均衡。 利用虚拟下一跳实现IBGP的负载均衡具体实现:
针对以上问题,可以采取利用虚拟下一跳实现IBGP的负载均衡办法。假设网络中
用IBGP承载用户路由,IGP(内部网关协议)为IS-IS(中间系统至中间系统),在两台目的路由器中分别设置一个虚拟相同的地址,在与其他IBGP邻居路由器宣告路由时,将该地址作(虚拟地市)为到达下一跳地址,在两台目的路由器上再分别配置一条静态路由,将该虚拟地址的下一跳指向真实的网络地址。采用该方式后,再看从源到目的的流量将如何选路。由于Weight、Local Preference、AS-path、Origin Code、MED均相同的情况下,强行将到达目的的路由下一跳指向相同的虚拟地址。该地址对于源路由器在选路时完全相同,将以负载均衡的方式分别发送到两台目的路由器。
采用此方法,还可以在目的路由器建立IBGP邻居中设置Route-map(路由图) 控制虚拟路由下一跳指向具体路由数量,而其他路由下一跳不变,提高路由的可控性。
通过采用虚拟下一跳的技术实现IBGP的负载均衡,对设备性能几乎无影响,实现简单,对于复杂网络有利于控制策略的部署。
实验环境 6台路由器组成,ISP-A 4台路由器运行在OSPF 1 area 0和BGP 100,R3和R4运行在BGP 200。 所有路由器的lo0地址为192.168.0.x/24,X为路由器编号,如R1则为192.168.0.1。 接口地址除了ISP-B外,均为172.16.XY.Z/24,例如R1和R3互联链路中,R1接口为172.16.13.1/24,R3为172.16.13.3/24。
为了实现ping通,R3和R4到ISP-A采用静态路由,在基本配置(只配置OSPF和BGP,不使用虚拟下一跳)后ISP-A的路由器到达172.31.34.0/24网段是通过R3,原因应为路由器router-id较低。 R5#show ip bgp Network Next Hop Metric LocPrf Weight Path * i172.31.34.0/24 172.16.24.4 0 100 0 200 i *>i 172.16.13.3 0 100 0 200 i R6# show ip bgp Network Next Hop Metric LocPrf Weight Path * i172.31.34.0/24 172.16.24.4 0 100 0 200 i *>i 172.16.13.3 0 100 0 200 i R5#traceroute 172.31.34.4 1 172.16.15.1 256 msec 100 msec 192 msec 2 172.16.13.3 324 msec 264 msec 236 msec 3 172.31.34.4 [AS 200] 512 msec * 236 msec //表明路由器是按照同一个下一跳到达ISP-B的。这个就是困扰运营商的问题所在了。
为实现虚拟下一跳负载均衡,补充在R1和R2的几个配置 使用route-map设置下一跳 R1(config)#ip prefix-list ISP-B seq 5 permit 172.31.34.0/24 //策略匹配目的网段 R1(config)#route-map set-nexthop permit 10 R1(config-route-map)# match ip address prefix-list ISP-B R1(config-route-map)# set ip next-hop 10.0.0.1 //action为下一跳 R1(config-route-map)#route-map set-nexthop permit 20 配置静态路由并重分发到OSPF中,将route-map应用到BGP中 R1(config)#ip route 10.0.0.1 255.255.255.255 172.16.13.3 R1(config)#router bgp 100 R1(config-router)# neighbor internal route-map set-nexthop out //这里是调用在neighbor group-peer模板中,作用是在neighbor邻居时把匹配route-map R1(config-router)#exit R1(config)#router ospf 1 R1(config-router)#redistribute static metric 10 metric-type 1 subnets //在IGP做静态路由的重分布 检测 R1和R2设置了next-hop后,ISP-A内部路由器如R5和R6的下一跳就已经修改过来 R5#show ip bgp Network Next Hop Metric LocPrf Weight Path * i172.31.34.0/24 10.0.0.1 0 100 0 200 i *>i 10.0.0.1 0 100 0 200 i 最后测试: R6#traceroute 172.31.34.4 1 172.16.26.2 396 msec 172.16.16.1 216 msec 172.16.26.2 108 msec 2 172.16.13.3 276 msec 172.16.24.4 192 msec 172.16.13.3 316 msec R5#traceroute 172.31.34.4 1 172.16.25.2 228 msec 172.16.15.1 100 msec 172.16.25.2 84 msec 2 172.16.13.3 264 msec 172.16.24.4 332 msec 172.16.13.3 204 msec 总结:
这个技术其实很简单,BGP是不支持负载均衡,但是IGP支持,由于BGP的查找是递归查找,可以利用IGP的负载均衡间接达到IBGP的负载均衡。前提是IGP是负载均衡的,静态路由是最好的负载方式之一。
针对CE而言,就是把目标网段的下一跳做了个转换:真实的下一跳虚拟的IP地址。相当于VRRP一样,而这时到达这个虚拟IP的是通过重分布静态得到的路由,实现了IGP的负载均衡。
表明负载均衡成功。配置中无需对ISP-B上设备做额外配置。本实验在dynamips使用3600路由器模拟实验通过。当然这不是唯一的方法,如果ISP-B上设备可配置,也可以在R3和R4上设置,将下一跳10.0.0.1的路由信息传送到ISP-A。
详细配置:(节选) R1#show run hostname R1 interface Loopback0 ip address 192.168.0.1 255.255.255.0 ! interface Ethernet0/0 ip address 172.16.15.1 255.255.255.0 half-duplex ! interface Ethernet0/1 ip address 172.16.12.1 255.255.255.0 half-duplex ! interface Ethernet0/2 ip address 172.16.16.1 255.255.255.0 half-duplex ! interface Ethernet0/3 ip address 172.16.13.1 255.255.255.0 half-duplex router ospf 1 log-adjacency-changes redistribute static metric 10 metric-type 1 subnets network 172.16.0.0 0.0.255.255 area 0 network 192.168.0.0 0.0.0.255 area 0 ! router bgp 100 no synchronization bgp router-id 192.168.0.1 bgp log-neighbor-changes neighbor internal peer-group neighbor internal remote-as 100 neighbor internal update-source Loopback0 neighbor internal route-map set-nexthop out neighbor 172.16.13.3 remote-as 200 neighbor 192.168.0.2 peer-group internal neighbor 192.168.0.5 peer-group internal neighbor 192.168.0.6 peer-group internal no auto-summary ip route 10.0.0.1 255.255.255.255 172.16.13.3 ip prefix-list ISP-B seq 5 permit 172.31.34.0/24 route-map set-nexthop permit 10 match ip address prefix-list ISP-B set ip next-hop 10.0.0.1 route-map set-nexthop permit 20 end R2#show run hostname R2 interface Loopback0 ip address 192.168.0.2 255.255.255.0 ! interface Ethernet0/0 ip address 172.16.26.2 255.255.255.0 half-duplex ! interface Ethernet0/1 ip address 172.16.12.2 255.255.255.0 half-duplex ! interface Ethernet0/2 ip address 172.16.25.2 255.255.255.0 half-duplex ! interface Ethernet0/3 ip address 172.16.24.2 255.255.255.0 half-duplex ! router ospf 1 log-adjacency-changes redistribute static metric 10 metric-type 1 subnets network 172.16.0.0 0.0.255.255 area 0 network 192.168.0.0 0.0.0.255 area 0 ! router bgp 100 no synchronization bgp router-id 192.168.0.2 bgp log-neighbor-changes neighbor internal peer-group neighbor internal remote-as 100 neighbor internal update-source Loopback0 neighbor internal route-map set-nexthop out neighbor 172.16.24.4 remote-as 200 neighbor 192.168.0.1 peer-group internal neighbor 192.168.0.5 peer-group internal neighbor 192.168.0.6 peer-group internal no auto-summary ! ip http server ip classless ip route 10.0.0.1 255.255.255.255 172.16.24.4 ! ip prefix-list ISP-B seq 5 permit 172.31.34.0/24 route-map set-nexthop permit 10 match ip address prefix-list ISP-B set ip next-hop 10.0.0.1 ! route-map set-nexthop permit 20 end R3#show run hostname R3 interface Loopback0 ip address 192.168.0.3 255.255.255.0 ! interface Ethernet0/0 ip address 172.31.34.3 255.255.255.0 half-duplex ! interface Ethernet0/3 ip address 172.16.13.3 255.255.255.0 half-duplex ! router bgp 200 no synchronization bgp log-neighbor-changes network 172.31.34.0 mask 255.255.255.0 neighbor 172.16.13.1 remote-as 100 neighbor 192.168.0.4 remote-as 200 neighbor 192.168.0.4 update-source Loopback0 no auto-summary ! ip http server ip classless ip route 0.0.0.0 0.0.0.0 172.16.13.1 end R4#show run hostname R4 interface Loopback0 ip address 192.168.0.4 255.255.255.0 ! interface Ethernet0/0 ip address 172.31.34.4 255.255.255.0 half-duplex ! interface Ethernet0/3 ip address 172.16.24.4 255.255.255.0 half-duplex ! router bgp 200 no synchronization bgp log-neighbor-changes network 172.31.34.0 mask 255.255.255.0 neighbor 172.16.24.2 remote-as 100 neighbor 192.168.0.3 remote-as 200 neighbor 192.168.0.3 update-source Loopback0 no auto-summary ! ip route 0.0.0.0 0.0.0.0 172.16.24.2 end R5#show run hostname R5 interface Loopback0 ip address 192.168.0.5 255.255.255.0 ! interface Ethernet0/0 ip address 172.16.15.5 255.255.255.0 half-duplex ! interface Ethernet0/1 ip address 172.16.56.5 255.255.255.0 half-duplex ! interface Ethernet0/2 ip address 172.16.25.5 255.255.255.0 half-duplex ! interface Ethernet0/3 no ip address shutdown half-duplex ! router ospf 1 log-adjacency-changes network 172.16.0.0 0.0.255.255 area 0 network 192.168.0.0 0.0.0.255 area 0 ! router bgp 100 no synchronization bgp router-id 192.168.0.5 bgp log-neighbor-changes neighbor internal peer-group neighbor internal remote-as 100 neighbor internal update-source Loopback0 neighbor 192.168.0.1 peer-group internal neighbor 192.168.0.2 peer-group internal neighbor 192.168.0.6 peer-group internal no auto-summary end R6#show run hostname R6 interface Loopback0 ip address 192.168.0.6 255.255.255.0 ! interface Ethernet0/0 ip address 172.16.26.6 255.255.255.0 half-duplex ! interface Ethernet0/1 ip address 172.16.56.6 255.255.255.0 half-duplex ! interface Ethernet0/2 ip address 172.16.16.6 255.255.255.0 half-duplex ! interface Ethernet0/3 no ip address shutdown half-duplex ! router ospf 1 log-adjacency-changes network 172.16.0.0 0.0.255.255 area 0 network 192.168.0.0 0.0.0.255 area 0 ! router bgp 100 no synchronization bgp router-id 192.168.0.6 bgp log-neighbor-changes neighbor internal peer-group neighbor internal remote-as 100 neighbor internal update-source Loopback0 neighbor 192.168.0.1 peer-group internal neighbor 192.168.0.2 peer-group internal neighbor 192.168.0.5 peer-group internal no auto-summary end
目的十
*和> R2#sh ip bgp //这就是3张表中的BGP表 BGP table version is 3, local router ID is 2.2.2.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 192.168.12.1 0 0 1 i *> 2.2.2.0/24 0.0.0.0 0 32768 i //*表示这条路由是可用的;>表示是最优的路由。 i R4#sh ip bgp //R1R2R4 BGP table version is 2, local router ID is 4.4.4.4 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path * i1.1.1.0/24 192.168.12.1 0 100 0 1 i *>i2.2.2.0/24 2.2.2.2 0 100 0 i //i表示是从内部AS学到的路由。图中,R4的1.1.1.1的路由是从R2(同AS)学到的。 //不打i的情况:本地通告和从EBGP学到的路由。例如R2学到的1.1.1.1的路由 //发现:R4的1.1.1.1是没有>号的,说明这个路由不是最优的。 r R2#sh ip bgp BGP table version is 3, local router ID is 2.2.2.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 192.168.1.1 0 0 2 i r>i2.2.2.0/24 192.168.1.3 1 100 0 ? r>i3.3.3.0/24 192.168.1.3 0 100 0 ? *>i4.4.4.0/24 192.168.1.3 0 100 0 3 i r>i192.168.1.0 192.168.1.3 0 100 0 ? //r表示同时从IGP和BGP学到这个路由,但是IGP的AD比BGP的AD小。 //打r的路由会:不放进路由表,但是会传给邻居 R2#sh ip bgp rib-failure Network Next Hop RIB-failure RIB-NH Matches 2.2.2.0/24 192.168.1.3 Higher admin distance n/a 3.3.3.0/24 192.168.1.3 Higher admin distance n/a 192.168.1.0 192.168.1.3 Higher admin distance n/a s R4#sh ip bgp //再看看R4(在R4上宣告的) BGP table version is 29, local router ID is 4.4.4.4 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 172.16.34.3 0 1 2 i *> 4.4.4.0/24 0.0.0.0 0 32768 i *> 192.168.4.0/22 0.0.0.0 32768 i s> 192.168.4.0 0.0.0.0 0 32768 i s> 192.168.5.0 0.0.0.0 0 32768 i s> 192.168.6.0 0.0.0.0 0 32768 i s> 192.168.7.0 0.0.0.0 0 32768 i *> 192.168.8.0 0.0.0.0 0 32768 i //打s的路由是被抑制掉的路由,它不会再向邻居传路由了。 目的十一
组网需求 如图1所示,所有路由器均为BGP路由器,RouterA和RouterB之间建立EBGP连接,RouterB、RouterC和RouterD之间建立IBGP全连接。
配置思路
采用如下的思路配置BGP的基本功能:
在RouterB、RouterC、RouterD之间配置IBGP连接。 在RouterA和RouterB之间配置EBGP连接。
在RouterA上通过network命令发布路由,查看RouterA、RouterB、RouterC的路由表信息。 在RouterB上配置BGP引入直连路由,查看RouterA、RouterC的路由表信息。
数据准备
为完成此配置例,需准备如下的数据:
RouterA的Router ID 1.1.1.1,所在的AS号65008。 RouterB、RouterC、RouterD的router id分别为2.2.2.2、3.3.3.3、4.4.4.4,所在的AS号65009。
命令配置
1、配置各接口的IP地址(略)
2、配置IBGP连接 # 配置RouterB。 [RouterB] bgp 65009
[RouterB-bgp] router-id 2.2.2.2
[RouterB-bgp] peer 9.1.1.2 as-number 65009 [RouterB-bgp] peer 9.1.3.2 as-number 65009 # 配置RouterC。 [RouterC] bgp 65009
[RouterC-bgp] router-id 3.3.3.3
[RouterC-bgp] peer 9.1.3.1 as-number 65009 [RouterC-bgp] peer 9.1.2.2 as-number 65009 # 配置RouterD。 [RouterD] bgp 65009
[RouterD-bgp] router-id 4.4.4.4
[RouterD-bgp] peer 9.1.1.1 as-number 65009 [RouterD-bgp] peer 9.1.2.1 as-number 65009
3、配置EBGP # 配置RouterA。 [RouterA] bgp 65008
[RouterA-bgp] router-id 1.1.1.1
[RouterA-bgp] peer 200.1.1.1 as-number 65009 # 配置RouterB。
[RouterB-bgp] peer 200.1.1.2 as-number 65008
4.7 广播MA网络中BGP下一跳的问题
MA网络中的ICMP重定向
关键看1.1.1.0/24的路由在各个路由器。 图中 本地路由器 C B A 其实不然,在MA网络中,每个路由器都开启了ICMP的重定向。
即从一个接口学习到的路由,又从这个接口出去了,我就会从这个接口发出一个ICMP重定向的报文,告诉那个教我学习路由的peer,跟他说,你不用再把这个路由传给我了。 So 本地路由器 A 到达目标网络 1.1.1.0/24 下一跳 路由器C 到达目标网络 1.1.1.0/24 1.1.1.0/24 1.1.1.0/24 下一跳(默认的) D D,知道该怎么做了吧! ?,这个??我想应该是B啊~~ 如果是NBMA网络模式(FR)
那就不一样了,因为封装的结构不一样,serial口没有ICMP重定向
要想建立连接,除非A和C之间建立映射关系(因为A和B,B和C都建立映射老)
4.8 BGP建立邻居的5个状态
Idle:查找我neighbor的邻居,并看是否有路由到达邻居。 Connect:我找到了邻居,并与它完成了TCP的3次握手。
Open sent:我开始向它发送我的Open包,里面含有我的基本信息。
Open confim:它收到了我的包,查看和它的信息是否一致,不一致不给我回包。 Exstablished:邻居建立,可以路由了。
常见的几种状态:
Idle:我neighbor你了,但是我的路由表里没有你的路由。解决:IGP路由可达。
Exstablished:邻居建立。sh ip bgp summary中,可以从state字段中看到的是数字,这个数
字代表我从邻居学习到了多少条路由
Active:如果出现这种情况,有四种可能性。
我的open包到你那了(说明我neighbor你了),但是你没有我的路由,可能出现的问题是: 1. 你neighbor我的地址配错了 2. 你根本没有neighbor我 3. 你,我,形同陌路
五、BGP的认证和汇总
5.1 BGP的认证
5.2 BGP的边界自动汇总
自动汇总会发生在:任何路由协议重分布到BGP中。
5.3 聚合(CIDR and Aggregate)
R4上做聚合
1. 先network 明细路由 2. 然后在aggregate
5.4 综合实验 实验要求
目的一:温习上节内容,完成基本的BGP配置 目的二:认识BGP建立邻居的5种状态
目的三:了解MA网络中下一跳的问题、ICMP的重定向,并比较MA网络中的EBGP建
立和点到点网络的不同。
目的四:了解BGP的认证
目的五:了解BGP的边界汇总(自动汇总和聚合) 目的六:了解各种BGP验证命令
目的一
自己动手,丰衣足食!!! 目的一
自己动手,丰衣足食!!! R(config)#timer bgp keeplive timer //全局修改keeplive时间 R(config)#router bgp 1 R(config-router)#neighbor x.x.x.x timer bgp keeplive timer //明确修改keeplive时间
目的三
整个实验拓扑是在MA网络中完成的。 R1#sh ip bgp summary Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.168.1.2 4 1 24 24 3 0 0 00:20:24 1 R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 4.4.4.0/24 192.168.1.3 0 1 3 i //R1和R2建立了EBGP的邻居关系,但是却把4.4.4.0的路由下一跳指向了R3。 R2#sh ip interface e0/0 Ethernet0/0 is up, line protocol is up ICMP redirects are always sent //因为R2的e0/0接口上的ICMP重定向默认是开启的。 目的四
接口上认证,呵呵,自己动手,丰衣足食!!! 目的五
自动汇总
自动汇总会发生在:任何路由协议重分布到BGP中。
在R2和R3上运行RIP,在R3上把RIP重分布到BGP中。
再次定义一下重分布:把本路由器运行A协议的所有接口和学习到的A协议的路由,重分布到B协议中。 任何协议BGP Auto-summary No auto-summary R3(config)#router bgp 1 R3(config-router)#no auto-summary //默认是关闭的 R3#sh run | b rip router rip network 3.0.0.0 network 192.168.1.0
验证:
R3#sh ip route rip 2.0.0.0/24 is subnetted, 1 subnets R 2.2.2.0 [120/1] via 192.168.1.2, 00:00:07, Ethernet0/0 R3#sh ip bgp Network Next Hop Metric LocPrf Weight Path 不携带原有的下一跳和metric 自动汇总 携带原有的下一跳和metric 不自动汇总 *>i1.1.1.0/24 192.168.1.1 0 100 0 2 i *> 2.0.0.0 0.0.0.0 0 32768 ? *> 3.0.0.0 0.0.0.0 0 32768 ? *> 4.4.4.0/24 172.16.34.4 0 0 3 i *> 192.168.1.0 0.0.0.0 0 32768 ? R2#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 192.168.1.1 0 0 2 i *>i2.0.0.0 192.168.1.3 0 100 0 ? *>i3.0.0.0 192.168.1.3 0 100 0 ? *>i4.4.4.0/24 192.168.1.3 0 100 0 3 i r>i192.168.1.0 192.168.1.3 0 100 0 ? 现在再温故一下重分布的定义:把所有的运行A协议的接口和学习到A协议的路由,重分布到B协议中。 其中: 1. Next Hop是0.0.0.0表示自己发出的路由 2. 重分布进来的RIP是没有metric的 R3(config)#router bgp 1 R3(config-router)#auto-summary //开启 验证: R3#sh ip bgp Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 192.168.1.1 0 100 0 2 i *> 2.2.2.0/24 192.168.1.2 1 32768 ? *> 3.3.3.0/24 0.0.0.0 0 32768 ? *> 4.4.4.0/24 172.16.34.4 0 0 3 i *> 192.168.1.0 0.0.0.0 0 32768 ? R2#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 192.168.1.1 0 0 2 i r>i2.2.2.0/24 192.168.1.3 1 100 0 ? r>i3.3.3.0/24 192.168.1.3 0 100 0 ? *>i4.4.4.0/24 192.168.1.3 0 100 0 3 i r>i192.168.1.0 192.168.1.3 0 100 0 ? //r表示同时从IGP和BGP学到这个路由,但是IGP的AD比BGP的AD小。 //打r的路由会:不放进路由表,但是会传给邻居 R2#sh ip bgp rib-failure Network Next Hop RIB-failure RIB-NH Matches 2.2.2.0/24 192.168.1.3 Higher admin distance n/a 3.3.3.0/24 192.168.1.3 Higher admin distance n/a 192.168.1.0 192.168.1.3 Higher admin distance n/a
聚合 1、 静态聚合
步骤:
1. 手工写静态路由指NULL0 2. Network+汇总路由 R4(config)#ip route 192.168.4.0 255.255.252.0 null0 R4(config)#router bgp 3 R4(config-router)#network 192.168.4.0 mask 255.255.252.0 R4#sh ip route 1.0.0.0/24 is subnetted, 1 subnets B 1.1.1.0 [20/0] via 172.16.34.3, 00:30:46 C 192.168.8.0/24 is directly connected, Loopback5 4.0.0.0/24 is subnetted, 1 subnets C 4.4.4.0 is directly connected, Loopback0 172.16.0.0/24 is subnetted, 1 subnets C 172.16.34.0 is directly connected, Serial1/0 C 192.168.4.0/24 is directly connected, Loopback1 C 192.168.5.0/24 is directly connected, Loopback2 C 192.168.6.0/24 is directly connected, Loopback3 C 192.168.7.0/24 is directly connected, Loopback4 S 192.168.4.0/22 is directly connected, Null0 R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 172.16.34.3 0 1 2 i *> 4.4.4.0/24 0.0.0.0 0 32768 i *> 192.168.4.0/22 0.0.0.0 0 32768 i R1#sh ip route 1.0.0.0/24 is subnetted, 1 subnets C 1.1.1.0 is directly connected, Loopback0 4.0.0.0/24 is subnetted, 1 subnets B 4.4.4.0 [20/0] via 192.168.1.2, 00:32:42 C 192.168.1.0/24 is directly connected, Ethernet0/0 B 192.168.4.0/22 [20/0] via 192.168.1.2, 00:04:09 R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 0.0.0.0 0 32768 i *> 4.4.4.0/24 192.168.1.2 0 1 3 i *> 192.168.4.0/22 192.168.1.2 0 1 3 i 2、 Aggregate(聚合)
基本的聚合(summary-only)
没有做汇总前 R4 (config)#router bgp 1 R4(config-router)#network 192.168.4.0 R4(config-router)#network 192.168.5.0 R4(config-router)#network 192.168.6.0 R4(config-router)#network 192.168.7.0 R4(config-router)#network 192.168.8.0 R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 4.4.4.0/24 192.168.1.2 0 1 3 i *> 192.168.4.0 192.168.1.2 0 1 3 i *> 192.168.5.0 192.168.1.2 0 1 3 i *> 192.168.6.0 192.168.1.2 0 1 3 i *> 192.168.7.0 192.168.1.2 0 1 3 i *> 192.168.8.0 192.168.1.2 0 1 3 i 做了汇总后 R4(config-router)#aggregate-address 192.168.4.0 255.255.252.0 summary-only ? advertise-map Set condition to advertise attribute as-set Generate AS set path information //AS-set属性 attribute-map Set attributes of aggregate //调用分发列表 route-map Set parameters of aggregate //调用route-map summary-only Filter more specific routes from updates //只传汇总路由 suppress-map Conditionally filter more specific routes from updates //策略抑制路由 假如我想汇总,并且只抑制4和5网段的路由 R4(config)#ip prefix-list 1 permit 192.168.4.0/23 ge 24 le 24 如果用access-list,则: R4(config)#access-list 1 permit 192.168.4.0 0.0.1.0 R4(config)#route-map map 10 R4(config-route-map)#match ip address prefix-list 1 R4(config)#router bgp 3 R4(config-router)# aggregate-address 192.168.4.0 255.255.252.0 suppress-map map R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 0.0.0.0 0 32768 i *> 4.4.4.0/24 192.168.1.2 0 1 3 i *> 192.168.4.0/22 192.168.1.2 0 1 3 i *> 192.168.6.0 192.168.1.2 0 1 3 i *> 192.168.7.0 192.168.1.2 0 1 3 i *> 192.168.8.0 192.168.1.2 0 1 3 i //是不是4和5的网段没了~呵呵。 特殊的汇总(AS-set) 上面的例子是在一个路由器上做明细路由的起源并汇总。 但是如果是一个路由器上做明细路由,另一个路由器上做汇总。 其实,假想R4是运营商,它没有提供汇总,我公司的R3在EBGP上也可以做汇总。 R3(config-router)# aggregate-address 192.168.4.0 255.255.252.0 summary-only //R3接受了R4的明细通告,并在R3上做了汇总 按理说,R4把明细路由传给了R3,R3汇总给R1和R2是可以的 但是,R3可能把汇总路由回传给R4吗?不是有EBGP水平分割吗 R3#sh ip bgp Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 192.168.1.1 0 100 0 2 i *> 4.4.4.0/24 172.16.34.4 0 0 3 i *> 192.168.4.0/22 0.0.0.0 32768 i s> 192.168.4.0 172.16.34.4 0 0 3 i s> 192.168.5.0 172.16.34.4 0 0 3 i s> 192.168.6.0 172.16.34.4 0 0 3 i s> 192.168.7.0 172.16.34.4 0 0 3 i //看到了R3上学到R4明细路由的Path字段都打上了3(AS为3),而汇总路由却没有打上。 R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 172.16.34.3 0 1 2 i *> 4.4.4.0/24 0.0.0.0 0 32768 i *> 192.168.4.0 0.0.0.0 0 32768 i *> 192.168.4.0/22 172.16.34.3 0 0 1 i *> 192.168.5.0 0.0.0.0 0 32768 i *> 192.168.6.0 0.0.0.0 0 32768 i *> 192.168.7.0 0.0.0.0 0 32768 i //R4上学习到这条汇总路由,下一跳还是172.16.34.3 确实R4收到了R3的汇总回传,但是这样的效果好吗? 看看,当AS3的R4下有很多路由器时,比如某一台R8。这时的R8上会有R4的明细和一条汇总路由。 当R4上的某一条明细如5.1,down掉后,汇总并没有down,每台路由器上都还有。 这时,R8 ping 5.1 R8通过汇总路由R4通过汇总路由R3丢掉了,因为明细down掉了。 这样,本来是到R4上就down了(明细在R4上),却非要经过一个EBGP链路。罪魁祸首是那条汇总路由。 所以,当R4收不到到了R3的汇总回传,问题不就解决了!!在看看,怎么解决? R3#sh ip bgp Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 192.168.1.1 0 100 0 2 i *> 4.4.4.0/24 172.16.34.4 0 0 3 i *> 192.168.4.0/22 0.0.0.0 32768 i s> 192.168.4.0 172.16.34.4 0 0 3 i s> 192.168.5.0 172.16.34.4 0 0 3 i s> 192.168.6.0 172.16.34.4 0 0 3 i s> 192.168.7.0 172.16.34.4 0 0 3 i //想想,如果R3在做汇总的时候,path带上3(AS为3),那么不就不会回传给R4了,因为有EBGP的水平分割咋! R3(config-router)# aggregate-address 192.168.4.0 255.255.252.0 summary-only as-set //命令的作用是使明细路由的BGP属性恢复到聚合路由上 //任何一个明细都会使这个聚合带上BGP属性 R3#sh ip bgp Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 192.168.1.1 0 100 0 2 i *> 4.4.4.0/24 172.16.34.4 0 0 3 i s> 192.168.4.0 172.16.34.4 0 0 3 i *> 192.168.4.0/22 0.0.0.0 100 32768 3 i s> 192.168.5.0 172.16.34.4 0 0 3 i s> 192.168.6.0 172.16.34.4 0 0 3 i s> 192.168.7.0 172.16.34.4 0 0 3 i //R3的聚合路由已经带上了AS3了。 R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 172.16.34.3 0 1 2 i *> 4.4.4.0/24 0.0.0.0 0 32768 i *> 192.168.4.0 0.0.0.0 0 32768 i *> 192.168.5.0 0.0.0.0 0 32768 i *> 192.168.6.0 0.0.0.0 0 32768 i *> 192.168.7.0 0.0.0.0 0 32768 i //R4上已经没有聚合路由了,说明被EBGP水平分割啦 R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 0.0.0.0 0 32768 i *> 4.4.4.0/24 192.168.1.2 0 1 3 i *> 192.168.4.0/22 192.168.1.2 0 1 3 i //R1上照常有聚合路由,看,是不是带上了1和3了。 目的六 Clear bgp命令 #clear ip bgp * //清理所有的BGP邻居(包括TCP session) #clear ip bgp * soft in/out //软清,不断开tcp session,要求BGP邻居重新发送一次路由过来 #clear ip bgp neighbor y.y.y.y soft in/out R1(config)#neighbor y.y.y.y soft-reconfiguration inbound //这条命令是把Y邻居发来的路由在我的内存中存一份,路由更新直接找内存中的计算 R1#show ip bgp neighbor y.y.y.y receive-route //查看存的那份路由表 Sh ip bgp nei x.x.x.x advertised-routers //看我发出了多少路由 Sh ip bgp summary Sh ip bgp rib-failure Sh ip bgp nei Sh ip bgp nei y.y.y.y receiver-routers //看我收到了多少路由,必须有上面的命令。 八、BGP的路径属性 BGP的metric就是我们说的路径属性 Well-known(公认)和optional(任选)关于是否识别。 Mandatory(必遵)和discretionary(可选)关于是否遵守。 Transitive(传递)和nontransitive(非可传递)关于传播范围。 于是,有了组合: 公认必决:这个属性大家都识别,但是传递路由必须带。 公认可选:这个属性大家都识别,但是传递路由可带可不带。 任选可传递:这个路由属性给了我,我不懂,但是我会传。 任选非可传递:这个路由属性给了我,我不懂,但是我不须传。 8.1 三个公认必遵的属性: 8.11 AS Path AS path:每条BGP路由穿越AS时便带上自己的AS号,不多说,防环用的。 默认的,最新的AS在最左边,依次累计..... 8.12 Next-hop 在IGP中,一条明细路由的下一跳是直连接口 在BGP中,一条明细的BGP路由的下一跳是BGP邻居 Next-hop:每条BGP都会携带,下一跳不可达时,BGP路由就没有‘>’ 8.13 Origin Origin(起源属性): i e ? 在BGP中network xxxx EGPBGP(现在估计没有了) IGP or StaticBGP 8.2 BGP选路原则 出现选路的前提: 同步(可以关闭同步)+最优路由(‘>’) 比较,选路…… 1. 最高的weight值(Cisco私有) 2. 最高的本地优先级,在AS内 3. 优先与本地路由 4. 穿越最短的AS区域 5. 最小的起源值(i 8. 优先与最近(metric值最小)的IGP邻居 9. 谁先和我建立EBGP,谁优先 10. 最小的BGP邻居的route-id 注:2和6是最常用的可选项策略;8(IBGP间)和10(EBGP间)是默认情况下的选路。 那我们开始正式学习BGP的各个属性,其实,我们可以理解成属性就是BGP下挂的很多字段,你不设置它,它就没有… 分析BGP属性,要掌握顺序: 1. 传播范围 2. 默认值 3. 越大越好还是越小越小 8.21 Weight属性 Cisco私有属性 任选非可传递 传播范围:本地有效 默认值:0(从BGP邻居那里学的)和32768(本地宣告的路由) 越大越好,越大越优先 通常,weight值可以对路由进行策略,为其选路,但是只能策略修改从邻居学到路由的weight值,不能修改发给邻居的weight值 这个属性是自己决定的 8.22 Local-Priority(本地优先级)属性 这个属性是公认可选的。 传播范围:只能在一个AS内部,即只能给自己的IBGP邻居。 默认值:默认是100 越大越好。越大越优先 通常,local-priority是出口路由器用来通告给IBGP邻居,告诉它们怎么离开这个AS。 这个属性是别人(IBGP邻居)决定你的 8.23 Route origin by Local route(next hop=0.0.0.0) 公认必决属性 怎么说呢?比如: Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 0.0.0.0 0 100 0 1 i * i 2.2.2.2 0 100 0 1 i //这样的情况很难看到啊!自己宣告的路由,还会总从别人那里学到…….. 8.24 Shortest AS path 优先于携带AS path最少的router 扩展命令: R(config)#router bgp XX R(config-router)#bgp bestpath as-path ignore //跳过这一个选路原则 8.25 Origin Code R4#sh ip bgp BGP table version is 2, local router ID is 4.4.4.4 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path * i1.1.1.0/24 192.168.12.1 0 100 0 1 i *>i2.2.2.0/24 2.2.2.2 0 100 0 i i e ? 在BGP中network xxxx EGPBGP(现在估计没有了) IGP or StaticBGP 选路原则中IGP MED就是BGP中的metric 这个属性是可选非穿越的 传播范围:仅仅EBGP邻居之间 默认值:0或空 越小越好,越小越优先 通常,MED用来通告给同一个AS的不同EBGP邻居,告诉它们怎么进入自己的AS。 这个属性是别人(EBGP)决定你的。 这个属性在IBGP之间也会作用到 扩展: R(config)#router bgp XX R(config-router)#bgp always-compare-med //我们知道只有同一个AS的不同EBGP邻居才能体现出MED的作用 //这条命令是同一路由不管是同一AS还是不同,都比较MED 8.3 BGP Filter 8.31 AS-path fiter list 1. 自己通告的路由,As-path是空 2. 可以在As-path中选择有某指定AS号的路由(下图) 3. 只从某些BGP邻居接受特定AS的路由 //匹配特定的AS号的路由 对于AS-path的正则表达式 | 表示逻辑或关系 什么都不打 [] . ^ $ _ \\ * ? 表示逻辑与关系 表示任意匹配里面的某一个字符 表示任意字符 表示以某某开始 表示以某某结束 表示任意分隔符 表示转义符 表示0个或多个字符 表示0个或一个字符 + 表示一个或多个字符 例子: 31|21:表示即31和21之间任意选一个 [1-4].[23]:表示1到4任意选一个+任意字符+2和3任意选一个 _100_:表示AS-path里有as 100,即穿越了as 100 ^100$:表示起源于as 100,又以as 100结束,即就只连接了as 100 _100$:表示以as 100结束,即起源于as 100,其间穿越的as不管 ^100_:表示以as 100开始,即我的邻居就是as 100 ^(0-9)+$:表示AS里有0-9里的单个字符,出现了一次或多次,即AS是0 1 2... ^([0-9]+)(100)+(_\\1\\2)*$:转义中\\1代表[0-9],\\2代表100,它们都继承了(_\\1\\2)*的*,即0-9中任选一个或者是as 100或者是两者结合,可以多次 ^([0-9])+(_\\1)*$: ^$:表示是起源是自己 ^*:表示匹配所有 23 45和23 78 45:_23(_78)?_45_ 执行: In和Out方向:先是prefix-list,然后filter-list 重分布:利用distribute list来调用各种list对IGPBGP的重分布做路由的filter 8.32 Prefix-list -----------------------------------------------------------------“具体在路由重分布中讲过” 8.33 ORF(Outbound Route Filter) 假设AS2要对AS1的10w条路由做in方向的filter,如果AS2的EBGP的路由器: --性能不好,海量的路由过滤导致CPU利用过高 --ISP不同,不同的ISP不会为对方做任何事 --效率不高,带宽浪费在链路上 这时,我们会考虑能不能直接在AS1上做呢? 是可以的,AS2上配置的ORF会向指定的BGP session发送一条ORF_list filter,接受到的AS1会根据AS2发来的ORF做相应的过滤 ORF报文 是否具备ORF的字段是在BGP对等体之间发送的open包里能力字段 具体的ORF filter信息是在BGP对等体之间的refresh message ORF type 多种type,但是cisco只能支持prefix-list 8.4 Route-map在BGP Route-map在BGP里意义重大 它可以匹配: 1. 2. 3. 4. 5. 6. 7. 8. 1. 2. 3. 4. 5. 6. 各种ACL 路由的源,即从哪发起的 BGP下一跳地址 BGP起源 Tag AS-path BGP的社团属性 IGP的路由类型(外部和内部) 它可以set: 起源 下一跳 Weight值 BGP的社团属性 本地优先级 MED Policy list在route-map中的支持 在route-map中能match的参数庞大,随之的密度大为我们配置、查看和增删带来了麻烦 Policy list是一个专门match参数的集合,相当于一个模板 Route-map可以直接match一个policy list,这样一来,我们可以有条件的查看和增删 Continue参数 如果一个route-map里有多个序列号(10、20、30....) 默认的,假如到了20匹配了,我就不看30了 Continue参数能手动指定到哪里我跳出 Prefix-list在route-map R4(config-router-map)#match ip address prefix-list list-number //匹配一个IP地址 R4(config-router-map)#match ip next-hop-address prefix-list list-number //匹配一个next-hop的地址 R4(config-router-map)#match ip source-route prefix-list list-number //只匹配一个BGP邻居(具备BGP session)的发来的路由 //这里的source-route是邻居的route-id 8.5 实验来个 实验要求 目的一:再次了解IBGP和EBGP的基本配置 目的二:了解R4对X路由的选择路径 目的三:了解weight属性 目的四:了解local-priority属性在AS内部的策略选路 目的五:了解Shortest AS path属性 目的六:了解origin code属性 目的七:了解BGP filter 目的八:了解MED属性在AS之间的策略选路 目的一 目的二: R4X:可以从R3到R1再到X;也可以从R2到R1再到X 如果什么属性都不配置,R4到x路由------ 如果AS2内IGP是OSPF呢?如果RIP呢? OSPF metric值的计算和RIP metric值的计算不同咋 所以 OSPF选路是优先来的与最近(metric值最小)的IGP邻居。 而RIP选路是最小的BGP邻居的route-id R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 3.3.3.3 0 100 0 1 i * i 2.2.2.2 0 100 0 1 i 优先是从R3,因为R4到R3是ethernet,metric值小些 R4#sh ip bgp 1.1.1.0/24 BGP routing table entry for 1.1.1.0/24, version 3 Paths: (2 available, best #1, table Default-IP-Routing-Table) Not advertised to any peer 1 3.3.3.3 (metric 11) from 3.3.3.3 (3.3.3.3) Origin IGP, metric 0, localpref 100, valid, internal, best 1 2.2.2.2 (metric 65) from 2.2.2.2 (2.2.2.2) Origin IGP, metric 0, localpref 100, valid, internal 为什么不是10和64呢? 呵呵,因为IBGP之间的neighbor是指的对方的环回口咋….. 目的三: 我们再在R1上起一条8.8.8.0/24的路由 R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path * i1.1.1.0/24 2.2.2.2 0 100 0 1 i *>i 3.3.3.3 0 100 0 1 i *>i8.8.8.0/24 3.3.3.3 0 100 0 1 i * i 2.2.2.2 0 100 0 1 i 看看,都是从R3走。 R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 0.0.0.0 0 32768 i *> 8.8.8.0/24 0.0.0.0 0 32768 i 现在我们想让R4到8.8.8.0/24的路由走R2,利用weight值来做策略。 可以在R4的入方向和R2的出方向上做,因为X路由是从R1,经过R2,传给R4的。 先来看看: R4(config-router)#neighbor 2.2.2.2 weight 1 注:默认是策略进来的路由,不是出去的路由 R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path * i1.1.1.0/24 3.3.3.3 0 100 0 1 i *>i 2.2.2.2 0 100 1 1 i * i8.8.8.0/24 3.3.3.3 0 100 0 1 i *>i 2.2.2.2 0 100 1 1 i 看,weight值改成1了,都从R2走了,显然不是我们要的效果。 因为这样修改太厉害了……. 这时,我们可以用route-map来进行策略。 R4(config)#ip prefix-list 1 permit 8.8.8.0/24 R4(config)#route-map map R4(config-route-map)#match ip address prefix-list 1 R4(config-route-map)#set weight 3(大于0即可) R4(config)#route-map map premit 20 R4(config)#router bgp 2 R4(config-router)#neighbor 2.2.2.2 route-map map in R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path * i1.1.1.0/24 2.2.2.2 0 100 0 1 i *>i 3.3.3.3 0 100 0 1 i *>i8.8.8.0/24 2.2.2.2 0 100 1 1 i * i 3.3.3.3 0 100 0 1 i //看呀,效果是不是达到了啊……. 目的四: 现在我们想让R4到8.8.8.0/24的路由走R2,利用local-priority来做策略。 由于local-priority是邻居宣告过来的,所以要R4想走R2,必须在R2上做策略。 还是先来个厉害的,让1.1.1.0/24 and 8.8.8.0/24都从R2走。 R2(config)#router bgp 2 R2(config-router)#bgp default local-preference 101 R4#sh ip bgp BGP table version is 9, local router ID is 4.4.4.4 Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 2.2.2.2 0 101 0 1 i *>i8.8.8.0/24 2.2.2.2 0 101 0 1 i //优先级变了,都从R2走了。 R2#sh ip b Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 192.168.12.1 0 0 1 i *> 8.8.8.0/24 192.168.12.1 0 0 1 i //R2做的local-priority策略,R2上怎么没有显示呢?通常,对于自己宣告的路由,一般local preference显示的是空 R2#sh ip bgp 1.1.1.0/24 BGP routing table entry for 1.1.1.0/24, version 4 Paths: (1 available, best #1, table Default-IP-Routing-Table) Advertised to update-groups: 2 1 192.168.12.1 from 192.168.12.1 (1.1.1.1) Origin IGP, metric 0, localpref 101, valid, external, best //这样可以看到本地宣告的localpref!!! 针对bgp default local-preference 101的扩展 对network xxxx是否起效 对EBGP xxxx是否起效(上面是实验证明是--可以的) 对IBGP xxxx是否起效 对aggregate xxxx是否起效 厉害的来完了,我们还是回归正题吧,要利用local-priority使8.8.8.0/24从R2走,还是要用route-map滴…….可以在R2的出接口上做策略。 R2(config)#access-list 1 permit 8.8.8.0 0.0.0.255 R2(config)#route-map map R2(config-route-map)#match ip address 1 R2(config-route-map)#set local-preference 101 R2(config)#route-map map permit 20 R2(config)#router bgp 2 R2(config-router)#neighbor 4.4.4.4 route-map map out R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 3.3.3.3 0 100 0 1 i * i 2.2.2.2 0 100 0 1 i * i8.8.8.0/24 3.3.3.3 0 100 0 1 i *>i 2.2.2.2 0 101 0 1 i 效果达到了,想想,和weight值选路一样,local-priority也是用的route-map……. 目的五: 现在我们想让R4到8.8.8.0/24的路由走R2,利用shortest AS path来做策略。 我们知道,只有穿越了AS,才会携带AS path属性,相同AS内的各个路由器的AS path都是一致的 所以,我们可以在R1的出方向做策略。 R1(config)#ip prefix-list 1 permit 8.8.8.0/24 R1(config)#route-map map R1(config-route-map)#match ip address prefix-list 1 R1(config-route-map)#set as-path ? prepend Prepend to the as-path tag Set the tag as an AS-path attribute R1(config-route-map)#set as-path prepend 6 7 8 R1(config)#route-map map premit 20 R1(config)#router bgp 1 R1(config-router)#neighbor 192.168.13.2 route-map map out //策略是R1在给R3传8.8.8.0/24的时候,增加了6 7 8的AS path属性。 验证 R3#sh ip bgp Network Next Hop Metric LocPrf Weight Path * i1.1.1.0/24 2.2.2.2 0 100 0 1 i *> 192.168.13.1 0 0 1 i *>i8.8.8.0/24 2.2.2.2 0 100 0 1 i * 192.168.13.1 0 0 1 6 7 8 i //在R3上,8.8.8.0/24的路由AS path属性增加了6 7 8,路径变了。 为什么不是6 7 8 1呢? 原来,prepend意思是在……之前。就是说,8.8.8.0/24这条路由在出之前,AS path里已经有了6 7 8了。 R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 3.3.3.3 0 100 0 1 i * i 2.2.2.2 0 100 0 1 i *>i8.8.8.0/24 2.2.2.2 0 100 0 1 i //R4到8.8.8.0/24的路由从R2走了,哈哈!! 我们也可以在R3的入方向上做 R3(config)#ip prefix-list 1 permit 8.8.8.0/24 R3(config)#route-map map R3(config-route-map)#match ip address prefix-list 1 R3(config-route-map)#set as-path prepend 6 7 8 R3(config)#route-map map premit 20 R3(config)#router bgp 1 R3(config-router)#neighbor 192.168.13.1 route-map map in R3#sh ip bgp Network Next Hop Metric LocPrf Weight Path * i1.1.1.0/24 2.2.2.2 0 100 0 1 i *> 192.168.13.1 0 0 1 i *>i8.8.8.0/24 2.2.2.2 0 100 0 1 i * 192.168.13.1 0 0 6 7 8 1 i 按上面的说,为什么不是1 6 7 8呢? 其实,route map是在in方向做的。就是说,在in之前加上6 7 8,而R3 in之前,R1 out已经带上了AS 1了。 R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 3.3.3.3 0 100 0 1 i * i 2.2.2.2 0 100 0 1 i *>i8.8.8.0/24 2.2.2.2 0 100 0 1 i //效果达到了…….. 但是,前面的6 7 8是我们随便起的AS,假设连接的AS中真的有6 7 8呢,不就造成了EBGP的环路了吗? 呵呵,就拓扑来,我可以打上三个AS 1: R3(config-route-map)#set as-path prepend 2 2 2 //这样便行了,实际中最好是这样…… 目的六: R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 0.0.0.0 0 32768 i *> 4.4.4.0/24 192.168.1.2 0 1 3 i *> 192.168.4.0 192.168.1.2 0 1 3 i *> 192.168.5.0 192.168.1.2 0 1 3 i *> 192.168.6.0 192.168.1.2 0 1 3 i *> 192.168.7.0 192.168.1.2 0 1 3 i *> 192.168.8.0 192.168.1.2 0 1 3 i 针对192.168.4.0做一下修改,把起源属性i变成e R1(config)#ip prefix-list 2 permit 192.168.4.0/24 R3(config)#route-map orgin R3(config-route-map)#match ip address prefix-list 2 R3(config-route-map)#set orgin egp 2 R3(config)#route-map orgin permit 20 R3(config)#router bgp 1 R3(config-router)#neighbor 192.168.34.4 route-map orgin in 目的七: AS-path filter 目的一是R1只允许来自的路由的as-pah是以300结束的,即起源于300 在没有做之前 R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 10.1.1.0/24 2.2.2.2 0 0 200 i *> 10.1.2.0/24 2.2.2.2 0 0 200 i *> 10.1.3.0/24 2.2.2.2 0 0 200 i *> 10.1.4.0/24 2.2.2.2 0 0 200 i *> 172.16.1.0/24 0.0.0.0 0 32768 i *> 172.16.2.0/24 0.0.0.0 0 32768 i *> 172.16.3.0/24 0.0.0.0 0 32768 i *> 172.16.4.0/24 0.0.0.0 0 32768 i *> 192.168.1.0 2.2.2.2 0 200 300 i *> 192.168.2.0 2.2.2.2 0 200 300 i *> 192.168.3.0 2.2.2.2 0 200 300 i //看来只有黑色的路由符合我们的需求 R1(config)#ip as-path access-list 1 permit _300$ R1#sh ip bgp filter-list 1 Network Next Hop Metric LocPrf Weight Path *> 192.168.1.0 2.2.2.2 0 200 300 i *> 192.168.2.0 2.2.2.2 0 200 300 i *> 192.168.3.0 2.2.2.2 0 200 300 i //可以通过这个show命令来过滤show的结果 R1(config)#router bgp 100 R1(config-router)#neighbor 2.2.2.2 filter-list 1 in //把filter-list调用到BGP中,通过neighbor来进行过滤 R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 0.0.0.0 0 32768 i *> 172.16.2.0/24 0.0.0.0 0 32768 i *> 172.16.3.0/24 0.0.0.0 0 32768 i *> 172.16.4.0/24 0.0.0.0 0 32768 i *> 192.168.1.0 2.2.2.2 0 200 300 i *> 192.168.2.0 2.2.2.2 0 200 300 i *> 192.168.3.0 2.2.2.2 0 200 300 i //起源于as200被过滤掉了,只保留了起源于as300的 目的二R1只保留起源as300的这些路由,并使它的weight为10 利用route-map可以对匹配的路由进行属性的设定 R1(config)#ip as-path access-list 1 permit _300$ R1(config)#route-map map 10 R1(config-route-map)#match as-path 1 R1(config-route-map)#set weight 10 R1(config)#router bgp 100 R1(config-router)#neighbor 2.2.2.2 route-map map in R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 0.0.0.0 0 32768 i *> 172.16.2.0/24 0.0.0.0 0 32768 i *> 172.16.3.0/24 0.0.0.0 0 32768 i *> 172.16.4.0/24 0.0.0.0 0 32768 i *> 192.168.1.0 2.2.2.2 10 200 300 i *> 192.168.2.0 2.2.2.2 10 200 300 i *> 192.168.3.0 2.2.2.2 10 200 300 i 目的三 只允许R2给R1发送由自己产生的BGP路由,穿越的路由不允许 R2没有做之前 R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 10.1.1.0/24 2.2.2.2 0 0 200 i *> 10.1.2.0/24 2.2.2.2 0 0 200 i *> 10.1.3.0/24 2.2.2.2 0 0 200 i *> 10.1.4.0/24 2.2.2.2 0 0 200 i *> 172.16.1.0/24 0.0.0.0 0 32768 i *> 172.16.2.0/24 0.0.0.0 0 32768 i *> 172.16.3.0/24 0.0.0.0 0 32768 i *> 172.16.4.0/24 0.0.0.0 0 32768 i *> 192.168.1.0 2.2.2.2 0 200 300 i *> 192.168.2.0 2.2.2.2 0 200 300 i *> 192.168.3.0 2.2.2.2 0 200 300 i //什么都没有 R2(config)#ip as-path access-list 1 permit ^$ R2(config)#router bgp 100 R2(config-router)#neighbor 3.3.3.3 filter-list 1 out //要注意这里是out //这里的意思是:对于R3来的路由,我在所有接口的out方向,做filter-list过滤 R2#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 10.1.1.0/24 0.0.0.0 0 32768 i *> 10.1.2.0/24 0.0.0.0 0 32768 i *> 10.1.3.0/24 0.0.0.0 0 32768 i *> 10.1.4.0/24 0.0.0.0 0 32768 i *> 172.16.1.0/24 1.1.1.1 0 0 100 i *> 172.16.2.0/24 1.1.1.1 0 0 100 i *> 172.16.3.0/24 1.1.1.1 0 0 100 i *> 172.16.4.0/24 1.1.1.1 0 0 100 i *> 192.168.1.0 3.3.3.3 0 0 300 i *> 192.168.2.0 3.3.3.3 0 0 300 i *> 192.168.3.0 3.3.3.3 0 0 300 i //红的是自己产生的,蓝的是R3产生的即将传给R1的 R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 10.1.1.0/24 2.2.2.2 0 0 200 i *> 10.1.2.0/24 2.2.2.2 0 0 200 i *> 10.1.3.0/24 2.2.2.2 0 0 200 i *> 10.1.4.0/24 2.2.2.2 0 0 200 i *> 172.16.1.0/24 0.0.0.0 0 32768 i *> 172.16.2.0/24 0.0.0.0 0 32768 i *> 172.16.3.0/24 0.0.0.0 0 32768 i *> 172.16.4.0/24 0.0.0.0 0 32768 i //R1上只有10网段的路由,说明R3传来的路由被R2过滤掉了 目的四是用prefix-list做过滤 在没有做之前 R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 10.1.1.0/24 2.2.2.2 0 0 200 i *> 10.1.2.0/24 2.2.2.2 0 0 200 i *> 10.1.3.0/24 2.2.2.2 0 0 200 i *> 10.1.4.0/24 2.2.2.2 0 0 200 i *> 172.16.1.0/24 0.0.0.0 0 32768 i *> 172.16.2.0/24 0.0.0.0 0 32768 i *> 172.16.3.0/24 0.0.0.0 0 32768 i *> 172.16.4.0/24 0.0.0.0 0 32768 i *> 192.168.1.0 2.2.2.2 0 200 300 i *> 192.168.2.0 2.2.2.2 0 200 300 i *> 192.168.3.0 2.2.2.2 0 200 300 i *> 192.168.4.0 2.2.2.2 0 200 300 i //我们要对这些路由进行过滤 R1(config)#ip prefix-list 1 permit 192.168.1.0/22 ge 24 //过滤掉了192.168.4.0 R1(config)#ip prefix-list 1 permit 10.1.1.0/23 ge 24 //过滤掉了10.1.2.0、10.1.3.0、10.1.4.0 R1(config)#router bgp 100 R1(config-router)#neighbor 2.2.2.2 prefix-list 1 in R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 10.1.1.0/24 2.2.2.2 0 0 200 i *> 172.16.1.0/24 0.0.0.0 0 32768 i *> 172.16.2.0/24 0.0.0.0 0 32768 i *> 172.16.3.0/24 0.0.0.0 0 32768 i *> 172.16.4.0/24 0.0.0.0 0 32768 i *> 192.168.1.0 2.2.2.2 0 200 300 i *> 192.168.2.0 2.2.2.2 0 200 300 i *> 192.168.3.0 2.2.2.2 0 200 300 i 目的八: 在R4上把4.4.4.0/24的路由宣告进BGP中 R1#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 0.0.0.0 0 32768 i * 4.4.4.0/24 192.168.12.2 0 2 i *> 192.168.13.3 0 2 i *> 8.8.8.0/24 0.0.0.0 0 32768 i //默认R1到4.4.4.0/24会选择R3来走。因为R3的route-id大嘛!! 现在我想让R1访问4.4.4.0/24从R2走。就是说,R2或R3把4.4.4.0/24路由给R1时,会打上这条路由的MED,策略就在这MED上做…… 可以把R3给R1 4.4.4.0/24时的MED改高点 R3(config)#access-list 1 permit 4.4.4.0 0.0.0.255 R3(config)#route-map map R3(config-route-map)#match ip address 1 R3(config-route-map)#set metric 3 R3(config)#route-map map premit 20 R3(config)#router bgp 2 R3(config-route)#neighbor 192.168.13.1 route-map map 验证(扩展ping): R4#ping Target IP address: 8.8.8.8 Extended commands [n]: y Source address or interface: 4.4.4.4 Loose, Strict, Record, Timestamp, Verbose[none]: r eply to request 3 (68 ms). Received packet has options Total option bytes= 40, padded length=40 Record route: (192.168.34.4) (192.168.13.3) //去包走R3 (8.8.8.8) (192.168.12.1) (192.168.24.2) //回包走R2 (4.4.4.4) <*> (0.0.0.0) (0.0.0.0) (0.0.0.0) End of list 回包走R2便知道策略完成了。 我们不能在R1上直接sh ip bgp,因为我可控的只有AS2 九、路由反射器和联邦 上节解决数据层面的路由黑洞时提出了路由反射器和联邦,这时我们要详细介绍 主要是解决IBGP的水平分割 回顾一下IBGP水平分割:从IBGP邻居学到的路由,不会在通告到其他IBGP邻居 如果拓扑变成这样: 由于IBGP的水平分割,X路由就不能从R4到达R2了,R2上也就没有了X路由。 这时可以用路由反射器和联邦来解决 9.1 路由反射器 路由反射器是一个C/S模型,Client和service之间是IBGP关系。 R1相当于一个service,即RR(route reflector)。 而假设R2和R3是client,那么R1和R2和R3就形成了一个class(簇)。 其中IBGP之间的关系是: R1(RR)从EBGP收到到的路由,即会反射给client,也会反射到非client。 R1(RR)从client收到的路由,即会发射给client,也会发射到EBGP邻居和非client。 R1(RR)从非client收到的路由,只会发射给client和EBGP邻居,而不会发射给非client。 注意:图中的连接不是物理连接,而是IBGP session连接 就拓扑,我们可以把R4当成RR,R3置client,那么从client收到的路由,即会发射给client,也会发射到EBGP邻居和非client。 但是,我还是建议,除了RR,都变成client。 路由反射器怎么防环呢? 这里引入了两个属性值:origin-ID和cluster-ID origin-ID:这个ID是从哪个EBGP引入的BGP路由的EBGP-route-ID cluster-ID:默认是RR的route-ID 作用生效: origin-id用来防止EBGP向内部发送的路由环路 cluster-id用来防止RR之间路由传递的环路 9.2 联邦 联邦的意思是在大AS里划小AS 把R3和R4在划成一个小AS,把R2单独的也再划一个AS。这样,R2和R4的关系是联邦中的EBGP,不存在IBGP水平分割了 9.3 路由反射器和联邦实验: 实验要求 目的一:路由反射器 目的二:联邦 目的三:综合实验 目的一: 前提:把R1和R2之间的链路down掉,再看看: R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 3.3.3.3 0 100 0 1 i R2#sh ip bgp //没有任何信息,说明1.1.1.0/24在R4上被水平分割了。 利用路由发射器,把R4当成RR(route reflected),R2和R3都当成client。 R4(config-router)#neighbor 2.2.2.2 route-reflector-client R4(config-router)#neighbor 3.3.3.3 route-reflector-client *Mar 1 00:41:13.695: %BGP-5-ADJCHANGE: neighbor 2.2.2.2 Down RR client config change *Mar 1 00:41:16.019: %BGP-5-ADJCHANGE: neighbor 2.2.2.2 Up *Mar 1 00:41:23.511: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Down RR client config change *Mar 1 00:41:24.799: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Up //当设定对方是client时,自己就变成了RR R2#sh ip bgp Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 3.3.3.3 0 100 0 1 i //R2上有了!!! R2#sh ip bgp 1.1.1.1 BGP routing table entry for 1.1.1.0/24, version 38 Paths: (1 available, best #1, table Default-IP-Routing-Table) Flag: 0x820 Advertised to update-groups: 2 1 3.3.3.3 (metric 158720) from 4.4.4.4 (4.4.4.4) Origin IGP, metric 0, localpref 100, valid, internal, best Originator: 3.3.3.3, Cluster list: 4.4.4.4 //originator和cluster list决定路由反射器的放环 目的二: 前提:清空所有路由器上的bgp配置 步骤: 1. Router bgp 小AS号(联邦中的子AS) 2. 声明所在的大AS,每个联邦中的路由器必做 3. 小AS之间互指peers,只需在小AS间的路由器上做 R2 R2#sh run | s bgp router bgp 65500 no synchronization bgp router-id 2.2.2.2 bgp log-neighbor-changes bgp confederation identifier 2 neighbor 3.3.3.3 remote-as 65500 neighbor 3.3.3.3 update-source Loopback0 neighbor 3.3.3.3 next-hop-self neighbor 192.168.12.1 remote-as 1 no auto-summary R3 R3#sh run | s bgp router bgp 65500 //自己所属的联邦中的小AS no synchronization bgp router-id 3.3.3.3 bgp log-neighbor-changes bgp confederation identifier 2 //声明自己的大AS是AS 2 bgp confederation peers 65501 //指明联邦中我的EBGP邻居 neighbor 2.2.2.2 remote-as 65500 //联邦中指的是小AS,2.2.2.2是联邦中的EBGP neighbor 2.2.2.2 update-source Loopback0 neighbor 4.4.4.4 remote-as 65501 neighbor 4.4.4.4 ebgp-multihop 255 //EBGP多跳,你懂的 neighbor 4.4.4.4 update-source Lookback0 no auto-summary R4 R4#sh run | s bgp router bgp 65501 no synchronization bgp router-id 4.4.4.4 bgp log-neighbor-changes bgp confederation identifier 2 bgp confederation peers 65500 neighbor 3.3.3.3 remote-as 65500 neighbor 3.3.3.3 ebgp-multihop 255 neighbor 3.3.3.3 update-source Loopback0 neighbor 3.3.3.3 next-hop-self //一定要打上 neighbor 192.168.45.5 remote-as 3 no auto-summary 验证: R2#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 192.168.12.1 0 0 1 i *>i5.5.5.0/24 4.4.4.4 0 100 0 (65501) 3 i R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 2.2.2.2 0 100 0 (65500) 1 i *> 5.5.5.0/24 192.168.45.5 0 0 3 i //Path字段告诉我,1.1.1.0/24的路由经过了AS 1和联邦中的小AS 注意: 1. 联邦中的AS是不作为选路标准的,即不能加入计算AS长短。 2. Next-hop-self命令只作用在大AS的EBGP路由器上 目的三: 怎么让R1的路由到达R8呢? 由于IBGP水平分割,路由最多到R3就down了。 用路由发射器啊,好像每个都要配成RR;用联邦啊,每两个一个小AS又太多了。 这时,我会把两个技术结合起来: 十、社团属性 在BGP传路由的时候,可以让路由器给这条路由打上一个社团属性 特点: “可选”:路由器有可能不识别此属性(default)。 解决:neighbor x.x.x.x send-community “传递”:社团属性只能在neighbor的邻居有效,即R1把X路由+社团属性给了R3,R3再给R4,就不会携带社团属性了。 社团属性的3大功能: 1. No-advertise:携带此属性的路由不会通告给任何BGP邻居。 2. No-export: 携带此属性的路由不会传出大AS。即携带该团体属性值的路由不向AS外的 EBGP邻居发送,但可以向联盟内的EBGP邻居发送,即该路由只被限制在AS内部传递,如果配置了联盟,则只在联盟内传递。 3. Local-AS: 携带此属性的路由不会传出小AS。即携带该团体属性值的路由不向任何EBGP 邻居发送,包括联盟内的EBGP邻居,即该路由只被限制在AS内部传递,如果配置了联盟,则只在联盟内的子AS内部传递。 社团属性的真正作用是干涉你路由的传播范围。 10.1 社团属性实验 实验要求 目的一:基本的社团属性之neighbor 目的二:基本的社团属性之network 目的一 R1和R3之间,R1R3的所有路由都带上No-advertise的社团属性。 注意:No-advertise表示携带此属性的路由不会通告给任何BGP邻居 R1(config)#route-map map R1(config)#set community no-advertise //map中没有match就是match所有 R1(config)#router bgp 1 R1(config-router)#neighbor 192.168.13.3 route-map map R1(config-router)#neighbor 192.168.13.3 send-community //修改了路由的社团属性,还要推送给邻居 R3#sh ip bgp 1.1.1.0/24 BGP routing table entry for 1.1.1.0/24, version 3 Paths: (1 available, best #1, table Default-IP-Routing-Table, not advertised to any peer) Flag: 0x880 Not advertised to any peer 1 192.168.13.1 from 192.168.13.1 (1.1.1.1) Origin IGP, metric 0, localpref 100, valid, external, best Community: no-advertise R3#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 192.168.13.1 0 0 1 i R4#sh ip bgp //R3有,R4上就没有了!!!说明no-advertise达到了!!! 目的二 R1和R3之间,R1R3的network的路由都带上1:1的社团属性。 注意:1:1是我随便起的 R1(config)#route-map map R1(config)#set community 1:1 //map中没有match就是match所有 R1(config)#ip bgp-community new-format //开启自定义的社团属性。必须打上这个命令 R1(config)#router bgp 1 R1(config-router)#network 1.1.1.0 mask 255.255.255.0 route-map map R1(config-router)#neighbor 192.168.13.3 send-community R3(config)#ip bgp-commnunity new-format //R3也必须打上这个命令,才会显示R1传来的自定义的社团属性 R3#sh ip bgp 1.1.1.0/24 BGP routing table entry for 1.1.1.0/24, version 3 Paths: (1 available, best #1, table Default-IP-Routing-Table, not advertised to any peer) Flag: 0x880 Not advertised to any peer 1 192.168.13.1 from 192.168.13.1 (1.1.1.1) Origin IGP, metric 0, localpref 100, valid, external, best Community: 1:1 十一、应用环境 应用环境概述 本章主要针对CE和PE为对象进行详细分析 连接模式 从客户的角度来看,分成四种连接模式: 1. 单宿主:即一根线连入ISP。 2. 双线单宿主双归(一主一备):两根线两设备,但是只有一端在跑数据。 3. 双线单宿主单归(负载均衡):两根线一设备,而且都在跑数据。 4. 多宿主:连入多个ISP(常用)。 路由承载 客户CE到PE的物理层链路接好了,就应该跑路由协议了吧,缕清思路: 1. 要么CE直接跑IGP(静态或者动态路由)承载模式。 2. 要么CE跑IGP+EBGP承载模式。 下面我们对这几种连接模式分别介绍,主要从这几个方面: 1. 客户路由交换 2. 客户地址分配 1 路由的配置 单宿主 单宿主模式,客户端的一台CE路由器接入SP的一台PE路由器。 客户路由交换 单宿主连接模式,优选IGP为静态路由的承载模式。 路由的配置 静态路由简单,在单宿主的模式下,推荐使用静态路由; //单宿主模式配置命令 需要注意的是: 1. 用户的向内发送缺省路并自己默认指向SP 2. 用户的路由被SP的BGP承载,因此SP指静态到用户,并要把用户的路由重分布到BGP中(重分布静态) 3. 用户小的地址块不应该宣告到AS,可以用no-export的社团属性来解决。 思路要明确 静态路由&Route-Map实例介绍 整个实验的需求是: 针对tag 1000的路由,不会传递到其他AS;针对tag 1001的路由,传递到其他AS。 //先抓路由,做策略,然后重分布调用策略就完了 多线单宿主双归(常用) 多线单宿主双归模式,即客户端的两台CE路由器分别接入同一SP的两台PE路由器,呈口字相连,客户端CE形成主备关系。 优势和缺点:在客户端保证了链路和设备冗余,但是没有SP端的冗余。 客户路由交换 多线单宿主(一主一备)模式: 1. 如果物理链路或者对端设备失效能够被检测,仍然可以使用静态路由。 2. 在客户端和SP端之间运行BGP是一个常用的做法。 路由的配置 如果是双线单宿主(一主一备)模式 这里是使用浮动静态路接入 BGP backup with static Routes //Customs做主备浮动路由(备的AD调大),并且OSPF向内部注入默认路由 //PE主备都指到Customs的静态,并重分布静态到BGP。 //将PE_backup路由器的静态AD调大。 浮动静态路由是可行的,但是和SP的BGP交互不是很好,需要对几个路径属性进行修改: 1. Weight值:主备重分布静态到BGP的时候,weight值是255(最高,自己宣告)。当主的静态传递到备时,weight值是0(默认),然而备自己也宣告了这个静态,weight为255。如果当有匹配静态目标网段的数据进入备时,因为255>0,会优先走备,而不是从备到主,这是我们不想看到的,所以,降低备重分布到BGP的weight值。 2. Local preference值: 多线单宿主单归 多线单宿主单归模式,接入方式有点像单宿主模式,只不过两端之间是多个物理链路接入。 优势和缺点:在客户端保证了物理链路冗余+负载均衡(也可以做EtherChannel提高带宽),但是没有设备冗余,也没有SP端的冗余。 客户路由交换 多线单宿主(负载均衡)模式: 1. 如果物理link失效能够被检测到,则优选静态路由 2. 如果物理link失效不能被检测到,则会进入黑洞,可以使用SLA来解决这个问题。 在双线单宿主模式下,如果用户有多个link并且链路或者设备失效能够被察觉到,也推荐使用静态;其他的都用BGP好了!! 路由的配置 多宿主 多宿主:连入多个ISP 优势和缺点:保证了链路、设备和SP的冗余,但是需 要SP之间的协调(主要是主备切换) 客户路由交换 BGP是一个常用的选择方法 路由的配置 11.2 客户路由交换 1. 静态或者动态路由 2. BGP是唯一的动态路由协议,原因不一一介绍了 3. 有时会优选静态,因为简单 PS:要考虑customs和SP之间的连接可能走传输 11.3 客户地址分配 //肯定是SP给Customs分配IP地址,customs内部私有地址+nat //可以自己独立申请一段IP地址 因篇幅问题不能全部显示,请点此查看更多更全内容