BGP选路原则
在BGP(边界网关协议)中,选路原则是决定网络流量路径的关键因素。BGP通过一系列的选路原则来确定最佳路径,这些原则按照优先级顺序进行比较,直到找到最优路径。以下是BGP的主要选路原则:
- 不发布不可达的路由信息:BGP不会发布无法到达的路由信息。
- Preferred-Value值:这是一个私有属性,用于在本地入接口配置,影响对端对等体发布过来的路由信息。默认值为0,数值越大,路由越优先。
- 本地Local Preference值:这是一个公有属性,本地配置的Local Preference值越高,路由越优先。默认值为100,仅在IBGP内传递,在本地AS内有效,不会传递给EBGP。
- 优选本地生成的路由:本地生成的路由,优选顺序:①手动聚合路由→②自动聚合路由→③network命令通告的路由→④import-route命令引入的路由→⑤从对等体学习的路由。
- AS Path短的路由:AS Path是BGP选路的重要依据,路径越短,路由越优先。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列
- Origin IGP优于EGP:IGP来源的路由优于EGP来源的路由。
network 从igp表内引入 标记为i
import 引入路由协议的路由 标记为?
通过EGP学习到的,那么该BGP路由的Origin属性为EGP,标记为e - MED(多出口区分):MED值越小的路由越优先,它类似于路由的开销值。(默认为0)。
- 当存在多条去往同一目标网络的BGP路由时,BGP会比较这些路由的属性,包括MED,以确定最优路径。
- 默认情况下,只有当多条路由来自同一个邻居AS时,BGP才会比较MED值。但是,可以通过配置命令compare-different-as-med来比较来自不同邻居AS的MED值。
- MED属性只会影响相邻的两个AS,收到MED属性的AS不会将此属性传递给其他AS。
- 优选EBGP学习来的路由:从外部AS传递过来的路由会被优先选择。
- AS内部IGP Metric最小的路由:选择IGP(如OSPF、ISIS、RIP)开销最小的路由。
- Cluster List最短的路由:在反射器环境中,Cluster List最短的路由会被优先选择。
- Orginator ID最小的路由:在反射器环境中,Orginator ID最小的路由会被优先选择。
- Router ID最小的路由器发布的路由:Router ID最小的路由器发布的路由会被优先选择。
- 较小IP地址的邻居学习的路由:如果有多条路由来自同一邻居,会优先选择IP地址较小的邻居学习的路由。
在实际应用中,可以通过配置命令来调整这些选路原则,以达到网络流量优化的目的。例如,可以通过修改Local Preference值或MED值来影响特定路由的优先级。此外,还可以使用ACL(访问控制列表)和路由策略来细化路由选择过程。
BGP的选路原则是网络管理员在进行网络优化和故障排除时必须了解的重要概念。通过合理配置和调整这些原则,可以有效地控制网络流量,确保网络的稳定性和效率。
BGP的属性
公认属性 |
公认必遵 |
BGP协议的设备都必须能识别,且在更新消息中必须包含 |
Origin(起源),AS_PATH(AS路径) NEXT_HOP(下一跳) |
公认任意 |
BGP协议的设备必须能识别,但在更新消息内可不包含。 |
LOCAL_PREF(本地优先级) ATOMIC_AGGREGATE(原子聚合) | |
可选属性 |
可选过渡 |
可以不支持该属性,但应当接受并传递给邻居 |
AGGREGATOR(聚合) COMMUNITY(团体) |
可选非过渡 |
可不支持该属性,且可以忽略包含这个属性的更新信息并不传递给其他BGP邻居 |
MED(多出口鉴别器) ORIGINATOR_ ID(发起人ID) CLUSTER_ ID(组ID) WEIGHT(权重值) |
NEXT_HOP
路由器将BGP路由器通告给自己的EBGP时,将该路由的NEXT_Hop设置为自己的TCP连接源地址。
EBGP对等体之间传递路由时,下一跳会改变。
IBGP对等体之间传递路由,下一跳不改变。
- IBGP下一跳是BGP的下一跳,可通过peer next-hop-invariable命令不修改下一跳地址
- IBGP下一跳不是BGP的下一跳,可通过Next-hop-local命令来修改下一跳地址
BGP过滤器原理
过滤器,也就是匹配路由条目的工具。目前提供以下5种过滤器供BGP使用:
- 访问控制列表ACL(Access Control List)
- 地址前缀列表(IP-Prefix List)
- AS路径过滤器(AS-Path-Filter)
- 团体属性过滤器(Community-Filter)
- 扩展团体属性过滤器(Extcommunity-Filter)
- 路由策略
注:Filter-policy,Route-policy,Access-list是通用过滤器,多种协议都支持
AS路径过滤器使用正则表达式来定义匹配规则。正则表达式由元字符和数值两部分组成
1.元字符定义了匹配的规则
2.数值定义了匹配对象
特殊字符 |
功能 |
\ |
转义字符,将下一个字符标记为普通字符 |
^ |
匹配行首的位置 |
$ |
匹配行尾的位置 |
* |
匹配前面的子正则表达式零次或多次 |
+ |
匹配前面的子正则表达式一次或多次 |
? |
匹配前面的子正则表达式零次或一次 |
. |
匹配任意单个字符 |
( ) |
一对圆括号内的正则表达式作为一个子表达式,匹配子表达式并获取这一匹配,圆括号内也可以为空。 |
_ |
匹配一个符号,在表达式的开头或结尾时还可以作起始符,结束符(同^,$)。 |
BGP安全特性(华为设备)
安全特性概述:
- MD5:BGP使用TCP建立连接时进行MD5认证。对于认证失败,不会立即断开邻居关系,而是像ISIS一样,需要等待hold时间之后断开邻居关系。
- GTSM:通过检测IP报文中的TTL值是否在预定范围里,对IP层以上的业务进行保护,增强系统安全性。对于不符合TTL范围的报文会直接丢弃,避免BGP报文攻击。
- 限制从对等体接收的路由数量:防止资源耗尽性攻击。
- AS_Path长度保护:通过对入口和出口两个方向对长度进行限定,直接丢弃超限的报文
BGP路由聚合:
路由汇聚意义:
- 随着AS的增多,BGP设备路由数量庞大,占用内存,消耗带宽。
- 传输的路由条目出现频繁的更新和撤销,对网络的稳定性会造成影响。所以使用BGP路由聚合来解决此问题
路由聚合的实现方式:
一、静态聚合实现方式
- 原理:
-
- 通过配置静态路由进行路由汇聚(配置汇总后的黑洞路由),然后宣告这个汇总后的路由
- 特点:
-
- 并不是真正意义上BGP路由汇总,只是通过BGP发布路由的特点来实现路由汇总的效果。
- 此方式进行汇总,明细路由不会被抑制,也会一同传往邻居(需要通过策略将明细过滤)
- 由于宣告的汇总路由是静态配置,此汇总和明细路由其实是没关系的,因此:
-
-
- 此方式使得汇总路由无法携带明细路由
- 当明细路由失效时,汇总路由还是存在,到时汇总路由不能真实的反应网络现状
-
二、自动聚合
- 原理:直接在BGP协议的地址族视图下使用Summary automatic命令,自动将明细路由汇总
- 特点:
-
- 只对引(import)的IGP路由进行聚合,对本地宣告(network)的路由不做聚合
- 明细路由会被抑制,不会优选和发送给邻居
- 只可以对明细路由做主类聚合——因此现网一般不使用此聚合方式
三、手动聚合
注:BGP4+仅支持手动聚合
- 原理:将本地学习到的BGP路由通过aggregate进行聚合
- 特点:
-
- as-set,在聚合的路由中添加as-set路径属性,还原明细路由的AS_Path属性信息,可以用于防环。
- 当多个明细路由有不同的AS_Path属性,汇总的as-set遵循以下规则:
-
-
- 相同就取一个相同的值,不同的值则全部取(并集)
-
-
- as-set值和as-path的区别
-
-
- as-path 有序的,表明路由传递的AS的顺序
- as-set {}中的值,代表无序的as_path,也就是as-set,只是用于汇总后的路由防环,并且{}内的AS号无论有多少个,只能算作一个AS长度
-
- 注意事项:
-
- 当策略中配置了AS_Path属性,并且aggregate设置了as-set属性,那么策略中的AS_Path属性不会生效。
- detail-suppressed:仅通告聚合路由,抑制明细路由,只向邻居发送聚合后的路由并且聚合路由不会继承明细路由的团体属性
- suppress-policy:指定抑制路由通告的策略名称,对满足ACL或者perfix-list的明细路由做抑制,不满足的明细路由不做抑制
当suppress-policy与detail-suppressed同时存在时,表示选择性的放行部分明细路由,通告给对等体(即suppress-policy优于detail-suppressed - origin-policy:指定允许生成聚合路由的策略名称,对满足ACL或者perfix-list的明细路由生成聚合路由
- attribute-policy:指定设置聚合路由的属性策略名称;通过peer route-policy也可以完成此工作
路由汇聚的特点:
- 只要在BGP表中存在的路由都能够被手动汇聚
- 可以实现精准汇总,并且支持CIDR(无类域间路由)
- 可以对汇总路由的属性做编辑
- 可以继承明细路由的AS_Path属性,防止环路
- 当明细路由全部失效时,汇总路由才会失效
- 默认情况下不抑制明细路由,不携带明细路由的AS_Path属性
- 当汇总路由有!和?时,取!作为汇总路由的起源属性