二、适合使用BGP的网络环境
1.传输AS
2.多宿主
3.需要对进入和离开的流量进行强大的策略控制时
三、BGP邻居关系及防环机制
1.邻居关系
IBGP :内部BGP邻居
EBGP:外部BGP邻居
EBGP对等体 --- 不同AS之间的BGP对等体关系
IBGP对等体 --- 相同AS之间的BGP对等体关系
2.防环机制
IBGP邻居的防环机制
:IBGP 水平分割机制(IBGP只传一跳规则,通过一个IBGP邻居学习的
路由不能传递给其他的IBGP邻居);next-hop、起源者属性、簇ID列表。
因为IBGP水平分割在防止环路出现的同时,也会造成路由的传递障碍,则我们需要解决
该问题:
1,建立全联的IBGP对等体关系 --- 1,资源占用大;2,会导致网络的可拓展性降低
2,路由反射器
3,联邦
EBGP邻居的防环机制
:AS-Path AS路径防环。------BGP协议将路由条目所经过的AS编号记录在一个AS_PATH的属性中,如果,接收到的BGP路由条目中,若AS_PATH属性存在本地的AS号,则将不去学习,防止路由回传,形成环路。
这个AS_PATH属性,除了可以防止EBGP对等体之间环路的产生,还可以用于选路,我们可以优选AS_PATH属性最短的路由信息。
1.数据层面的路由黑洞:
BGP的路由黑洞 --- 因为BGP协议支持非直连建邻,所以,可能造成控制层流量可达,但是数据层流量在经过那些没有运行BGP协议的设备时,无法通过,形成黑洞。
1,直接让所有设备运行BGP协议。
2,将BGP的路由信息重发布到IGP中。
3,MPLS
BGP的同步原则 --- BGP要求,当一台设备收到一条路由信息时,将不能通告给自己的EBGP对等体,除非自己还通过IGP协议学习到同一条路由信息。 --- 华为设备默认关闭
2.路由反射器---Router Reflector RR
我们在指定一台设备成为路由反射器的同时,我们需要指定他的一个或者多个IBGP对等体成为他的客户(Client)。客户和RR之间会形成一个团体,我们称为 -- 反射簇。每一个反射簇会使用自己RR的RID作为簇ID。那些不是客户的对等体我们称为非客户。
路由反射器的反射规则:
1,客户发送的信息,将反射给所有的客户以及非客户。
2,非客户发送的信息,将反射给所有的客户。 “非非不传”
3,反射器只会反射可用且优的路由信息。
Originator_ID --- 起源者ID
--- 当一台RR收到一条路由信息需要反射时,会给其中添加起源者ID,为发送者的RID。如果收到的路由信息中,已经存在起源者ID了,则将不做更改。当一台设备发现路由中起源者属性是自生的RID,则将不学习,防止路由的回传。
Cluster_list --- 簇列表
--- 如果存在多组反射簇时,仅依靠起源者ID不能完全避免环路的产生,所以,我们引入簇列表属性,在反射的路由中,持续累加放射簇的簇ID,当一台设备接收到一条路由信息时,如果簇列表中有自己所在的簇ID,则将不学习该路由,避免环路的产生。
注意:因为这两个属性是IBGP对等体内部用来防环使用的,所以,在传递给EBGP对等体时,将不会携带。
[r3-bgp]peer 2.2.2.2 reflect-client
3.联邦
[r2]bgp 64512 --- 注意:联邦中的设备启动BGP进程需要使用小号启动。
[r2-bgp]router-id 2.2.2.2
[r2-bgp]confederation id 2 --- 在进程中声明自己的大号。
[r2-bgp]peer 3.3.3.3 as 64512 --- 联邦之间建邻使用小号建邻。
[r3-bgp]confederation peer-as 64513 --- 在需要创建联邦的EBGP对等体的设备上配置。
[r3-bgp]peer 4.4.4.4 ebgp-max-hop --- 联邦的EBGP对等体之间遵循EBGP对等体的传递特性,所以,需要修改TTL值才能实现非直连建邻。
联邦的EBGP对等体,因为也处在同一个大AS中,所以,也需要遵循AS_BY_AS规则。
在联邦的EBGP对等体之间,因为也相当于打破了IBGP的水平分割,所以,也存在出现环路的风险,则需要使用AS_PATH来进行防环。但是,需要使用小括号将该属性括起来,仅供AS内部防环使用,当发送给EBGP对等体时,将不会携带该属性。
四、BGP 邻居状态机制
BGP的状态机仅展示的是邻居关系建立过程中的状态变化。BGP可以将邻居关系建立和路由发布分开完成。
Idle : 初始化
Connect :连接 Active : 活动
Opensent:发送open报文 Openconfirm :open报文确认
Established :邻居状态
Idle --- 空闲状态 --- 一开始,路由器启动BGP之后,将处于IDLE状态。当您手工指定邻居关系后,BGP将进入到
检查环节
,BGP将会基于路由表检查指定的IP地址的可达性。
如果不可达,则将停留在idle状态。
如果可达,则将开始尝试建立TCP的会话,进入Connect状态。
(注意:因为双方均会指定邻居关系,所以,都会主动发起TCP会话的连接,将导致会话通道冗余,所以,BGP将会保留后建立的通道,而主动关闭先建立的通道。)
如果TCP会话建立失败,则将进入到ACTIVE状态,反复尝试重连。
如果TCP会话建立成功,则将进入到opensent状态,发送open报文。同时也会收到对方发送的open报文,如果对方的参数都认可,则发送keeplive报文进行确认,之后,进入到opencomfirm状态。
opencomfirm(open报文确认状态) --- 如果收到对方发送的keeplive报文,则代表对方也认同自己的参数,将进入到最终状态 --- Established(建立完成)
五、BGP消息数据包
Open keepalive updata notification
1.open :建立BGP邻居关系,只发送一次。
BGP邻居关系建立条件:
1,AS号 --- open报文中会携带自己本地的AS号,发送之后,对端会将其中AS号
和自己配置的AS号进行比对,如果不一致,则将无法建立对等体关系。
2,RID --- 需要比对RID,如果双方的RID相同,则将无法建立邻居关系。
3,认证 --- BGP的认证在TCP数据包中的选项字段中携带,如果认证不通过,则
将无法建立邻居关系。
4,
注意
--- 如果在配置时指定的IP地址和收到数据包中的源IP地址不一致,则将
无法正常建立邻居关系。
2.keepalive :保活,维持BGP邻居关系。
Keeplive报文 --- 周期保活 --- 周期时间为1/3保活时间,默认60S。该报文还会临时充
当确认包来使用。
注意:这里的确认包确认的是open报文中的参数。
3.update :更新包
Update报文------真正携带路由信息的数据包 --- 里面主要携带的是路由目标网段信息以及掩码信息,以及各种路由属性。 --- 注意,在update报文中,存在撤销路由选项,可以将失效的路由信息存放在该字段下,对方将删除该字段下的路由。
通告路由:
撤销路由:
4.notification :报告(错误报告)
notification报文 --- 告警机制 --- 当BGP检测到一个错误时,将使用该数据包进行告
警,告知对等体故障出现的位置及错误点。
六、工作过程
1,基于IGP实现IP可达
2,启动BGP进程,手工指定邻居关系,通过三次握手,建立TCP会话通道。之后,BGP通讯全过程的可靠性均由TCP来保证。
3,使用open报文和keeplive报文进行邻居关系的建立。一般open报文只发送一次,之后使用keeplive报文对open报文中的参数进行确认。 --- 生成
邻居表
,记录所有的邻居关系。
4,使用update报文传递路由信息。其中将携带目标网络号,掩码以及属性信息。之后,将所有发送以及接收到的路由信息记录在一张表中 ---
BGP表
。
5,因为到达同一个目标网段,可能存在多条路径,则我们需要选择其中最优(通过属性比较)加载到
路由表
中。
6,收敛完成后,使用keeplive报文进行周期保活,默认保活时间180S,周期时间60S。
7,如果出现错误信息,则将使用notification报文进行告警
8,如果出现结构突变,则需要使用update报文进行触发更新。
七、BGP配置
IBGP:直连物理接口建立,非直连接口建立(环回接口)
EBGP:直连物理接口建立,非直连接口建立(环回接口)
1.
启用BGP协议:
2.手工指定router-id :
3.手工指定邻居:
修改更新源:默认更新源为到达peer的本地出接口地址 (IBGP用环回建立邻居关系时使用)
修改EBGP之间多跳(EBGP之间数据包TTL默认为1 )
(EBGP用环回建立邻居关系时使用)
作用:1.关闭EBGP之间直连检测 2.修改EBGP数据包的TTL值
发布路由:
1.通过network来发布路由
[r1-bgp]network 1.1.1.0 24
2,通过import来发布路由
[r2-bgp]import-route ospf 1
3,通过聚合进行发布
①自动聚合
1,自动聚合 --- 1,仅针对重发布的路由信息生效;2,自动聚合将直接按照主类进行聚合
1,抓流量
[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]qu
3,调用
[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.
S --- suppressed --- 抑制 --- 被抑制的路由将不具备传递特性
不管是手工聚合还是自动聚合,都会自动生成一条指向汇总的空接口。
②手工聚合
手工聚合:
[r1-bgp]aggregate 172.16.0.0 22
1,手工聚合不会自动抑制明细路由。
2,聚合路由缺失明细路由的部分属性,尤其是AS_PATH属性,则可能导致环路的产生。
1,不能抑制明细路由 --- [r4-bgp]aggregate 172.16.0.0 22 detail-suppressed
Suppress-policy --- 抑制策略
1,抓流量
[r4]ip ip-prefix aa permit 172.16.1.0 24
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]qu
3,调用
[r4-bgp]aggregate 172.16.0.0 22 suppress-policy aa
2,聚合路由缺失明细路由的部分属性,尤其是AS_PATH属性,则可能导致环路的产生。
---AS_AET --- 我们定义了AS_SET关键字,激活该关键字,则将让聚合路由携带明细路由的AS_PATH属性。
[r4-bgp]aggregate 172.16.0.0 22 detail-suppressed as-set
如果明细来源于不同的AS中,则在进行汇总时,我们需要同时继承多个明细的AS号,并且用大括号括起来,在进行防环时,我们将所有明细的AS都不能回传,但是,在进行选路时,我们需要将大括号看作是一个整体。
Aggregateor --- 聚合者属性 --- 展示聚合路由产生的设备所在的AS和RID
Atomic_Aggregate ---- 预警属性 --- 如果所有的明细都被抑制,则将出现该属性。
<r4>display bgp routing-table 172.16.0.0 22 --- 查看详细信息
八、BGP协议三张表
1.BGP邻居表 查看BGP邻居表的摘要信息:
2.BGP路由表
NextHop --- 下一跳 --- 谁发送的路由信息,则下一跳写谁。如果是自己始发的,则写 0.0.0.0
状态码
*--- 可用 --- 当BGP收到一跳路由信息后,会先根据其中的下一跳属性来判断其可达性,如果下一跳可达,则可用,不可达,则不可用。不可用将不参与BGP路由信息的选举。
>--- 优选 --- 当到达同一个目标网段存在多条路由信息时,我们将会基于属性进行选择,选择一条最优的路由,打上该状态码。
只有可用且优的路由信息,可以加载到路由表中,且可以传递
。
I --- 代表该路由信息来自自己的IBGP对等体。
OGN --- 起源码
I --- 通过IGP协议发布的路由 --- 通过network命令发布的路由信息
E --- 起源于EGP协议
? --- 除了以上两种来源,其余的都是?
3.IP路由表
注意: EBGP邻居之间传递路由最小间隙为30s ,IBGP邻居之间传递路由最小间隙为15s
九、下一跳属性
1.路由不优问题。
原因:1.下一跳不可达
2.IBGP同步
下一跳属性规则:
1.network 引入 默认next-hop 属性为0.0.0.0(下一跳为本地)。
2.network通告路由传递给IBGP邻居或EBGP邻居时,下一跳默认为更新源地址(即建立TCP三次插手的对方IP地址)。
3.IBGP学习路由传递给EBGP邻居时,下一跳为EBGP邻居建立的更新源地址(EBGP邻居路由传递给EBGP邻居时也一样)。
4.EBGP学习路由传递给IBGP邻居时,下一跳不发生改变(可能发生路由不优)。
解决方法:
备注:
在Cisco中
默认将
IGP
协议通告进入
BGP
时,将原
IGP
路由的下一跳地址作为
BGP
路由的下一跳属性,
传递给其他
IBGP
邻居时,
IBGP
邻居发现路由的下一跳属性为自己的接口地址,启用下一跳防环机制,阻止
路由加表,下一跳属性具有防环功能。
在华为中
,将所有的路由通告进入
BGP
时,下一跳属性为
0.0.0.0
, 并且传递给其他
IBGP
邻居时下一
跳属性直接变为更新源地址,下一跳属性不存在防环功能,所有的再修改优先级的时候可能导致路由环
路。
特别说明:在思科中, 若IBGP和EBGP邻居都使用MA网络迚行连接,同时EBGP邻居使用MA物理接口建立邻居,此时将IBGP邻居路由传递给EBGP邻居时,
下一跳属性为到达IBGP邻居的MA物理接口地址。
十、BGP的选路原则
1,Preference value : 优先级值 优选PV值最大的路由
Preference value : 优先级值 华为私有 (cisco 中使用weight 权重值)
数值范围: 0-65535 , 越大越优,默认值为0。仅仅在本设备上生效,不能传递。
方法一:针对某个邻居収送的所有路由修改优先级值 :
[r4-bgp]peer 3.3.3.3 preferred-value 100 --- 修改R3发送过来的路由的PV值
方法二:
1,抓流量
[r4]ip ip-prefix PV permit 10.0.0.0 24
2,做路由策略
[r4]route-policy PV permit node 10
Info: New Sequence of this List.
[r4-route-policy]if-match ip-prefix PV
[r4-route-policy]apply preferred-value 100
[r4-route-policy]qu
[r4]route-policy PV permit node 20
Info: New Sequence of this List.
[r4-route-policy]qu
3,调用
[r4-bgp]peer 3.3.3.3 route-policy PV import
2.Local preference : 本地优先级
作用: 用于控制离开本AS的流量时使用
范围:0-4294967295 , 默认值为100 , 数值越大越优;可以在整个AS之内传输部署位置: 一般建议在存在EBGP邻居的IBGP邻居之间。
方法一:[r3-bgp]default local-preference 200 --- 全局修改LP值
方法二:
1,抓流量
[r2]ip ip-prefix LP permit 10.0.0.0 24
2,做路由策略
[r2]route-policy LP permit node 10
Info: New Sequence of this List.
[r2-route-policy]if-match ip-prefix LP
[r2-route-policy]apply local-preference 50
[r2-route-policy]qu
[r2]route-policy LP permit node 20
Info: New Sequence of this List.
[r2-route-policy]qu
3,调用
[r2-bgp]peer 4.4.4.4 route-policy LP export
3,手工聚合 > 自动聚合 > network > import > 从对等体处学来的
4,优选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
号
[r1-route-policy]apply as-path 11 22 33 additive
[[r1]route-policy AS permit node 20
Info: New Sequence of this List.
[r1-route-policy]qu
[r1]
3,调用
[r1-bgp]peer 12.0.0.2 route-policy AS export(出方向)
入方向:
为了避免对AS_PATH属性防环特性的影响,我们可以添加AS_PATH属性中,已有的AS号,仅改变AS_PATH属性的长短。
5,比较OGN属性,I > e > ?
1,抓流量
[r1]ip ip-prefix OGN permit 10.0.0.0 24
2,做路由策略
[r1]route-policy OGN permit node 10
Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix OGN
[r1-route-policy]apply origin ?
egp Remote EGP
igp Local IGP
incomplete Unknown heritage
[r1-route-policy]apply origin incomplete
[r1-route-policy]qu
[r1]route-policy OGN permit node 20
Info: New Sequence of this List.
[r1-route-policy]
[r1-route-policy]qu
3,调用
[r1-bgp]peer 12.0.0.2 route-policy OGN export
6,优选MED值属性最小的路由
多出口鉴别属性 --- BGP协议在进行宣告时,MED属性将继承路由表中的开销值,便于本地的EBGP对等体所在的AS内部设备选路。若本地通过IBGP对等体学习到BGP路由,之后,再发送给EBGP对等体时,将不会携带MED属性,因为他不能反映自身真实的开销情况,但是,这样设计也会造成选路不佳,所以,建议所有边界设备发布路由都同时发布。
注意:多出口鉴别属性一定需要再多出口环境下使用,我们可以通过比较路由条目AS_PATH属性最左边的AS号来判断是否从同一个AS发出,如果从同一个AS发出,则判定为多出口环境,否则,将不比较第六条,直接 比较后面的规则。
1,抓流量
[r3]ip ip-prefix MED permit 4.4.4.0 24
2,路由策略
[r3]route-policy MED permit node 10
Info: New Sequence of this List.
[r3-route-policy]if-match ip-prefix MED
[r3-route-policy]apply cost 10
[r3-route-policy]qu
[r3]route-policy MED permit node 20
Info: New Sequence of this List.
[r3-route-policy]qu
3,调用
[r3-bgp]peer 13.0.0.1 route-policy MED export
7,EBGP路由优于IBGP路由
8,优选到NEXT_HOP的IGP度量值最小的路由
十一、BGP的路由过滤
1,使用前缀列表进行过滤
[r1]ip ip-prefix aa deny 192.168.1.0 24
[r1]ip ip-prefix aa permit 0.0.0.0 0 less-equal 32
[r1-bgp]peer 12.0.0.2 ip-prefix aa export
2,使用路由策略进行过滤
[r2]ip ip-prefix aa permit 192.168.2.0 24
[r2]route-policy aa deny node 10
Info: New Sequence of this List.
[r2-route-policy]if-match ip-prefix aa
[r2-route-policy]qu
[r2]route-policy aa permit node 20
Info: New Sequence of this List.
[r2-route-policy]qu
[r2-bgp]peer 12.0.0.1 route-policy aa import
3,使用过滤列表进行过滤
[r3-acl-basic-2000]rule deny source 192.168.3.0 0 ---- 注意:使用过滤列表时,抓取流量的列表必须使用拒绝动作
[r3-acl-basic-2000]rule permit source any --- 注意:对于不需要过滤的流量,一定要进行放通
[r3-bgp]peer 13.0.0.1 filter-policy 2000 import
十二、BGP的社团属性
社团属性 --- 32位二进制构成 ---- 1,使用十进制表示;2,AS:NN --- 一条路由条目可以同时打多个社团属性。
公有社团属性:
1,0X00000000 --- 0 --- “internet” ---- 所有的BGP路由默认都打上了名称位“internet”的社团属性。
2,0xFFFFFF02 --- “no - advertise” ---- 如果BGP路由打上该社团属性,则代表不允许通告给其他的BGP对等体。
3,0xFFFFFF01 --- "no - export" ---- 如果BGP路由打上该社团属性,则将不允许通告给自己的EBGP对等体(不包括联邦的EBGP对等体)。
4,0xFFFFFF03 --- "no - export - subconfed" --- 如果BGP路由打上该社团属性,则将不允许通告给自己的EBGP对等体(包括联邦的EBGP对等体)。
[r1]route-policy com permit node 10
Info: New Sequence of this List.
[r1-route-policy]apply community ?
INTEGER<0-4294967295> Specify community number
STRING<3-11> Specify aa<0-65535>:nn<0-65535>
internet Internet(well-known community attributes)
no-advertise Do not advertise to any peer (well-known community attributes)
no-export Do not export to external peers(well-known community attributes)
no-export-subconfed Do not send outside a sub-confederation(well-known community attributes)
none No community attribute
[r1-route-policy]apply community no-advertise
[r1-route-policy]qu
[r1-bgp]peer 12.0.0.2 route-policy com export
[r1-bgp]peer 12.0.0.2 advertise-community --- 开启社团属性的传递功能
练习:
需求:AS1中分别创建172.16.0.0/24,172.16.1.0/24,172.16.2.0/24,172.16.3.0/24。之后,0.0和1.0带上1:11的社团属性,2.0和3.0带上1:22的社团属性。要求,1:11社团的路由不传递,1:22的路由no_export。
1,做社团属性的策略
[r1]route-policy com1 permit node 10
Info: New Sequence of this List.
[r1-route-policy]apply community 1:11
[r1-route-policy]qu
[r1]route-policy com2 permit node 10
Info: New Sequence of this List.
[r1-route-policy]apply community 1:22
2,发布路由
network 172.16.0.0 255.255.255.0 route-policy com1
network 172.16.1.0 255.255.255.0 route-policy com1
network 172.16.2.0 255.255.255.0 route-policy com2
network 172.16.3.0 255.255.255.0 route-policy com2
3,依靠社团属性抓取流量 --- community-filter
[r1]ip community-filter 1 permit 1:11
[r1]ip community-filter 2 permit 1:22
4,做路由策略
[r1]route-policy aaa deny node 10
Info: New Sequence of this List.
[r1-route-policy]if-match community-filter 1
[r1-route-policy]qu
[r1]route-policy aaa permit node 20
Info: New Sequence of this List.
[r1-route-policy]if-match community-filter 2
[r1-route-policy]apply community no-export ?
INTEGER<0-4294967295> Specify community number
STRING<3-11> Specify aa<0-65535>:nn<0-65535>
additive Add to the existing community
internet Internet(well-known community attributes)
no-advertise Do not advertise to any peer (well-known community
attributes)
no-export Do not export to external peers(well-known community
attributes)
no-export-subconfed Do not send outside a sub-confederation(well-known
community attributes)
<cr> Please press ENTER to execute command
[r1-route-policy]apply community no-export
additive
[r1-route-policy]qu
[r1]route-policy aaa permit node 30
[r1-route-policy]qu
5,调用
[r1-bgp]peer 12.0.0.2 route-policy aaa export