BGP路径选择-AS_Path
一,原理概述
- 当一台BGP路由器存在多条去往同一目标网络的BGP路由时,BGP协议会比较这些BGP路由的属性,来确定去往目标网络的最优BGP路由。先比较Preferred Value(路由信息首选值),然后Local Preference(本地优先级),再是路由生成方式,若比较这几个还是无法确定最有路由,则使用AS_Path属性比较。
- AS_Path属性顺序的记录了某条BGP路由所经过的AS信息。
- BGP路由器在向EBGP对等体通告路由时,会在该路由的AS_Path属性的最左端添加本地自制系统的AS编号。BGP在比较了AS_Path属性后,会优选AS_Path长度最短的那条路由。如果AS_Path的长度相等,则BGP会对下一属性Origin进行比较。
- AS_Path还可以用来防止AS之间的路由环路。当路由器从EBGP邻居收到BGP路由时,如果该路由的AS_Path中包含了自己的AS编号,则该路由将会被直接丢弃。
- 类似于其他BGP路由属性,AS_Path属性也是可以被手动修改的。
实验注意事项:
- BGP邻居关系状态为Established表示已建立
- AS_PATH是指BGP路由在传输的路径中所经历的AS的列表,是BGP中一个非常重要的公认必遵属性
- BGP不会接受AS_PATH属性中包含本AS Number的路由,从而避免了产生环路
- AS_PATH越短的路径越优先
二,实验练习(对着书做的)
(一)实验目的
- 理解AS_Path 的概念
- 通过AS_Path的选路机制
- 修改AS_Path属性的方法
(二)实验内容
(三)实验拓扑
步骤
1,基本配置
2,配置BGP路由信息
[R1]bgp 100
[R1-bgp]peer 10.0.13.3 as-number 300
[R1-bgp]peer 10.0.15.5 as-number 500
[R1-bgp]network 10.0.1.1 32
[r2]bgp 200
[r2-bgp]peer 10.0.26.6 as-number 500
[r2-bgp]peer 10.0.24.4 as-number 400
[r2-bgp]network 10.0.2.2 32
[R3]bgp 300
[R3-bgp]peer 10.0.34.4 as-number 400
[R3-bgp]peer 10.0.13.1 as-number 100
[R4]bgp 400
[R4-bgp]peer 10.0.34.3 as-number 300
[R4-bgp]peer 10.0.24.2 as-number 200
[R5]bgp 500
[R5-bgp]peer 10.0.15.1 as-number 100
[R5-bgp]peer 10.0.56.6 as-number 500
[R5-bgp]peer 10.0.56.6 next-hop-local
[R6]bgp 500
[R6-bgp]peer 10.0.26.2 as-number 200
[R6-bgp]peer 10.0.56.5 as-number 500
[R6-bgp]peer 10.0.56.5 next-hop-local
配置后,查看R1,R2,R3,R4,R5,R6的BGP邻居关系
可以看到:
- R1与R3和R5建立了EBGP(不同AS间邻居为EBGP)邻居关系。
3,观察AS_Path属性对BGP选路的影响
在R1上 查看BGP路由表,观察10.0.1.1/32访问10.0.2.2/32的选路情况。
可以看到:
- R1去往R2的路径(10.0.15.5和10.0.13.3)优选下一跳为10.0.15.5(R5)的路由。
- 两条路由的PrefVal为0,LocPrf为空,均不是本地生成的路由,但他们的AS_Path属性不同。
- 下一跳为R5的AS_Path属性为500 200,所以长度为2;下一跳为R3的AS_Path属性为300 400 200,所以长度为3;于是选择了AS_Path长度小的(下一跳为R5的路由)。
在R1上使用Tracert命令验证10.0.1.1/32到10.0.2.2/32的路径
可以看到:
- 10.0.1.1/32到10.0.2.2/32的路径确实是通过R5和R6的。
在R2上查看BGP路由表
与来时一样,优选路径(10.0.26.6和10.0.24.4)AS_Path小的R6的路径
使用tracert命令验证10.0.2.2/32到10.0.1.1/32的路径
与来时一样反着经过R6和R5
4,修改AS_Path属性控制BGP选路
现在假定R5和R6负载太重,希望用户网络10.0.1.1/32到10.0.2.2/32之间优先使用经过R3和R4的路径。
为了实现需求,直接的做法是在R1上拒绝接收来自 AS500 的关于10.0.2.2/32的路由信息,以及在R2上拒收来自 AS500 的关于10.0.1.1/32的路由信息。
但是这样R1和R2的BGP路由表中将不再有经由 AS500 去往对方的路由信息,当R3和R4的链路发生故障时,两个用户网络的通信就会中断。
- 为此,可以采用修改AS_Path的方法来更好的实现需求。
使用Route-Policy对R1接收的来自 AS500 的关于10.0.2.2/32的路由信息中的AS_Path属性进行修改。
[R1]ip ip-prefix as_path permit 10.0.2.2 32
[R1]route-policy as_path permit node 10
[R1-route-policy]if-match ip-prefix as_path
[R1-route-policy]apply as-path 500 500 additive
[R1-route-policy]route-policy as_path permit node 20
[R1-route-policy]bgp 100
[R1-bgp]peer 10.0.15.5 route-policy as_path import
配置完成后,在R1上查看BGP路由表
可以看到:
-现在R1优选了下一跳为10.0.13.3,即通过R3的路径,原因是现在经由R5的 路由的AS_Path属性变为500 500 500 200,长度为4。
在R1 上使用tracert命令验证从10.0.1.1/32到10.0.2.2/32的路径
可以看到:
- 从10.0.1.1/32去往10.0.2.2/32的报文选用了经由R3,R4的路径。
在R2上使用tracert命令验证从10.0.1.1/32去往10.0.2.2/32的报文所经过的路径。
可以看到:
- 10.0.2.2/32到10.0.1.1/32的路径依旧使经由AS500 的路径。
在R2上修改 AS500 的关于10.0.1.1/32的路由信息的AS_path属性。
[r2]ip ip-prefix as_path permit 10.0.1.1 32
[r2]route-policy as_path permit node 10
[r2-route-policy]if-match ip-prefix as_path
[r2-route-policy]apply as-path 300 500 500 100 overwrite
Warning: The AS-Path lists of routes to which this route-policy is applied will
be overwritten. Continue? [Y/N]y
创建路由策略的后续索引节点允许未被匹配的路由能够正常被接收。
[r2]route-policy as_path permit node 20
在R2的BGP视图下调用路由策略
[r2-bgp]peer 10.0.26.6 route-policy as_path import
配置后,在R2上观察BGP路由表
可以看到:
- 在R2去往10.0.1.1/32网络时,选用的是下一跳为10.0.4.4,经由R3,R4。经由R6的路由的AS_path属性已被修改为300 500 500 100,长度为4.
注意:选用 overwrite 关键字,路由策略会使用配置的AS编号序列替换原有的AS_path属性。
在R1上使用 Tracert 命令验证从10.0.1.1/32去往 10.0.2.2/32的报文所经过的路径。
可以看到:
- 从10.0.1.1到10.0.2.2的路径为R3和R4的路径。
在R2上使用tracert命令验证从10.0.2.2/32到10.0.1.1/32的路径
可以看到:
- 从R2到R1的路径经由了R4和R3。
至此,在10.0.1.1/32到10.0.2.2/32之间进行通信时,往返路径均经过了R3和R4,实现了所需的路径控制,同时也实现了路径的冗余备份。