七、BGP的基本配置
(一)、BGP建邻的基本配置
- EBGP对等体关系直连建邻
[r1]bgp 1 ---- 启动BGP进程 后面的1不是进程号,而是配置路由器所
在AS的AS号
[r1-bgp]
[r1-bgp]router-id 1.1.1.1 配置RID
[r1-bgp]peer 12.0.0.2 as-number 2 手工指定对等体关系
[r1]display bgp peer 查看BGP邻居表的命令
- IBGP对等体关系之间的环回建邻
由于IBGP邻居处于同一个AS中,一般情况下,一个AS中存在大量的备份路径,若使用物理接口建立邻居关系,将浪费这些备份或者负载均衡资源,故建议使用环回接口来进行IBGP对等体关系的建立。
[r2-bgp]peer 3.3.3.3 as-number 2
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 指定在给3.3.3.3发包时使用的源IP地址为环回接口0的IP地址。
注意:在使用环回接口建立对等体关系时,一定要修改发送接口。
- EBGP对等体关系之间的非直连建邻
注意:在EBGP对等体关系之间,一般是不具备非直连建邻的路由基础的,所以,需要先保证地址可达才行。
[r4-bgp]peer 5.5.5.5 as-number 3
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2 --- 因为EBGP对等体之间一般是直连建邻,所以,数据包中的TTL值设置为1,要想非直连建邻,则需要将这个值改大。
[r5-bgp]peer 4.4.4.4 ebgp-max-hop --- 如果后面不跟参数,则代表将TTL值修改为最大值255
(二)、发布路由
- network --- 在BGP中只能用来发布路由条目信息
注意:只要是路由表中存在的路由条目信息,BGP都可以通过Network来
进行发送。
[r1-bgp]network 1.1.1.0 24 --- 目标网段信息及掩码必须和路由表中的完全一致
才行。
[r1-bgp]display bgp routing-table --- 查看BGP表
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.1.1.0/24 0.0.0.0 0 0 i
Network --- 目标网段信息及掩码信息
NextHop --- BGP的一个路径属性 谁发的路由信息,下一跳就是谁,如果是自己发的,则下一跳为0.0.0.0。
- 状态码
①* --- 代表可用 设备每收到一跳路由信息,都会检查其下一跳的可达性。即根据下一跳在路由表中递归查询,只要可达,则改路由信息可用。
②> --- 代表优选 当收到到达相同网段存在多条路由信息时,BGP将在其中根据属性优选出一条加载到路由表中。这条优选路由将赋予这个标记。
注意:只有一条路由条目是可用且优选的,他才能够被加到路由表中,也才能够被传递给其他的BGP对等体。
1.1.1.0/24 EBGP 255 --- 通过EBGP对等体学到的BGP路由信息,其标记为EBGP,默认的优先级为255。
③I --- 状态码I --- 代表BGP路由信息是从自己IBGP对等体处学到的
④i 1.1.1.0/24 12.0.0.1 --- 因为在AS内部存在AS-BY-AS规则,所以,默认情况下传递的属性信息是一致的,因为这个下一跳也属于路径属性之一,默认情况下也不会传递,则将可能导致路由可用性校验失败。
[r2-bgp]peer 3.3.3.3 next-hop-local --- 在给3.3.3.3传递路由信息是将下一跳属性改为本地
1.1.1.0/24 IBGP 255 --- 通过IBGP对等体学到的BGP路由信息,其标记为IBGP,默认的优先级为255。
路由表中的NextHop直接使用的是BGP属性中的下一跳,因为之前进行过可用性校验,所以,可以保证能够递归查找找到这个下一跳。
3. 重发布
(1)如何重发布:[r2-bgp]import-route ospf 1 --- 将OSPF的路由信息导入到BGP当中。
(2)OGN --- 起源码 --- I,e,? --- 用来标识路由条目的起源
①I --- 代表该路由信息起源于IGP协议(不局限于IGP协议, 包括静态,直连),代表该路由条目起源于AS内部 --- 通过network发布出来的路由信息其起源码为I
②E --- 代表该路由信息起源于EGP协议 --- EGP指的是BGP之前使用的外部网关协议
③? --- 通过除了以上两种方式学习到的路由 --- 重发布导入的路由起源码都是?
八、BGP的路由聚合
(一)、自动聚合
1,该方法只能针对重发布发布的路由信息生效。
2,自动聚合的路由只能按照主类进行聚合,将造成巨大的路由黑洞。所以,华为设备BGP的自动聚合功能是默认关闭的。
3,配置方法
①抓取流量
[r1]ip ip-prefix aa permit 172.16.0.0 22 greater-equal 24 less-
equal 24 2,做路由策略
[r1]route-policy aa permit node 10 Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix aa [r1-route-policy]q
②在重发布过程中调用路由策略
[r1-bgp]import-route direct route-policy aa
[r1-bgp]summary automatic --- 开启自动聚合的方法
Info: Automatic summarization is valid only for the routes imported through the
import-route command.
*> 172.16.0.0 127.0.0.1 --- 通过自动聚合会发布一条新的汇总路由,他是不携带子网掩码的,因为按照主类汇总,则子网掩码取主类默认值。而且通过聚合发布的路由信息其下一跳属性为127.0.0.1
注意:自动聚合之后,发布的汇总路由信息将在本地路由表中产生一条指向汇总的空接口,自动防环。
状态码 --- S --- suppressed --- 抑制 --- 抑制路由条目的传递
(二)、手工聚合
因为自动聚合存在两个缺陷,所以,如果需要对汇总进行精准把控时,手工聚合将是更理想的方案。
- 配置方法:
[r1-bgp]aggregate 172.16.0.0 22 --- 手工聚合
*> 172.16.0.0/22 127.0.0.1 --- 手工聚合后发布的路由条目将携带掩码信息,并且下一跳也是指向127.0.0.1,则其也会自动生成一条到达汇总网段指向空接口的路由进行防环。
- 手工聚合的问题:
1,发布聚合路由的情况下,不会抑制明细路由,导致汇总操作并没有减少路由条目数量,反而增加了。
2,在进行汇总的时候,发布的汇总路由不会继承明细路由的属性,尤其是AS_PATH,则将导致汇总路由部分属性缺失,甚至可能出现环路。为了避免以上两个问题的产生,我们必须在配置过程中增加命令来完成。
①:对于第一个问题
[r4-bgp]aggregate 172.16.0.0 22 detail-suppressed --- 在发布汇总路由条目的同时将抑制所有的明细路由。但是,因为BGP协议的一些特殊性,我们往往不能将其所有的明细路由全部抑制。只能够抑制部分的路由信息 --- 所以我们需要使用到suppressed - policy。
1,抓取流量,使用前缀列表
[r4]ip ip-prefix aa permit 172.16.1.0 24 2,
2,使用路由策略匹配流量
[r4]route-policy aa permit node 10 Info: New Sequence of this List.
[r4-route-policy]if-match ip-prefix aa [r4-route-policy]q
3,使用抑制策略调用路由策略
[r4-bgp]aggregate 172.16.0.0 22 suppress-policy aa
②对于第二个问题,
Ⅰ、解决方法:我们专门设计了一个AS_SET关键字,如果在配置命令的时候,将这个关键字激活,则BGP在汇总路由时,将携带上明细的AS_PATH属性,来进行防环。
[r4-bgp]aggregate 172.16.0.0 22 suppress-policy aa as-set
*> 172.16.0.0/22 127.0.0.1 0 {1 4}? --- 如 果
明细路由携带的AS_PATH属性不一样,则在激活了AS_SET属性后,汇总路由将会把明细路由的AS号都携带上并且用大括号括起来,之后,在进行防环的时候,里面所有AS号都将生效,都不能回传。但是,在使用AS_PATH属性进行选路的时候,当作一个 AS来看待。
- 因为聚合后的路由信息存在属性丢失问题,所以,这样的汇总路由需要格外的关注。为此,我们为BGP专门引入了两个属性 --- ATOMIC_AGGREGATE,AGGREGATOR
①:ATOMIC_AGGREGATE --- 纯粹预警属性 --- 只有在抑制全部明细路由时才会携带
②:AGGREGATOR --- 将携带汇总者的RID以及其所在的AS号
Aggregator: AS 2, Aggregator ID 4.4.4.4, Atomic-aggregate
[r4]display bgp routing-table 172.16.0.0 --- 查看一条路由的详细情况
九、路由反射器
(一) 路由反射器 :Router Reflector --- --- RR
定义:我们可以通过配置,将某些设备在一定的条件下设置称为路由反射器,之后,该设备将可以反射所学习到的IBGP路由信息。
- 客户
我们在指定一台路由器称为路由反射器(RR)的同时,必须在他的IBGP对等体关系中选择一个或者多个设备称为他的客户(client)
- 反射簇R
R和客户之间所构成的系统我们称为反射簇(Cluster)。每一个反射簇都将使用RR的RID作为簇ID。其余没有称为RR客户的IBGP对等体关系,我们将称其为非客户。
(二)、路由反射器的反射规则:
1,当路由反射器从自己客户处学习到一条路由,则他将会把这条路由信息反射给自己所有的客户以及非客户
2,如果路由反射器从自己的非客户处学习到一跳路由,则他将把这条路由信息反射给自己所有的客户但是不能反射给非客户。
“非非不传”
3,当路由器执行路由反射时,他只将自己使用的最优的BGP路由进行反射。
4,起源者ID,簇列表:
(1)为什么使用起源者ID,簇列表
因为IBGP水平分割是为了防止环路的产生,而路由反射器将路由反射之后就打破
IBGP的水平分割,就可能造成环路的出现。所以,路由反射器为了防止环路的出现,又引入了两个属性 ---Originator_ID(起源者ID),Cluster_list(簇列表)
①:起源者ID --- O_ID ---
当一条路由信息来到路由反射器时,反射器需要将这条路由信息反射,反射前将
在该路由信息中添加这个属性,这个属性的值为该反射器收到这条路由信息的通告者的RID,之后,别的路由反射器收到一条路由信息如果其中包含O_ID,则他将不会改变这个属性。如果一台设备收到一条路由条目其中起源者ID为自己本地的RID,则将不再学习这条路由信息,起到防止环路的效果。
如果在一个AS当中,存在多次反射,则一定存在多个反射簇,则每个RR在反射路
由信息时都会在其中簇列表属性中添加本地的簇ID。当一个设备收到一条反射的路由信息后,其中的簇列表属性中包含本地簇ID,则将不再学习该路由,防止环路的产生。
[r3-bgp]peer 2.2.2.2 reflect-client --- 指定R2作为反射客户,则同时R3 自动成为RR
十、联邦
(一)、定义:联邦的思想就是将同一个AS当中的IBGP对等体关系改变为EBGP对等体关系,通过这种方法来打破IBGP的水平分割。这就需要将不同的IBGP 对等体划分到不同成员AS当中,成员AS之间建立的EBGP对等体关系是一种特殊的EBGP对等体关系,他们之间仅遵循EBGP对等体的传递性,而从传递的内容角度看,依然需要遵循AS-BY-AS规则,因为从宏观上看,他们依然处于同一个AS当中。
(二)、问题:
联邦的做法也相当于打破了IBGP的水平分割,则也将可能出现环路问题,则需要考虑防环。防环方法可以直接借鉴EBGP水平分割,在AS_PATH属性当中添加成员AS号来防止回传。注意,为了区分成员AS和正常的AS,成员AS号将使用小括号括起来。
(三)、联邦的配置:
[r2]bgp 64512 --- 联邦成员设备启动BGP进程时需要使用小号来启动
[r2-bgp]confederation id 2 --- 声明联邦成员的大号
[r2-bgp]peer 3.3.3.3 as-number 64512 --- 联邦成员之间建立IBGP对等体关系需要使用小号来建立
[r3-bgp]confederation peer-as 64513 --- 在需要建立联邦的EBGP对等体关系的设备上需要声明建邻的成员AS号
[r3-bgp]peer 4.4.4.4 as-number 64513 --- 联邦的EBGP对等体关系使用小号建邻
[r3-bgp]peer 4.4.4.4 ebgp-max-hop --- 因为联邦的EBGP对等体关系之间需要遵循EBGP对等体的传递性,所以,其TTL值默认为1,在非直连建邻时需要将TTL值修改才能正常建邻
十 一、BGP的选路原则
(一)、BGP选路的前提条件 --- 丢弃所有不可用的路由信息
属性名称 | 传播范围 | 默认值 | 评判标准 |
PV | 不传播 | 0(0 - 65535) | 越大越优 |
LP | IBGP对等体之间 | 100 | 越大越优 |
AS_PATH | bgp对等体之间 | 记录数量越少越优 | |
OGN | bgp对等体之间 | 根据起源类型决定 | I > e > ? |
MED | bgp对等体之 | 默认继承全局路由表中的开 | 越小越优 |
- 选PV值最大的路由
(1)、定义:PV值是华为的私有属性,可以理解为是权重,数值越大,其优先级越高,又因为他是所有选路原则中的第一条原则,所以,该属性是本设备上选路最方便的一个属性。 --- 这个属性只能在本设备上生效,他无法传递给任何BGP对等体。
(2)、修改PV影响选路的配置:
方法一:全局修改
[r4-bgp]peer 3.3.3.3 preferred-value ? INTEGER<0-65535> Preference value [r4-bgp]peer 3.3.3.3 preferred-value 100
AS-path 1, origin igp, MED 0, localpref 100, pref-val 0, valid, internal,pre 255, IGP cost 1, not preferred for PreVal
负载分担 --- 即让不同的流量走不同的线路,分担单一线路的压力。
方法二:精细化控制
①抓取流量
[r4]ip ip-prefix PV permit 10.0.0.0 24
②做路由策略
[r4]route-policy PV permit node 10 [r4-route-policy]if-match ip-prefix pv
[r4-route-policy]apply preferred-value 100 [r4-route-policy]q
[r4]route-policy PV permit node 20 --- 注意,必须要配置空表放通剩余所有流量
Info: New Sequence of this List. [r4-route-policy]q
③在BGP中调用路由策略
[r4-bgp]peer 3.3.3.3 route-policy PV import
- 优选LP属性值最大的路由
(1)、定义:LP --- 本地优先级 --- 默认值为100,越大越优。
①:这个属性可以在IBGP 对等体之间进行传递,所以,他是AS内部选路最常用的属性。
②:路由信息在传递给EBGP对等体时将不携带这个属性。
(2)、通过修改LP值来影响选路
方法一:全局修改
[r3-bgp]default local-preference 200 --- R3之后发给IBGP对等体的路由的LP属性都将被改为200
方法二:
精细化控制在R3的出方向做
①:抓取流量
[r3]ip ip-prefix lp permit 10.0.0.0 24
②:做路由策略
[r3]route-policy lp permit node 10 Info: New Sequence of this List.
[r3-route-policy]if-match ip-prefix lp
[r3-route-policy]apply local-preference 300 [r3-route-policy]q
[r3]route-policy lp permit node 20 Info: New Sequence of this List. [r3-route-policy]q
③:在BGP进程中调用
[r3-bgp]peer 4.4.4.4 route-policy lp export
- 优先级:
自己始发的路由优先级高于从对等体处学来的,自己始发的方法也存在多种,他们的优先级关系为手工聚合 > 自动聚合 > network > import
- 优选AS_PATH属性最短的路由
(1)、AS_PATH属性进行选路时,需要注意一下两点:
①:我们在进行路由聚合时,如果激活AS_SET关键字之后,将不同AS 的明细路由进行聚合,则我们将在AS_PATH属性中携带所有明细AS的AS号,并用大括号括起来。在进行选路比较时,大括号的内容当作一个AS号来看待。
②:在联邦时,我们联邦内部也需要使用AS_path来进行防环,我们将使用小括号将AS号括起来,在进行选路比较时,将不计算小阔号里的内容。
配置:方法一、在R1的出方向修改AS_PATH属性。
1,抓取流量
[r1]ip ip-prefix as permit 10.0.0.0 24
2,配置路由策略
[r1]route-policy as permit node 10 Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix as
[r1-route-policy]apply as-path 11 22 33 ?
INTEGER<1-4294967295> AS number in asplain format (number<1-4294967295>)
STRING<3-11> AS number in asdot format (number<1-65535>.number<0-65535>)
additive Append to original As Number 在原有AS_PATH属性的基础上添加配置
的AS号
overwrite Overwrite original As Number 直接覆盖原有的AS_PATH属性值
[r1-route-policy]apply as-path 11 22 33 additive 建议使用添加,因为AS_path属性主要任务用来防止环路,将原有属性覆盖可能导致路由回传,造成环路产生。
[r1-route-policy]q
[r1]route-policy as permit node 20 Info: New Sequence of this List.
3,在BGP中调用策略
[r1-bgp]peer 12.0.0.2 route-policy as export
*>i 10.0.0.0/243.3.3.3 | 0 | 100 | 01i |
* i2.2.2.20 | 100 | 0 | 1 11 22 33 |
*> 10.0.0.0/24 12.0.0.1 0 0 11 22 33 1
i
[r2-route-policy]apply as-path 1 1 1 additive 建议在AS_PATH属性中添加真实离开的AS的AS号,因为AS_PATH属性本身具有防环作用,添加AS号后可能导致路由无法发送到对应的AS当中,影响路由的传递。AS_PATH属性在进行选路时,仅关注AS 号的长短,不关注内容。
5,优选起源码属性最优的路由。起源码的优先级 I > E > ?
OGN --- 起源码 --- I,e,? 用来标识路由条目的起源
(1)、I 代表该路由信息起源于IGP协议(不局限于IGP协议,包括静
态,直连),代表该路由条目起源于AS内部 通过network发
布出来的路由信息其起源码为I
(2)、E --- 代表该路由信息起源于EGP协议 EGP指的是BGP之前
使用的外部网关协议
(3)、? --- 通过除了以上两种方式学习到的路由 重发布导入的路
由起源码都是?
(5)、控制选路的方法:
①:抓流量
[r2]ip ip-prefix ogn permit 10.0.0.0 24
②:配置路由策略
[r2]route-policy ogn permit node 10 Info: New Sequence of this List.
[r2-route-policy]if-match ip-prefix ogn
[r2-route-policy]apply origin ? egp Remote EGP
igp Local IGP
incomplete Unknown heritage
[r2-route-policy]apply origin incomplete [r2-route-policy]q
[r2]route-policy ogn permit node 20 Info: New Sequence of this List.
[r2-route-policy]q
③、在BGP中进行调用
[r2-bgp]peer 12.0.0.1 route-policy ogn import
6,优选MED属性值较小的路由
(1)、定义:
MED --- 多出口鉴别属性 --- MED值默认初始值并不是0,而是继承了路由表中该
路由条目的开销值,所以,它可以反应到达目标网段在本AS内部的开销大小,通过这个参数,别的AS的流量在进入本AS时将可以选择开销较小的入口进入。
通过修改这个属性值,我们也可以影响其他AS的流量流入本AS的路径。若本地通
过IBGP对等体学习到一条BGP路由,其中存在MED值,之后需要将这条路由再传递给本地的EBGP对等体,则他将不再携带这个MED值。这种设置将有可能造成选路不佳的情况。所以,建议,如果存在多组边界设备需要将路由发送给EBGP对等体关系时,需要将所有的路由信息都发布。(每台设备都需要发布)
(2)、干涉选路的方法:
在R2上配置,影响R1的选路
①:抓取流量
[r2]ip ip-prefix med permit 4.4.4.0 24
②:配置路由策略
[r2]route-policy med permit node 10 Info: New Sequence of this List.
[r2-route-policy]if-match ip-prefix med [r2-route-policy]apply cost 10
[r2-route-policy]q
[r2]route-policy med permit node 20 Info: New Sequence of this List.
[r2-route-policy]q
③:在BGP进程中调用
[r2-bgp]peer 12.0.0.1 route-policy med export
注意:MED值影响的是别的AS的流量通过多个出口进入到本AS内部,如果流入的不是同一个AS,即收到的路由条目中AS_PATH属性最左边的AS号不同,则将不比较第六条,直接比较第7条。
[r4]ping -r -a 4.4.4.4 1.1.1.1 --- 可以记录流量流过的全过程