BGP
一. BGP特性: #
Border Gateway Protocol,边界网关协议,协议优先级为255,目前所使用的版本为v4。
边界网关路由协议,EGP网关协议,适用于大型路由网络结构,以AS为一个节点,每个AS有唯一确定的AS-ID用于标识。
BGP版本:
① 2006年定义单播IPV4网络MP-BGP
② MP-BGP在IPv6单播网络上的应用称为BGP4+
③ 在IPv4组播网络上的应用称为MBGP(Multicast BGP)
BGP分类:
① IBGP:
Internal Border Gateway Protocol ,内部边界网关协议,用于在AS内部的BGP协议
② EBGP:
External Border Gateway Protocol,外部边界网关协议,用于在AS之间的BGP协议,默认数据包中的TTL值为1跳,邻居建立使用直连端口建立,通常两个AS之间是不存在IGP路由协议的,所以AS之间使用直连链路建立邻居
BGP路由具有以下特点:
① 可靠的路由更新机制
② 丰富的Metric度量方法
③ 从设置上避免了环路的发生
④ 为路由附带属性信息
⑤ 支持CIDR
⑥ 丰富的路由过滤和路由策略
⑦ 支持认证
⑧ 默认不使用附载分担
1. 可靠的路由更新机制:#
BGP使用TCP进行路由更新,保证路由传递的可靠性,源端口号随机,使用端口号为179。
2. 丰富的Metric度量方法:#
BGP支持AS-Path、MED等度量属性的直接修改。
3. 从设计上避免了环路:#
IBGP使用水平分割,EBGP使用AS-Path属性。
4. 为路由附带属性信息:#
路由信息携带不同的BGP路由属性,为BGP选路提供了多种多样的方式。
5. 支持CIDR、手动聚合:#
BGP支持无类域间路由,支持手工汇总和自动汇总。
(1)自动聚合:#
默认情况下,自动聚合时关闭的。自动汇总不会自动汇总BGP邻居发送的路由以及使用Network命令通告的路由,只能聚合自身import注入的路由条目。当开启自动聚合后,BGP路由默认会以主类路由进行聚合。此时聚合路由的属性为Aggregate属性
使用以下命令进行自动聚合:
[Huawei-bgp]summary automatic
R1:
- [Huawei-bgp]network 1.1.1.1 32
- 只引入loo2到loo4
- 启用路由聚合
(2)手动汇总:#
BGP手动路由聚合时,可以手动控制聚合路由的掩码长度,修改聚合路由属性等,手动路由聚合又有 两种方式:
① network静态路由
② aggregate宣告
① network静态路由:
首先创建静态路由将网段聚合并指向null0,BGP采用network方式通告出去,由于直连优先级高于静态,优先选择直连的下一跳接口,当直连网段出现问题,匹配静态送往Null0。
在R1上配置静态路由:[Huawei]ip route-static 172.16.0.0 255.255.0.0 NULL 0 preference 254
使用network宣告出去:[Huawei-bgp]network 172.16.0.0 16
② aggregate宣告:
直接在BGP试图下进行汇总
使用以下命令进行aggregate汇总:
[Huawei-bgp]aggregate 172.16.0.0 255.255.0.0 detail-suppressed
注1: 默认聚合路由只继承Community属性和起源属性(如果明细都为i,则为i,有一个为?,则为?)
注2: 默认聚合后的路由不会携带任何的AS-path属性,为了防止环路,如果想要携带AS-path
属性,后面增加命令as-set,此时汇总路由会继承所有明细路由的AS号,为无序的AS号,如果增加了AS-SET之后,聚合路由会将明细路由的AS-Path放入AS-SET属性中,如果明细路由消失或属性修改都会造成聚合路由的抖动增加;如果明细路由的AS-PATH id完全一致,此时聚合路由的AS-PATH类型为AS-Sequence
注3:如果不加detail-suppressed,会将明细路由和汇总路由全部发送出去,使用detail-suppressed命令只通告汇总路由,此时汇总路由的属性为ATOMIC_Aggregate,用于通告下游的路由器成员信息被抑制,此时的汇总路由不会携带Community属性
注4:为了让聚合后的路由继承明细路由的路由属性,聚合命令后面增加attribute-policy 1,此时在定义Route-policy,规划属性值
注5:origin-policy的作用,定义route-policy,当满足if条件中的路由条目时,聚合路由才会生效,如果定义的路由消失,则聚合路由为ATOMIC_Aggregate
注6:suppress-policy的作用是用于过滤掉某些明细路由,定义route-policy,当满足if条件中的路由条目,明细路由就会被过滤掉,如果只抑制了一部分明细路由,属性依旧为Aggregate;如过抑制了全部的明细路由,属性为ATOMIC_Aggregate
注7:同IGP路由手动聚合对比,BGP路由聚合,默认明细汇总都发布,IGP只发布汇总路
由;汇总之后IGP不会自动生成一条指向Null0的路由,而BGP路由汇总之后会自动
生成一条指向Null0的汇总路由
(3)默认路由发布:#
在peer对等体的时候,可以使用命令发布默认路由给对端邻居:
[Huawei-bgp]peer 192.168.1.1 default-route-advertise
6. 丰富的路由过滤和路由策略:#
BGP携带了大量的属性信息,并支持13种选路规则。
7. 支持认证:#
BGP支持MD5认证方式,如果是MD5方式,路由器会根据BGP报文的某些字段和密钥计算出一个128bit的散列值,然后将BGP报文连同散列值(散列值存在TCP报头中的Option中)发送给邻居。邻居路由器收到以后,会在本地基于收到的BGP报文和相同的密钥在进行一次HASH运算。如果计算出的散列值与接收到的散列值相同,则认证通过。
使用以下命令进行密码认证:
[Huawei-bgp]peer 192.168.1.1 password cipher huawei/huawei
注:由于BGP直接使用TCP报头中的Option承载加密数值,所以BGP只支持MD5加密
8. 默认不使用附载分担:#
BGP默认不使用附载分担,即使存在多条路径也会使用选路规则选出一条“最优路由”将其放入路由表中。
开启附载分担方式:
① 选路规则前9条一模一样(AS ID循序也一样),可以使用命令maximum load-balancing bgp 8进行附载分担,当比较到下一跳的IGP开销值一样时,会进行流量的负载分担
② 当BGP路由中的下一跳地址在IGP路由表中存在附载分担,此时流量会附载分担
③ 使用属性值对多个目标流量对半分流实现附载分担
9. EBGP特性:#
EBGP默认存在以下特性:
① 在通告给EBGP邻居时会将NEXT_Hop属性设置为自身的接口IP地址
② 将Local_PREF值清空
③ 将MED数值除0
③ 在AS_PATH属性中增加自己的AS-ID
10. 扩展性强:#
BGP扩展性强,在承载多协议路由时,在MP NLRI中增加属性值(TLV)进行扩展
二. BGP报文:#
BGP报文Header:
① Marker:16bit,用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)
② Length:占2个字节,BGP消息总长度(包括报文头在内),以字节为单位。长度范围是19~4096
③ Type:1字节,表示BGP消息的类型
- Type 1:OPEN
- Type 2:UPDATE
- Type 3:NOTIFICATION
- Type4:KEEPALIVE
- Type5:REFRESH(RFC2918)
BGP报文分为:
① open报文
② KeepAlive报文
③ update报文
④ notification报文
⑤ Route-refresh报文
1. open报文:#
负责和对等体建立邻居关系。
① Version:版本,目前使用为v4
② My Autonomous System:本端AS号
③ Hold Time:KeepAlive老化时间,默认为180S
④ BGP Identifier:发送者的router id
⑤ Opt Param Len:表示Optional Parameter的长度。如果此值为0,表示没有可选参数
⑥ Optional Parameters:为BGP可选参数列表,使用TLV承载
Optional Parameters详解:
① Type:1Byte,当Type为2时,默认为2,表示携带的参数为协商能力
② Length:1Byte,为Parameter Value的长度。
③ Value:根据Type的不同值填写不同的参数内容,在Type为2表示协商能力时,Value
是表示所支持的各种协商能力的列表,列表中的每一个单元是一个TLV三元组
在邻居建立时,在Open报文中的Optional Parameters中表示自己当前支持的扩展性。
① AFI:地址协议簇
② SAFI:子地址协议簇
AFI |
SAFI |
1-----IPv4 |
1----------IPv4 Unicast |
2-----------IPv4 Multicast |
|
3-----------IPv4 Unicast and Multicast |
|
14----------MP_REACH_NLRI(MP-BGP可达路由) |
|
15----------MP_Withdrawn_NLRI(MP-BGP撤销路由) |
|
16----------IPv4 Community |
|
128--------IPv4 VPN |
|
2------IPv6 |
1------------IPv6 Unicast |
2------------IPv6 Multicast |
|
3-------------IPv6 Unicast and Multicast |
|
16------------IPv4 Community |
|
128----------IPv6 VPN |
2. Update报文:#
BGP为触发更新的路由传递机制,只发送增量路由或失效路由,使用Update报文在对等体之间传递增量路由信息。Update报文传递的路由信息分为可达路由信息和不可达路由信息,可达路由信息为对端更新的路由信息,不可达路由信息让对端删除路由信息。
每条路由都携带大量的路由属性,相同属性的路由在一个Update报文中,不同属性的路由使用多个Update报文分别发送。
① Path Attribute:路由属性信息
- 路由可达,使用Path Attribute
- 路由不可达,使用Withdrawn Routes
② NLRI:网络层可达信息,路由信息,包含网段信息和网络掩码
注:如果是MP BGP协议,则报文格式发生变化:
路由前缀放在Path-Attribut中,使用MP_REACK_NLRI来承载VPNv4路由前缀,其中还包含AFI和SAFI,Nex_HOP信息
3. Notification报文:#
当BGP 对端检测到错误的时候,就发送该报文给对端,当对端接收到Notification后,会将TCP连接断掉。
错误主要包括:
① 消息头错误
② OPEN消息错误
③ Update消息错误
④ 指定对端AS号码错误
⑤ 保持时间超时
⑥ 状态机错误
⑦ 终止,例如管理员使用命令reset bgp all
4. KeepAlive报文:#
只有一个头部,该消息在对等体之间周期性发送,用以维护连接。默认60S发送一次,Died时间为180S。
BGP speaker会在以下两种情况发送KeepAlive报文:
① 维护邻居关系,默认60S发送一次
② 回复对端发送Open报文,同意建立邻居关系
5. Route-refresh报文:#
使用此报文通告对等体进行路由刷新。
(1)refresh bgp all import:#
通告对端刷新对本地BGP收到的路由
(2)refresh bgp all export:#
触发重新发送路由给邻居
三. BGP收敛状态:#
BGP收敛主要经过以下几种状态:
① Idle 初始状态
② Connect 连接状态
③ Active 失败等待状态
④ Open Sent协商状态
⑤ Open confirm 连接确立状态
⑥ Established 确定建立状态
1. Idle:#
BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的(为了保证配置时间空闲,通常会存在37s的start延时)。
2. Connect:#
连接状态,双方配置命令后,谁先配置完成谁先主动发起建立TCP,源端口随机,目标端口179,在Connect状态下,BGP启动连接重传定时器,等待TCP完成连接
建立状态:
- 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态
- 如果对方无响应,则5S后发送第二份组播报文,依旧没有响应,等待大约25S时候周期后开始下一轮的TCP报文发送,对方一直无响应,则停留在Connect(对端没有去往本端的路由)
- 如果对方回应拒绝建立TCP连接,则不在继续发送TCP报文,在大约25S后进入Active状态
注:如果控制TCP的主动端和被动端可以使用命令peer listen-only,此时设备只侦听对端,而不主动建立;或者控制主动端的连接端口地址
3. Active:#
失败等待状态,huawei设备依旧为主动建立连接,Active状态一个时间周期(大约25S)只发送一次TCP报文
- 如果建立成功,进入OPENSENT状态
- 如果收到拒绝建立TCP报文(没有启用BGP),则一个时间周期只发送一次,并停留在此状态
- 如果对方无响应(无本端路由,比如进入Active状态,对端路由撤销掉了),一个时间周期后回到Connect状态
4. OPENSENT:#
协商状态,TCP连接建立成功后,发送open报文后,进入OPENSENT状态,开始等待对端接收对端的Open报文
- 根据Open报文中的AS号、版本号、认证码等进行检查。当接收到对端的Open报文后,发现Open报文无误,会立刻发送Keep alive报文,并进入下一状态
- 如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态
OPEN检测不通过的原因:
① Version不相同
② Route ID冲突
③ TTL跳数
④ 源IP与Peer地址不一样
注:BGP Hold-Timer时间不一致不影响邻居的建立
5. OPENCONFIRM:#
等待对端的keep alive报文,当收到对端的keep alive,进入下一状态。
6. Established:#
当成功接收对端Keep Alive报文后,进入Established状态,是一种稳态,并周期的发送Keep Alive报文。
四. BGP表:#
BGP协议中,连接一旦建立,BGP Speaker将把自己产生的所有BGP路由通告给对等体,有多条路径时,BGP Speaker只会选最优的给自己使用放入IP路由表中,BGP Speaker只会选最优的给邻居对等体。
BGP一共包含三张表:
① 邻居表
② IP路由表
③ BGP路由表
1. 邻居表:#
用来查看当前的邻居,使用display bgp peer查看:
① Peer Rcv:对端IP
② V:版本
③ AS:对端AS号
④ MsgRcvd:收到了几条BGP消息
⑤ MsgSent:发出了几条BGP消息
⑥ OutQ:等待发送指定对等体的消息
⑦ State:状态
⑧ Pref Rcv:从邻居学到多少BGP路由条数
2. IP路由表:#
全局路由表,包含目前可用的BGP路由
3. BGP路由表:#
BGP路由表发送原则:
① IBGP路由,只发送给EBGP对等体
② EBGP路由,发布给所有EBGP和IBGP对等体
③ 只将最优路由发布给对等体
④ 只发送增量更新的BGP路由
BGP路由表无效:
① 下一跳不可达(不加入到IP路由表中)
② IGP同步开启,无相应的IGP路由(不加入IP路由表中)
③ 存在相同的IGP路由(不加入IP路由表中)
④ AS ID相同(不接受此BGP路由)
⑤ Cluster List中包含本RR的簇ID(不接受此BGP路由)
⑥ Originator ID和本路由器的Router ID相同(不接受此BGP路由)
⑦ 使用BGP命令 bgp-rib-only(最优BGP路由不会放入IP路由表中)
① >为最佳路由,存在多条路径时,BGP会选择最佳路由放入路由表并传递给邻居
② *为最优化路由,表示当前路由有效,当没有*标明此路 由不是最优
③ i为IBGP邻居学到的路由条目,如果位空表示本地产生或EBGP学到的路由
五. BGP防环机制:#
1. EBGP防环:#
路由条目在跨越AS时,每经过一个AS的边界路由器,会将此路由器的AS号放入路由条目的AS-Path属性中(最左边),记录此路由条目所经历的AS-ID。当AS边界路由器收到路由条目,首先查看它的AS-Path属性,如果AS-Path属性中存在自己BGP的AS号,则认为出现环路,丢弃此路由条目。
2. IBGP防环:#
在AS内,没有一种BGP路由属性用来定义AS内防环的,所以IBGP采用水平分割的机制,当从IBGP邻居传递过来的路由,不会再次传递到IBGP邻居。
六. BGP配置过程:#
① 启用BGP并配置本地AS号
② Peer对等体
③ 等待建立邻居
④ Network宣告网段
1. 启用BGP并配置本地AS号:#
全局模式下使用命令[Huawei]bgp 100启用BGP并配置本地AS号
AS-ID:
其中AS-ID在报文中占16bit,最多可以支持2^16=65535个ID:
① 公有AS号:1-64511
② 私有AS号:64512-65535
2. Peer对等体:#
在BGP进程下,使用命令peer 192.168.1.2 as-number 100指定邻居IP和AS号。
(1)默认直连建立邻居:#
默认Peer对等体之后,路由器使用与对端直连的端口或IGP对应的出接口建立邻居。
(2)LoopBack口建立邻居:#
当与对等体之间不止一条TCP链路时,可以使用逻辑地址建立邻居加强冗余,当一条实际物理链路断掉时,启用另一条建立TCP邻居。
使用命令[Huawei-bgp]peer 192.168.1.2 connect-interface loop 0进行端口修改,此命令只是对主动端发送Open报文时使用哪个接口的IP地址进行设置,如果被动端收到Open报文时,报文的源地址就是本设备的Peer地址,检测无误,则会使用Open报文中的目的地址为源地址回复Open报文建立邻居。
① AR1为主动端,在Connect状态主动发起Open报文,源地址为1.1.1.1,目标地址为2.2.2.2
② AR2收到Open报文后,源地址为Peer地址,报文通过,并且发送本端的Open报文,由于为TCP连接,使用源Open报文的源地址为本端Open报文的源地址
③ AR1收到Open报文后,通过检查,邻居建立
3. 等待建立邻居:#
BGP协议使用单播TCP进行邻居的建立,可以使用本地任何端口进行邻居建立,单播建立邻居的好处是支持多跳邻居建立,默认EBGP TCP报文中的TTL值只有一跳,如果使用Loopback地址或跨跳建立邻居,会造成邻居不可达现象。
使用命令:[Huawei-bgp]peer 192.168.1.2 ebgp-max-hop 10 修改TTL值
EBGP报文抓包:
4. Network宣告网段:#
BGP使用命令network进行路由宣告,宣告路由的必须要存在路由表中,且掩码必须严格匹配路由表掩码,否则无法宣告。
5. BGP优化:#
从IBGP学到的路由条目,有可能没有*,表示没有被优化,如果BGP路由表中的路由没有被优化,此路由条目不会放入IP路由表,通常没有被优化的的原因为:
① 下一跳不可达
② BGP同步
(1)下一跳不可达:#
默认从EBGP学习到的路由条目在传递给IBGP邻居的时候默认不会修改路由的下一跳地址,用于防止次优路径,但是会带来路由不可达的现象。
- 使用命令[Huawei-bgp]peer 192.168.1.1 next-hop-local修改源地址
- 在路由协议中引入之间接口
(2)BGP同步:#
通过BGP学习到的路由,并且也可以通过IGP学习到,才能通告给对等体,称之为BGP同步,当开启BGP同步后,
如果足了同步的条件才能通告给邻居,华为undo synchronization默认不开启,并且无法开启
6. 路由传递:#
BGP默认不使用附载均衡,所以当同一个目的地存在多条等价路径时,BGP协议也会选择出一条最优的路由放入IGP路由表,传递给邻居。
BGP对等体路由交互原则:
① IBGP路由,只发送给EBGP对等体
② EBGP路由,发布给所有EBGP和IBGP对等体
③ 只将最优路由发布给对等体
④ 只发送增量更新的BGP路由
七. 路由反射器:#
Route Reflector,由于IBGP水平分割的原因,为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台设备,那么建立的IBGP连接数就为n(n-1)/2。当设备数目很多时,设备配置将十分复杂,而且配置后网络资源和CPU资源的消耗都很大。在IBGP对等体间使用路由反射器可以解决以上问题。
路由器反射器对路由进行反射,对于同一目标多条路由反射器只会选一条最优的(选路规则),并且默认不会修改任何的属性值,可以在Clint入路由进行修改
注:如果在反射器上使用命令[Huawei-bgp]reflect change-path-attribute命令,此时可以修改反射器反射发送的路由属性参数(huawei交换机不支持)
1. 反射器角色:#
路由反射器定义了以下几种角色:
① Route Reflector 路由反射器
② Client 客户机
③ Non-Client 非客户机
④ Originator 始发者
⑤ Cluster集群
(1)Route Reflector:#
路由反射器RR,允许把从IBGP对等体学到的路由反射到其他IBGP对等体的BGP设备,类似OSPF网络中的DR。
(2)Client:#
客户机,与RR形成反射邻居关系的IBGP设备。在AS内部客户机只需要与RR直连。
(3)Non-Client:#
非客户机,既不是RR也不是客户机的IBGP设备。在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系。
(4)Originator:#
Originator-ID为始发者Router-ID,在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路。
(5)Cluster:#
集群,路由反射器及其客户机的集合,通常一个集群中只有一个RR和一群客户端。Cluster_list属性用于防止集群间产生路由环路。
2. 反射器原则:#
(1)反射器:#
① 反射器从IBGP非客户端接收到的路由,传递给所有的客户端和EBGP邻居。
② 反射器从客户端接收到的路由,传递给所有的客户端、非客户端和EBGP邻居
③ 反射器从EBGP邻居接收的路由,传递给所有的客户端、非客户端和EBGP邻居
(2)客户端:#
① 客户端从反射器学来的路由,只传递给EBGP邻居
3. 反射器规划:#
(1)同一集群内的客户机只与RR建立关系:#
客户机需要通过RR便可以知道网络中的路由条目,所以同一个集群内所有的客户端只需要与RR建立邻居关系即可。
ClUSTER1配置:
R2:
[Huawei]bgp 200
[Huawei-bgp]router-id 2.2.2.2
[Huawei-bgp]reflector cluster-id 1----设置本端的簇为1
[Huawei-bgp]group g1----创建组g1
[Huawei-bgp]peer 4.4.4.4 group g1---将对端4.4.4.4加入组1
[Huawei-bgp]peer 5.5.5.5 group g1---将对端5.5.5.5加入组1
[Huawei-bgp]peer 6.6.6.6 group g1---将对端6.6.6.6加入组1
[Huawei-bgp]peer g1 reflect-client----将组g1设为此RR的客户端
CLENT:
在所有的客户端上,只需有建立与RR的邻居关系即可。
(2)集群间RR建立IBGP全互联关系:#
每个集群只有一个RR,所以此时IBGP中的RR便可以建立全互联的IBGP邻居关系。
如果一个集群内存在多个RR做冗余:
- 由于Cluster id相同,所以另外一台RR不会接收,所以同RR之间不需要建立IBGP邻居
- 如果存在EBGP路由,此时RR之间需要建立IBGP邻居传递EBGP路由,因为没有破坏水平分割,所以RR不会增加这两种属性
4. 反射器防环:#
增加了路由反射器破坏了IBGP的“水平分割”防环机制,所以为了防止路由在IBGP传递时防止出现环路,RR在传递路由时会增加两种属性值,并且这两种属性只在IBGP之间传递,当在EBGP之间传递时,会将这两种属性删除
注:只有在破坏“水平分割”的情况下才会增加这两种属性值,在RR收到EBGP邻居传递过来的路由时传递给Client时不会增加两种属性值,只有收到IBGP路由时反射给Client时会增加。
(1)Originator id:#
起源属性,用于防止集群内出现环路
① 可选非过渡
② 用于集群内的防环
③ 由RR产生,携带了本地AS内该路由发送者的Router ID
原理:
① 路由第一次被RR反射给客户端时,RR会将传递给RR的路由器ID作为Orginator属性加到这条路由中,用来标识这条路由的起源路由器。
② 如果路由中已经存在Originator属性,反射器不会创建新的Originator。
③ 当其他BGP对等体收到这条路由时,将对收到的Originator和本地路由表中的BGP Router-ID进行比较如果两者相同,BGP对等体将会忽略掉这条路由,不做处理Originator属性可以传递给其它的Cluster,路由在AS内传递时该属性不会丢失。
注:如果AR2为AR3的RR,AR2再将1.1.1.1/32的路由传递给AR3时,由于没有破坏水平分割,所以不会增加着两种属性
(2)Cluster List:#
Cluster List属性用于防止集群间产生路由环路
① 可选非过渡
② 用于集群间的防环
③ 由每个路由反射器产生,记录反射路由经过的集群
注:一个AS内可以有多个簇,每个簇可以存在多个RR,同簇中的RR相同,不同簇的ID不相同
原理:
① 当路由反射器在客户端之间或客户端与非客户端之间反射路由时,会将自己的
Cluster—ID增加到Cluster List中
② 路由反射器收到BGP路由后检查其中的Cluster List,如果发现自己的Cluster-ID位于Cluster-ID中,则表明出现了路由环路,会忽略掉该路由。
- 当客户机Client1从EBGP对等体接收到一条更新路由,它将通过IBGP向RR1和RR2通告这条路由。
- RR1和RR2在接收到该更新路由后,将本地Cluster ID添加到Cluster List前面,然后向其他的客户机(Client2、Client3)反射,同时相互反射。
- RR1和RR2在接收到该反射路由后,检查Cluster List,发现自己的Cluster ID已经包含在Cluster List中。于是RR1和RR2丢弃该更新路由,从而避免了路由环路。
八. BGP Confederation:#
BGP路由反射器可以用来减少大型AS中IBGP邻居关系的数量和简化IBGP邻居关系的管理和维护,BGP联盟(Confederation)也可以用来实现类似的目的。
一个BGP联盟是一个具有内部层次结构的AS,一个BGP联盟由若干个子AS(Subautonomous System)组成,子AS也称为成员AS(Member Autonomous System)。
对于一个BGP联盟,其成员AS内部的路由器之间需要建立全互联的IBGP邻居关系或使用BGP路由反射器,而成员AS之间需要建立EBGP邻居关系。
每个联盟都有一个联盟号(Confederation ID),它其实就是一个普通的AS编号。联盟各个成员AS通常使用BGP协议预留的私有的AS编号, 私有AS号为64512-65535。
BGP联盟之间行为:
① 增加成员AS,用于防环,格式为(64513 64514)100
② 下一跳地址不变
③ 保留Local-PREF
④ 保留MED
⑤ 邻居建立TTL值为1
1. 防环机制:#
BGP联盟之后可能会带来环路的风险,在BGP联盟中,使用以下两种属性进行防环:
① AS Confed Sequence
② AS Confed SET
(1)AS Confed Sequence:#
有序的子AS号,AS-Path的Type为4,路由在联盟内部传递时,会携带AS Confed Sequnce,用于防止联盟内部的环路。
格式为(AS Confed Sequence、AS Confed Sequence)AS Sequence
(2)AS Confed SET:#
AS-Path的Type为3,在联盟内部使用路由聚合时,如果开启了汇总路由携带明细路由的AS ID属性功能,会使用AS Confed SET携带这些属性ID
2. BGP联盟配置:#
R2:
[Huawei]bgp 2001----创建BGP子AS进程
[Huawei-bgp]router-id 1.1.1.1
[Huawei-bgp]confederation id 200—---设置子AS所属的总AS
[Huawei-bgp]confederation peer-as 202 203---设置联盟成员号
[Huawei-bgp]peer 3.3.3.3 as-number 202
[Huawei-bgp]peer 3.3.3.3 next-hop-local--不是真正的EBGP邻居,下一跳不更改
[Huawei-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[Huawei-bgp]peer 3.3.3.3 ebgp-max-hop 10-修改TTL值(子AS之间为EBGP,TTL为1,使用loop口建立邻居ttl为1将不可达)
[Huawei-bgp]peer 5.5.5.5 as-number 203
[Huawei-bgp]peer 5.5.5.5 next-hop-local
[Huawei-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[Huawei-bgp]peer 5.5.5.5 ebgp-max-hop 10
注:
- BGP联盟中,子AS之间的AS-Path变为(2003)200用于防环,并且TTL值只有1跳
- BGP联盟之间取消了水平分割的机制用于路由的传递
- BGP联盟默认在传递路由时不会更改下一跳
- BGP联盟默认在传递路由时会携带路由属性,等同于IBGP
九. BGP路由黑洞:#
在BGP网络总,报文穿越AS内部路由器时,有可能会被AS内部中未运行BGP协议的路由器接收到。由于这样的路由器没有AS间的BGP路由信息,报文有可能会被直接丢弃,造成路由黑洞。
如图:
R1访问R5的2.2.2.2网络,将数据包送往R2,R2查找BGP路由表,下一跳为R4的192.168.3.2,使用迭代查找去往192.168.3.2的下一跳为R3的192.168.2.2/24,于是送往R2,R2收到去往2.2.2.2的数据包,查找路由表,发现路由表中没有2.2.2.2/24的路由条目,于是丢弃数据包,造成路由黑洞。
形成BGP路由黑洞的主要原因在于AS内部中IGP路由器没有AS外部的路由,解决方法为:
① IGP路由器中引入BGP路由
② 全部使用BGP路由
③ GRE隧道解决路由黑洞
④ MPLS技术解决路由黑洞
⑤ BGP同步
1. 路由引入:#
在运行IGP和BGP的AS边界路由器中,使用命令将BGP路由引入到IGP路由中,但是会造成中间的IGP路由器造成负担。
解决方法:
① 可以在BGP设备上汇总,将汇总路由引入到IGP路由表中
② 可以配置一条汇总的静态路由指向Null0,将这条汇总的静态路由引入的IGP路由表中
在引入时默认路由设备只引入EBGP路由,如果想要引入IBGP路由,使用import BGP permit IBGP,但是会带来环路的风险。
2. 全BGP协议:#
无论是AS之间还是AS内部全部使用EBGP和IBGP路由,IBGP内部建立全互联,解决路由黑洞问题。
3. GRE隧道技术:#
解决BGP路由黑洞可以采用GRE隧道技术,在数据包的头部在此封装一个IP头部,此头部为AS边界的路由器的IP网段,这样在AS内部传递中,IGP路由器查看数据包只查看最外层GRE增加的头部,将数据包送往AS边界路由器,AS边界路由器对去往另外AS的数据进行转发。
在R2和R4之间建立GRE隧道:
[Huawei]inter Tunnel 0/0/0
[Huawei-Tunnel0/0/0]ip address 10.0.100.2 24---配置隧道口的IP地址
[Huawei-Tunnel0/0/0]tunnel-protocol gre
[Huawei-Tunnel0/0/0]source 10.0.23.2-----定义新IP头部的源地址
[Huawei-Tunnel0/0/0]destination 10.0.34.4-----定义新IP头部的目标地址
[Huawei]ip route-static 10.0.45.0 24 Tunnel 0/0/0 preference 1
[Huawei]ip route-static 10.0.5.5 32 Tunnel 0/0/0 preference 1
注:R2收到数据包后,查看路由表去往10.0.5.5的下一跳地址为10.0.34.4,查找IGP路由表下一跳为10.0。2.3,下一跳送往R3,R3将数据包丢弃。配置静态路由的意思在于数据包去往10.0.3.4会走隧道口,进行隧道封装,增加新的头部,让R3直接送往R4。
4. MPLS迭代标签:#
设备默认不会为BGP单播路由分配标签,但是本端设备可以使用迭代查找的方式在BGP路有数据包前压入下一跳IGP的标签头部,用来解决路由黑洞。
① R4的4.4.4.4想要访问R5的5.5.5.5
② R4将目标地址为5.5.5.5的数据包送往R1
③ 配置了MPLS的R1收到目的地为5.5.5.5的数据包后,查看路由表5.5.5.5下一跳地址为3.3.3.3:
④ 再次查看去往3.3.3.3的标签:
⑤ 发现去往3.3.3.3的Out Label为1025,于是将BGP数据包增加标签头部为1025。
⑥ 收到标签为1025的IGP路由器查看标签转发表:
标签为3,进行次末节标签弹出,送往目的地3.3.3.3,最终数据包被R3收到。
配置:
华为设备默认不启用迭代标签压入,使用以下命令开启:
[Huawei]route recursive-lookup tunnel
5. BGP同步:#
BGP同步是指路由器从EBGP邻居学习到的路由条目如果在IGP中也存在,才会将此条目传递给BGP邻居。如果BGP邻居学习到了一条路由条目,表示此BGP路由条目在IGP中也存在,同时解决了数据在传递过程中出现的路由黑洞问题。
注:华为默认关闭BGP同步,并且无法打开。
6. 物理mash:#
在两个BGP speaker之间增加一条物理链路
十. BGP选路:#
1. 路径属性:#
BGP路径属性是一组描述BGP前缀特性的参数,由于各个厂商制定的属性参数较多,有的属性为私有属性,有的为国际标准属性,各个厂商的设备不一定都支持所有的属性,而有的属性的作用可以在每台路由器上生效,也可以在一个AS内部生效,也可以在所有的AS设备上生效,所以将属性进行分类。
BGP路径属性可以被分为四大类:
① well-known mandatory 公认必遵
② well-known discretionary 公认任意
③ Optional transitive 可选过渡
④ Optional non-transitive 可选非过渡
类别 |
属性 |
well-known mandatory |
① Originator ② As-Path ③ Next-Hop |
well-known discretionary |
① Local_Preference ② ATOMIC_Aggregate |
Optional transitive |
① Aggregate手动聚合 ② community团体属性 |
Optional non-transitive |
① Originator ID ② Cluster List ③ MED |
(1)well-known mandatory:#
公认必遵属性,所有的BGP路由器都可以识别,且必须存在于Update消息中,如果缺少这种属性,路由信息就会出错。
类型协议:
① Originator
② Next-Hop
③ As-Path
注:在IPv4单播BGP报文中,三个属性必须都要存在,而在AFI不等于1的其他BGP网络类型中,下一跳属性存放在MP-REACH-NLRI(多协议网络可达性信息)中
(2)well-known discretionary:#
公认任意 ,所有BGP路由器都可以识别,但不要求必须存在Update消息中,可以根据具体情况来决定是否增加到Update消息中。
类型协议:
① Local preference
② ATOMIC_Aggregate原子聚合
(3)Optional transitive:#
可选过渡,BGP路由器可以选择是否在Update消息中携带这种属性。接收的路由器如果不识别这种属性,可以转发给邻居路由器,邻居路由器可能会识别并且使用到这种属性
协议类型:
① Aggregator手动聚合
② community团体属性
可选过渡属性中,在传递过程中如果有的设备不支持此属性,但是会继续传递此属性值,在继续传递报文之前,会将Flag中的Partial置位,后续设备接收到Partial置位的报文,得知有设备不支持此属性
(4)Optional non-transitive:#
可选非过渡,BGP路由器可以选择是否在Update消息中携带这种属性,在整个路由发布的路径上,如果部分路由器不能识别这种属性,可能会导致该属性无法正常发挥效用,因此在接收的路由器如果不识别这种属性,应当丢弃这种属性,不必再转发给邻居路由器
协议类型:
① Originator ID
② Cluster List
③ MED
2. BGP选路规则:#
① 丢弃下一跳(NEXT_Hop)不可达的路由
② 优选Preferred_value值最大的路由
③ 优选本地优先级(Local_PREF)最高路由
④ Aggregate>Summary>Network>Import
⑤ 优选AS路径(AS_PATH)最短的路由
⑥ ORIGIN属性(I>E>?)
⑦ 优选MED值最低的路由
⑧ 依次选择从EGP、联盟、IBGP学来的路由
⑨ 优选下一跳度量值最低的路由
⑩ 优选Cluster_list长度最短路由
⑪ 优选Originator_id最小路由
⑫ 优选Router-id最小路由
⑬ 优选地址最小的对等体发布的路由
注:默认情况下,BGP不会进行负载均衡,比较到第9条选路规则下一跳度量值一致时,此时可以使用附载均衡命令。
(1)丢弃下一跳不可达的路由:#
当路由器的下一跳不可达时,display ip routing-table将无法看到此条路由,bgp路由器已将下一跳不可达的路由直接丢弃。
NEXT_Hop属性规则:
- BGP Speaker在向EBGP对等体发布某条路由时,NEXT_Hop值为空,会把路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址
- BGP Speaker在向IBGP对等体发布某条路由时,NEXT_Hop值为空,会把路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址
- BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。
① 命令[Huawei-bgp]peer 192.168.2.2 next-hop-invariable保持NEXT_Hop的原属性值传递
② 命令[Huawei-bgp]peer 192.168.2.2 next-hop-local修改下一跳为自身接口IP
next-hop-invariable应用场景:
① AR5、AR6、AR7之间运行IGP路由协议
② AR7将7.7.7.7/32的路由条目通过IBGP邻居关系传递给AR6,如果下一跳属性为Local,则IP地址为192.168.2.2
③ AR6收到路由后,将路由条目传递给RBGP邻居AR5,下一跳属性为Local,则IP地址为192.168.1.2
④ AR6访问7.7.7.7,下一跳属性为192.168.2.2,根据IGP迭代查询下一跳地址为192.168.1.1,将数据包送给AR5
⑤ AR5收到数据包后,BGP路由表中7.7.7.7的下一跳属性IP地址为192.168.1.2,将数据包又送回AR6,形成路由环路
⑥ 如果AR6将NEXT_Hop模式改为Invariable,则在将路由传递给AR5时,下一跳属性IP为192.168.2.2,AR5收到数据后,直接将数据包送给AR7,解除环路
(2)优选Preferred_value值最大的路由:#
协议首先值PrefVal:(华为私有,默认为0),数值高者优先,此属性值不会发送给任何BGP邻居,仅本地有效
PrefVal主要用于路由器从哪个端口送出数据包。
配置命令:
①宣告对等体,将对等体全部发送过来的路由Pref-value属性改为100
[Huawei-bgp]peer 10.0.13.1 preferred-value 100—将10.0.13.1发送过来的路由中pref-value属性值全部改为100
②使用Router-Policy,实现负载分担:
[Huawei]ip ip-prefix 1 permit 10.0.44.44 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply preferred-value 100
[Huawei]route-policy 1 permit node 10
[Huawei-bgp]peer 10.0.1.1 route-policy 1 import----R1发送过来的10.0.44.44的路由条目的Pref-Value值为100
[Huawei]ip ip-prefix 2 permit 10.0.55.55 32
[Huawei]route-policy 2 permit node 5
[Huawei-route-policy]if-match ip-prefix 2
[Huawei-route-policy]apply preferred-value 100
[Huawei]route-policy 2 permit node 10
[Huawei-bgp]peer 10.0.2.2 route-policy 2 import----R2发送过来的10.0.55.55的路由条目的Pref-Value值为100
实现负载平衡。
(3)优选Local_Preference值最大的路由:#
本地优先级Local_PREF:缺省值为100,数值高者优先。本地优先级(Local_PREF)属性仅在
IBGP对等体之间交换,不通告给其他AS。
Local_PREF主要用于控制流量离开AS时的最佳路由,也就是从哪个边界路由器离开AS
配置命令:
①BGP试图下,使用命令将本路由器的Local-Pref改为200
[Huawei-ospf-1]bgp 100
[Huawei-bgp]default local-preference 200
②使用Router-Plicy实现负载均衡:
R2:
[Huawei]ip ip-prefix 1 permit 44.44.44.44 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply local-preference 200
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 100
[Huawei-bgp]peer 1.1.1.1 route-policy 1 export
R3:
[Huawei]ip ip-prefix 1 permit 55.55.55.55 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply local-preference 200
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 100
[Huawei-bgp]peer 1.1.1.1 route-policy 1 export
实现负载均衡。
注:Local_PREF不会在联盟子AS中传递
(4)A>S>N>I>L:#
根据路由生成方式进行对比,路由生成方式:
A(aggregate)>S(summary)>N(network)>I(import-route)>L(从邻居学习来的路由)
(5)AS-PATH:#
公认必遵属性,优选AS路径(AS_PATH)最短的路由,BGP路由器在向EBGP对等体宣告路由时,会在该路由的AS_Path最左端增加本地自制系统的AS编号,长度短者优先。AS_PATH属性值会在所有的自制系统内修改as编号,修改AS-Path的长度可以控制BGP的选路,AS-Path会在所有的路径中携带。
AS-Path主要用于整体上控制数据经过AS的路径。
注:在路由器BGP试图下使用命令bestroute as-path-ignore,此时不再比较AS—PATH属性
AS-PATH Segment Type:
① AS Sequence
② AS Set
③ AS Confed Sequence
④ AS Confed SET
① AS Sequence:
有序的AS排列,AS-Path的Type为2,如果存在AS Set,总是在AS Set前面存在,每经过一个AS,AS Sequence会记录此AS ID,用于防止路由环路。
② AS Set:
无序的AS排列,AS-Path的Type为1,如果使用了路由聚合功能,而且开启了AS-Set参数选项,则聚合路由会将所有顺序明确的使用AS Sequence表示,顺序不明确的使用AS Set表示,一个AS Set为一个长度的AS ID
子路由一:1 2 3 4 5
子路由二:1 2 3 6 7
聚合后的路由属性:1 2 3 {4 5 6 7}
配置命令:
① Router-Policy实现负载均衡:
R15:
[Huawei]ip ip-prefix 1 permit 22.22.22.22 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply as-path 20 30 additive—在源路由AS-Path属性上增加20,30(如果为overwrite覆盖源AS-Path)
注:如果增加的AS号码存在网络AS上,则收到路由器后,属性中的AS ID和自身的AS ID一致,
会拒绝此路由,所以建议后面使用本AS ID,如 apply as-path 20 20 20 20
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 500
[Huawei-bgp]peer 10.0.15.1 route-policy 1 export
AS-path号已增加。
(6)ORIGINATOR属性:#
ORIGIN为起源属性,公认必遵属性,表示这条路由产生方式,对于BGP起源属性来说:
IGP优于EGP优于?
- I为路由始发AS的Network得到的路由信息
- E为古老的EGP协议
- ?为Incomplete,不完整属性,当使用Import命令引入IGP路由时,为此数值
使用Route-policy修改起源属性:
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply origin incomplete
(7)优选MED值最低的路由:#
Multi Exit Discriminator,多出口区分符,MED属性只会影响相邻两个AS,当一个AS收到另一个AS路由条目后,不会在将此条目的MED属性传递给EBGP邻居(除非手工配置传递给EBGP邻居MED值),MED缺省值为0,数值小者优先。在BGP选择最佳路径时,MED值为空实际上值为0,当使用Import命令将IGP路由引入到BGP路由表中,BGP协议直接将IGP的cost值作为MED值放入BGP路由表中
MED属性的主要作用是用来控制来自邻居AS的流量从哪个口进入本AS中
注1:只有相同的AS中的邻居路由器传递的路由携带MED属性值才会进行比较,否则跳过MED选路属性,使用命令[Huawei-bgp]compare-different-as-med可以对不同的AS上进行MED值比较
注2:默认比较的顺序为从时间最老的两条路由条目进行比较,如果使用命令[Huawei-bgp]deterministic-med之后,会将每条路由以AS为单位进行分类,同等AS之间进行比较,各个AS中最优的路由在进行比较
注3:默认BGP协议引入(Network、Import)会将IGP中的cost复制到BGP路由中的MED中,并传递给IBGP邻居,当传递给EBGP邻居时,MED属性值消失
注4:如果存在联盟,由于联盟内的路由携带子网AS ID,所以不会比较MED属性
配置命令:
①使用命令修改路由器的MED值:
[Huawei-bgp]default med 100-----此命令只对本设备import的IGP路由med值起作用
②使用Router-Policy实现负载均衡:
R2:
[Huawei]ip ip-prefix 1 permit 11.11.11.11 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply cost 100
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 100
[Huawei-bgp]peer 192.168.3.2 route-policy 1 export
R3:
[Huawei]ip ip-prefix 1 permit 10.10.10.10 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply cost 100
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 100
[Huawei-bgp]peer 192.168.4.2 route-policy 1 export
实现负载均衡。
注:默认在比较MED值时只会比较通AS中的MED值,如果来自不同AS中相同的路由不会比较MED。
可以使用以下命令比较来自不同AS中的路由的MED值:
[Huawei-bgp]compare-different-as-med
(8)EBGP>联盟>IBGP>Local Cross>Remote Cross:#
依次选择从EGP、联盟、IBGP学来的路由、Local Cross、Remote Cross
- Local Cross:VPNv4路由同PE传递过来的VPnv4路由
- Remote Cross:VPNv4路由对端PE传递过来的VPNv4路由
(9)选择IGP下一跳度量值最低的路由:#
比较两条路由对应的下一跳的开销值
开启附载均衡:#
注:当前面九条全部相同,并且AS_PARH序列号ID一模一样,此时可以使用命令开启附载均衡:
[Huawei-bgp]maximum load-balancing bgp 8-----开启BGP附载分担,负载分担的
最大路径为8条
(10)优选Cluster_list长度最短路由:#
当AS内部存在多个集群时,优先现则路由条目总Cluster List长度短者优先的路径。
(11)优选Originator_id最小路由:#
当路由条目中存在Originator Id时,优先选择Id小的路由条目。
(12)优选Router-id最小路由:#
存在到达同一目的地址的多条路由时,BGP优选Router ID最小的设备发布的路由。
注:如果路由属性中存在Originator-ID属性,而无法比较出最优路由,此时不会比较Router-ID,而是直接比较IP地址,如果没有Originator-ID,会比较Router-ID
(13)优选IP地址最小路由:#
优选从具有较小IP地址的对等体学来的路由,如果BGP在比较对等体地址之前还没有选出最优路由,则表明本设备和另外一台设备之间通过等价链路建立了多个BGP邻居关系。一般情况下,在两台设备之间存在用于备份的物理链路时,我们推荐使用Loopback接口来建立BGP邻居,但是实际上,两台设备之间通过多个物理链路建立多个BGP邻居关系也不违反协议规定。
十一. BGP路由过滤:#
1. filter-Policy:#
过滤策略,由于BGP为矢量路由协议,所以可以直接使用filter-Policy在入方向和出方向对路由进行过滤。
[Huawei]acl 2000
[Huawei-acl-basic-2000]rule 5 deny source 1.1.1.2 0
[Huawei-acl-basic-2000]rule 10 permit source any
[Huawei-bgp]bgp 100
[Huawei-bgp]peer 2.2.2.2 filter-policy 2000 export
2. Prefix-Policy:#
前缀策略,使用IP-Prefix定义路由条目,BGP直接调用IP-Prefix进行路由的过滤
[Huawei]ip ip-prefix 1 index 5 deny 2.2.2.2 32
[Huawei]ip ip-prefix 1 index 10 permit 0.0.0.0 0 less-equal 32
[Huawei-bgp]bgp 100
[Huawei-bgp]peer 1.1.1.1 ip-prefix 1 export
3. Router-Policy:#
BGP路由条目的下一跳实际为对端邻居接口标识,可以根据下一跳过滤路由条目:
在R4上过滤下一跳为192.168.1.1的路由条目:
[Huawei]ip ip-prefix 1 permit 192.168.1.1 32
[Huawei]route-policy 1 deny node 5
[Huawei-route-policy]if-match ip next-hop ip-prefix 1
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 400
[Huawei-bgp]peer 192.168.1.1 route-policy 1 import
已无下一跳为192.168.1.1的路由条目
4. AS-Path-Filter:#
BGP路由条目都会携带BGP的AS-ID,BGP过滤可以针对AS的ID号进行过滤,过滤公式为正则表达式
正则表示式符号:
符号 |
说明 |
^ |
匹配一个字符串的开始。如“^200”表示只匹配AS_PATH的第一个值为200 |
$ |
匹配一个字符串的结束。如“200$”表示只匹配AS_PATH的最后一个值为200 |
_ |
匹配一个符号。如逗号,括号,空格符号、前面(后面)什么都没有 |
. |
匹配所有的内容,一个.表示一个符号(包含数字、符号、空格) |
* |
单目操作符,匹配前面的一个字符,如34*,表示4出现次数≥0次 |
+ |
单目操作符,匹配前面的一个字符,如34+,表示4出现次数≥1次 |
? |
单目操作符,匹配前面的一个字符,如34?,表示出现次数≤1次 |
() |
匹配变化的AS或者一个独立的匹配,通常和“|”一起使用 |
| |
逻辑或,如(23|34),表示只要出现23或34都匹配 |
[] |
匹配内部的任何单个的数,通常和“-”一起使用 |
- |
连接符,如[123-56],表示出现1、2、3、4、5、6都匹配 |
常见正则表达式关系图:
^$ Null,本区域始发的路由或引入的路由
.* 匹配所有路由
. 除空以外的所有路由
10_20_30匹配所有通过AS为10、20、30的路由条目
^10$ 匹配AS_Path中只有AS10的路由
^10_. 匹配从相邻AS10接收的路由
^[0-9]+$ 匹配任意一个AS号
AS-Path属性过滤配置:
① 在R4传递给R5路由条目时,过滤AS200的路由条目
[Huawei]ip as-path-filter 1 deny ^200
[Huawei]ip as-path-filter 1 permit .*
[Huawei]bgp 400
[Huawei-bgp]peer 5.5.5.5 as-path-filter 1 export
已无AS200的路由条目
5. Community属性:#
BGP的路由团体属性Community的主要作用是简化路由策略的实施过程,可选过渡。例如,可以将拥有相同团体属性的若干路由视为属于同一个团体,当需要对该团体中所有路由的某个属性进行修改时,可以通过匹配相应的团体属性来自动实现所有路由的特定属性的修改。
团体属性是BGP路由的一种可选属性,路由器在向BGP对等体传递路由时,如果希望所传递的路有携带团体属性,需要额外配置。
(1)常规Community属性:#
一条BGP路由可以应有多个团体属性,团体属性的值规定为4个字节,
表示方式:
① AA:NN的格式表示,其中前2个字节AA为AS号,后2个字节NN为团体编号。最大数值为65535:65535
② 团体属性的值也可以表示为一个十六进制数或十进制数,范围是0x00000000~0xffffffff或0~4294967295,其中,0~65535和4294967295为预留值
配置:
①为R1上的所有路由打上团体属性值为10:100,R2上的路由打上团体属性值为20:100:
注:如果if-match community-filter,则需要使用命令
R1:
[Huawei]ip ip-prefix 1 permit 1.1.1.1 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply community 10:100
[Huawei-bgp]peer 192.168.1.1 route-policy 1 export
[Huawei-bgp]peer 192.168.1.1 advertise-community--------默认不传递Community属性,使用此命令激活传递
R2:
[Huawei]ip ip-prefix 1 permit 2.2.2.2 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply community 20:100
[Huawei-bgp]peer 192.168.2.1 route-policy 1 export
[Huawei-bgp]peer 192.168.2.1 advertise-community
R3上查看团体属性:
② 在R3上将团体属性值为10:100、20:100的路由条目的MED值设置为100传递给R4
R3:
[Huawei]ip community-filter 1 permit 10:100 20:100
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match community-filter 1
[Huawei-route-policy]apply cost 100
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 300
[Huawei-bgp]peer 4.4.4.4 route-policy 1 export
已修改MED值
(2)特殊Community属性:#
RFC1997定义了几种特殊的团体,也被称为Well-Known团体:
① Internet
② No-Export
③ No-Export-Subconfed
④ No-Advertise
① Internet:
Internet团体属性没有一个特定的值,所有路由都默认认为属于该团体,路由器可以向任何BGP对等体发布所收到的属于Internet团体的路由。
② No-Export:
No-Export团体属性的值为4294967041(0xffffff01)。路由器接收到一条携带No-Export团体属性的路由后,不会将它发布给EBGP对等体,但可以发布给IBGP对等体和联盟EBGP对等体。
③ No-Export-Subconfed:
No-Export-Subconfed团体属性的值为4294967043(0xffffff03)。路由器收到一条携带No-Export-Subconfed团体属性的路由后,只会将它发布给IBGP对等体,不会将它发布给EBGP对等体和联盟EBGP对等体。
④ No-Advertise:
No-Advertise团体属性的值为4294967042(0xffffff02)。路由器接收到一条携带No-Advertise团体属性的路由后,不会将它发布给任何BGP对等体。
十二. BGP可扩展性:#
1. BGP安全特性:#
BGP安全特性主要包含以下几个方面:
① MD5
② GTSM
③ 限制从对等体接收的路由数量
④ AS-Path长度保护
(1)MD5:#
可以使用MD5对BGP报文进行加密,在建立TCP连接时进行MD5认证,由于所有的报文承载在TCP报文之上,所以BGP所有报文都要认证。
使用以下命令进行MD5加密:
[Huawei-bgp]peer 192.168.3.1 password cipher Huawei
(2)GTSM:#
Generalized TTL Security Mechanism,通用TTL安全防护机制。GTSM通过检查IP报文头中的TTL值是否在一个预先定义好的范围内,对IP层以上业务进行保护。在实际应用中,主要用于保护健在在TCP/IP基础上的控制层面(路由协议等)免受CPU利用(CPU-utilization)类型的攻击入CPU过载(CPU overload)
解决的安全问题:
攻击者模拟真实的BGP报文,对一台路由器不断的发送报文,路由器收到这些报文后,发现是发送给本机的报文,转发层面直接上送控制层平面由BGP协议处理,而不加辨别其“合法性”,这样导致路由器因为处理这些报文,系统异常繁忙,CPU占用率高。类似于DOS攻击。
GTSM是一种利用TTL防止以上类型攻击的通用化技术,主要手段如下:
- 对于直连的协议邻居:将需要发出的协议报文的TTL值设定为255,这样部署了GTSM
功能的邻居收到后,邻居转发层面会将TTL值为非255的协议报文直接丢弃,避免了对控制层面的攻击。
- 对于多跳的邻居:可以定义一个合理的TTL范围,例如251-255,邻居转发层面收到不
匹配这个TTL范围的协议报文直接过滤掉,从而避免了控制层面受到攻击。
GTSM配置命令:
[Huawei-bgp]peer 192.168.1.1 valid-ttl-hops 1
注:hops默认值为255,多跳定义范围时,公式为【255-hops+1,255】,缺省情况下,hops
取值为255,即TTL有效值范围为{1,255}。对于EBGP直连路由,hops的取值为1,即
有效的TTL值为255。
(3)限制对端路由数量:#
由于路由器的性能有限,为了防止路由器宕机,可以使用命令限制从对端接收到的最大BGP路由数量。
配置命令:
- 100:允许接收的最大上限为100条
- 75: 当超过最大上限的75%时,进行告警,缺省值为75
- alert-only: 对路由器超限仅限于产生告警,不再接收超限后的路由
- idle-forever:路由超限断开连接,并且不会自动重新建立连接,手工使用命令reset bgp
- idle-timeout: 路由器超限断开连接,自动重新建立连接的超时定时器。整数形式,取
值范围为1-1200,单位是分钟,在定时器超时前,可以手工使用命令reset bgp
- 不配置以上参数的时候,路由超限产生告警并计入日志,邻居断开,30S后自动重新尝试建立邻居关系。
(4)AS-Path长度保护:#
缺省情况下,AS-Path属性中的AS号的最大限制为2000,可以使用命令对AS号进行限制。
使用以下命令进行AS-Path长度保护:
[Huawei-bgp]as-path-limit 10—只接收路由条目中AS号不超出10个AS号的路由条目
2. 路由衰减:#
Route Dampening,路由衰减主要用来解决路由不稳定问题,路由不稳定的主要表现形式为路由震荡(Route Flaps),即路由表中的某条路由反复的消失和重现,发生路由震荡时,路由协议就会向邻居发布更新,收到更新报文的路由器重新计算路由并修改路由表,所以频繁的路由震荡会消耗大量的带宽资源和CPU资源,严重时会影响网络的正常工作。
原理:
BGP衰减使用惩罚值来衡量一条路由的稳定性,惩罚值越高则说明路由越不稳定。路由每发生一次震荡(路由从激活状态变为未激活状态,称为一次路由震荡),BGP变回给此路由增加一定的惩罚值(1000)。当惩罚值超过抑制阀值时,次路由被抑制,不加入到路由表中,也不再向其他BGP对等题发布更新报文。
被抑制的路由每经过一段时间(900S)惩罚值便会减少一半。这个时间成为半衰期(Half-life)。当惩罚值降到再使用阀值时,次路由变为可用并加入到路由表中,同时向其他BGP对等体发布更新报文。
注:路由衰减只针对EBGP生效,对IBGP无效。
配置命令:
[Huawei-bgp]dampening 15 1000 3000 5000
- 配置半衰期时间为15分钟,如果路由震荡超出阀值,如果15分钟内没有出现震荡,惩罚值减少一半。
- 配置使用阀值为1000,当减少到1000时,路由可用
- 配置抑制阀值为3000,当惩罚值超出3000,路由不可用
- 配置抑制阀值上限为5000,表示当惩罚值增加到5000时,不再增加
3. BGP ORF:#
BGP Outbound Route Filtering,BGP出方向的路由过滤,基于本地的入口策略构建对端的出口策略,实现BGP按需发布路由。
当在R2上配置入方向的路由过滤时,R1会将所有的路由传递给R2,R2根据路由策略选择接收哪些路由条目,但是此时R1已将所有的路由条目传递给了R2,造成了链路带宽的浪费。
ORF原理:
在R2上配置ORF,配置IP前缀选择所要接收的路由条目,ORF会将所要接收的路由条目打包到Route-refresh中,发送到对端邻居,告诉邻居所要接收的路由条目,当对端收到Route-refresh报文会在接口上构建策略。
ORF配置:
R2:
[Huawei]ip ip-prefix 1 index 5 permit 1.1.1.2 32----配置接收的报文
[Huawei]bgp 100
[Huawei-bgp]peer 192.168.1.1 capability-advertise orf ip-prefix both
[Huawei-bgp]peer 192.168.1.1 ip-prefix 1 import
R1:
[Huawei-bgp]peer 192.168.1.2 capability-advertise orf ip-prefix both
4. Active-Route-Advertise:#
激活路由通告,路由必须同时满足在BGP协议层面优选与在路由管理平面活跃两个条件,才能向邻居发布。
原理:
默认情况下,当路由存在BGP路由表中并且为最优即可向邻居发布,当配置Active-Route-Advertise后,发送给对端的条件不仅需要在BGP路由表中为最优,而且要在IP路由表中为最优(协议优先级)。
注:与命令[Huawei-bgp]bgp-rib-only(禁止BGP路由下发到IP路由表)互斥
配置:
[Huawei-bgp]active-route-advertise----激活active-route-advertise
5. BGP按组打包:#
按组打包技术将所有拥有共同出口策略的BGP邻居当做是一个打包组,每条待发送路由只被打包一次然后发送给组内的所有邻居。
配置:
R2:
① 定义组内容:
[Huawei-bgp]group RR internal---配置打包组RR为IBGP组
[Huawei-bgp]peer RR connect-interface LoopBack 0---配置建立接口
[Huawei-bgp]peer RR reflect-client----配置作为组RR的客户端
[Huawei-bgp]peer RR next-hop-local----配置组RR的下一跳为自身
[Huawei-bgp]reflector cluster-id 2.2.2.2
② 建立邻居应用组RR内容:
[Huawei-bgp]peer 3.3.3.3 group RR
[Huawei-bgp]peer 4.4.4.4 group RR
[Huawei-bgp]peer 5.5.5.5 group RR
6. 4Byte的AS号:#
BGP报文头部的AS号长度只支持2Byte,4ByteAS号特性是将AS号的编码范围由2字节扩大为4Byte。
支持4Byte的BGP并没有改变原报文格式,Open的MY AS长度依旧为2Byte,而真正的4Byte的AS号标识存放在扩展Options中,原Open的MY AS中使用23456进行标识
7. AS特性:#
(1)public-as-only:#
ISP在部署网络时,如果AS号码不够使用,通常会使用私有AS号码,但是私有AS号码不能在互联网上传递。
在AR9上使用命令[Huawei-bgp]peer 192.168.1.1 public-as-only,此时在AR9将企业路由传递
给AR8时,会自动将AS号码删除
注:前提为企业路由AS属性中不能存在公网路由
(2)fake-as:#
① AR9和AR8使用正常的AS号码建立邻居
② AR9和AR10之间AR9使用AS400与AR10建立邻居
AR9:
[Huawei]bgp 200
[Huawei-bgp]peer 192.168.2.2 as-number 300
[Huawei-bgp]peer 192.168.2.2 fake-as 400
AR10:
[Huawei]bgp 300
[Huawei-bgp]peer 192.168.2.1 as-number 400
③ 而AR9在向AR8传递路由时,不会携带AS400的AS-PATH属性ID
(3)allow-as-loop:#
① AR8和AR10都为AS300,所以AR8不会接收从AR9传递过来的关于AR10的路由条目
② 使用命令[Huawei-bgp]peer 192.168.1.2 allow-as-loop 2允许路由属性中的AS ID和自身的AS ID相同,并且相同的次数为2次
在全局下使用命令[Huawei-bgp]bestroute as-path-ignore
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南