BGP的选路原则
如果此路由的下一跳不可达,忽略此路由
优选协议首选值(PrefVal)最高的路由
优选本地优先级(LocalPref)最高的路由
优选本地生成的路由
优选AS路径(AS Path)最短的路由
比较Origin属性,依次优选Origin类型为IGP、EGP、Incomplete的路由
优选MED值最低的路由
优选从EBGP邻居学来的路由(EBGP路由优先级高于IBGP路由)
优选到BGP下一跳IGP Metric较小的路由
开启负载分担能力
优选Cluster List最短的路由
优选RouterID最小的路由器发布的路由
比较对等体的IP Address,优选从具有较小IP Address的对等体学来的路由
1、PrefVal(协议首选值)
① 华为BGP私有属性
② BGP的选路属性
③ 默认等于0,越大越优
④ 只在本地有效,不会传递给任何邻居。
⑤ 针对发送给邻居的BGP路由,无法修改协议首选值,因为报文中不携带。
⑥ 针对接受BGP邻居的路由,才可修改协议首选值。
⑦ 当不想影响其他设备的选择,只针对单台设备的选路进行控制的时候建议使用。
配置:
[R3]route-policy prefval permit node 10
[R3-route-policy]apply preferred-value 100
[R3-route-policy]q
[R3]bgp 234
[R3-bgp]peer 4.4.4.4 route-policy prefval import //针对于接收的BGP路由进行修改。
2、local-pref(本地优先级)
① 公认任意属性
② 只在一个AS内部进行传递,不会发送给EBGP邻居
③ 用于BGP的路径选择,默认为100,越大越优。
④ 应用在AS内存在多个出口的时候,选择一个出口访问外部网络
⑤ EBGP路由不携带本地优先级属性,对于不携带本地优先级属性的BGP路由,设备将会认为这个BGP路由的本地优先级为默认本地优先级100。
修改方式:
1)针对接收或者发送给BGP邻居的路由进行修改
① EBGP邻居之间out方向不可修改(EBGP路由报文中不携带)
② EBGP邻居之间in方向可以修改
③ IBGP邻居之间可以在in/out方向进行修改
配置:(针对EBGP邻居之间in方向修改)
[R2]route-policy local permit node 10
[R2-route-policy]apply local-preference 999
[R2-route-policy]q
[R2]bgp 234
[R2-bgp]peer 12.1.1.1 route-policy local import
[R2-bgp]q
2)修改默认的本地优先级
[R2-bgp]default local-preference 200 //修改默认的本地优先级,只会针对没有本地优先级的路由中的优先级进行修改,如果携带了就不进行修改。
哪些路由没有本地优先级?
1)自身产生的:network和import-route指令变成的BGP路由没有本地优先级。
2)邻居传递的:EBGP邻居传递的路由默认没有本地优先级。
3、优先本地生成的路由
顺序:手动聚合路由> 自动聚合路由> network命令引入的路由> import-route命令引入的路由> 邻居传递的。
当下一跳等于127.0.0.1(聚合产生的)或0.0.0.0的时候,路由即为本地产生的。
4、优选AS-path最短的
① 公认必遵属性
② 用于AS之间的防环属性
③ 用于BGP路由的路径选择
AS之间的防环:
① BGP设备将路由发送给EBGP邻居的时候,会在路由的AS-path属性中添加自身的AS号。
② BGP设备从EBGP邻居接收路由的时候,将会检查路由的AS-path属性列表,如果存在自身的AS号,那么将忽略这条BGP路由。
③ IBGP邻居之间不会做AS-path的防环检测。
路径的选择方式:当存在去往同一个目的地的多条BGP路由时,比较两条路由的AS-path列表,越短越优。
修改方式:AS-path可以在任何BGP邻居之间的in/out方向都可以进行修改。
配置:
[R1]route-policy as-path permit node 10
[R1-route-policy]apply as-path 100 200 additive //在原有的AS-path列表中添加新的AS号。(整体在左边添加)
[R1-route-policy]apply as-path 100 200 overwrite //使用指定的AS-path覆盖原有的AS-path。
[R1-route-policy]apply as-path none overwrite //清空原有的AS-path号。