边界网关协议
AS与AS之间使用的路由协议
自治系统范围:0-65535,
公有 AS(1-64511),
私有 AS(64512-65535)
路径矢量型,没有算法
传递网络掩码,支持VLSM CIDR
基于TCP封装; 端口号:179
距离矢量的升级版—AS–BY–AS
仅触发无周期
多个参数控制协议
可以在进项和出项对流量实施强大的策略可控性
通过各种选路规则仅仅产生一条最佳路径
仅负责邻居关系的建立,正常进收发一次即可
携带route-id
hold time 默认为 3min
BGP邻居关系建立条件:
a. router-id 必须不同
b. BGP 认证一致
c. 指定正确的AS号
d. 建立TCP三次握手的两段路由可达
保活,维持BGP邻居关系
周期1min查询邻居关系是否存在
实际保活TCP会话
keepalive时间默认为60s
Hold时间,保持默认为180s
携带路由条目
目标网络号+各种属性
协议邻居被称为对等体
内部BGP邻居关系,在同一个AS内部建立的BGP邻居
外部BGP邻居关系,在不同AS种的BGP设备建立的邻居关系
故若接收到的路由条目中,若存在本地的AS编号,将拒绝接收该条目
将导致AS内部的IBGP邻居关系数量,成指数上升—后期使用路由反射器、联邦来打破该规则
BGP建立邻居时的源、目标ip地址必须可达
[r1]bgp 1 启动时需要定义本地的AS号,BGP不存在多进程概念
[r1-bgp]router-id 1.1.1.1 建议配置RID,若不配置;自动生成,规则同OSPF一致;
[r1-bgp]peer 12.1.1.2 as-number 2 对端ip地址,以及对端所在AS
由于AS内部环境一般较为复杂,两台BGP设备间存在大量的备份路径;
故若使用物理接口地址来作为TCP会话的源ip、目标ip,将失去备份和负载均衡链路;
因此建议IBGP邻居使用环回接口作为源、目标ip地址;
前提是环回接口地址需要ip可达
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 as-number 2
此时,源ip地址设备依然会使用物理接口,故两端源、目ip无法固定,必须同时修改源ip地址为环回
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 修改源地址为本地的环回接口
1、IP必须可达 — 一般使用静态路由
2、邻居建立配置
[r5]bgp 3
[r5-bgp]peer 4.4.4.4 as-number 2
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
3、BGP协议的数据包在IBGP邻居间TTL=255,在EBGP邻居TTL=1
故使用环回作为EBGP邻居建立地址,将无法到达,必须修改TTL值
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2
两端配置完成后,将进行TCP的三次握手来建立端到端的会话
[r1]display tcp status 查看设备上的TCP会话状态
TCPCB Tid/Soid Local Add:port Foreign Add:port VPNID
State
b4d13778 164/5 12.1.1.1:179 12.1.1.2:49646 0
Established
正常两端均会进行会话请求,故建立两条会话,之后断开其中一条
TCP 会话建立后,BGP协议基于会话正常收发一次open报文,建立BGP的邻居关系;生成邻居表
[r1]display bgp peer
BGP local router ID : 1.1.1.1
Local AS number : 1
Total number of peers : 1 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
12.1.1.2 4 2 7 8 0 00:05:14 Established 0
一台运行了BGP协议的路由器,可以将本地路由表中无论何种方法获取到的路由条目,任意宣告到BGP协议中;
逐条宣告:宣告本地路由表中的任意路由条目;宣告时网络号必须和路由表中的记录完全一致;
[r1] bgp 1
[r1-bgp]network 1.1.1.0 24
宣告配置完成后,本地生成BGP表,表中记录本地发出以及接收到的所有BGP路由信息;
同时该路由被BGP使用更新包共享给本地的邻居,邻居也将其加载到它的BGP表中;
条目优秀的条件:
1、同步问题 --早期BGP协议为解决路由黑洞问题,要求一台BGP通过BGP协议学习到一条路由时,本地的IGP协议也要同时需要到该条目,才能满足同步需求;但将导致IGP协议负载过大;因此当前各厂家设备中均默认关闭同步规则;
2、下一跳可达问题
基于 AS-BY-AS规则,路由条目在一个AS内部传递时,其属性默认不变化;
可能导致内部BGP设备学习到的路由信息中,下一跳地址不可达
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 next-hop-local 将路由通过BGP协议传递给邻居3.3.3.3时,修改下一跳地址为本地
注IBGP水平分割规则,AS-BY-AS规则均在一个AS内部存在;EBGP邻居间传递路由将没有IBGP水平分割限制,EBGP邻居间传递路由时将自动修改下一跳为本地;
切记:在BGP协议中,BGP邻居传递过来的BGP路由,在本地路由表中已经通过其他协议存在,那么将不在本地加表而是继续传递给本地的其他邻居;
在BGP协议中,BGP邻居传递过来的BGP路由,在本地路由表中已经通过其他协议存在,同时该路由还被用于本地该传递路由的设备,建立邻居时作为底层路由;那么该条目在本地不优,将无法继续传递;
a. 因为BGP协议可以非直连建邻,同时一个AS内部正常应该存在复杂的网络环境;完全可以实现BGP邻居关系的大量备份,理论上不需要一台不链接其他AS的BGP设备来备份内部邻居关系;
b. 故正常在一个AS中运行BGP协议的设备一定连接其他AS;由于IBGP水平分割的限制;导致一个AS内所有BGP协议设备间均建立IBGP邻居关系;IBGP邻居关系的数量成指数上升,配置量和管理量异常巨大;
c. 所以需要打破IBGP水平分割规则;
d. 因为IBGP水平分割用于防止IBGP环路,故打破将可能导致环路出现;因此成为有条件的打破IBGP水平分割;所谓有条件是指在确定打破无环的前提下来进行设计;
e.路由反射器
转发规则:
1、RR从一台EBGP邻居学习到的路由,可以传递给本地客户端、非客户端,其他EBGP邻居;
2、RR从一台客户端学习到的路由,可以传递给本地其他的客户端、非客户端,其他EBGP邻居;
3、RR从一台非客户端学习到路由,可以传递给本地其他的客户端,EBGP邻居;不能传递给本地的其他非客户端;
[r3]bgp 2
[r3-bgp]peer 2.2.2.2 reflect-client 2.2.2.2成为本地的客户端,同时本地成为RR
f. 联邦
将一个AS,逻辑的划分为多个小AS;小AS使用私有的AS号,小AS间为联邦内的EBGP邻居关系;可以向真实EBGP关系一样传递路由,但默认不修改属性;
1、联邦内的BGP设备,无论启动或者配置或者建立BGP邻居关系,均使用小AS号进行
2、工作小AS中的BGP设备,需要声明自己所在的大AS号
3、小AS需要互相指出对端的小AS号
[r2]bgp 64512
[r2-bgp]confederation id 2 声明本地的大AS号
[r3-bgp]confederation peer-as 64513 指定对端小AS号 仅需要在小AS间的两台设备互指
切记 华为设备中,小AS间设备,必须先配置声明,再互相小AS,最后进行邻居关系建立配置;否则无法建立邻居关系;
注 实际工程中,反射器和联邦同时使用,协同工作;
BGP协议可以宣告本地路由表中的任意路由,不关注产生方式
a. 本地直连路由的度量值为0,通过其他协议学习的路由大于0;
b. BGP宣告路由时,将携带本地路由表中的度量值到BGP协议中来;
c. 一台运行BGP协议的设备,在宣告了本地路由表中路由后,将本地到达目标的度量值携带于BGP路由表中,传递给本地的EBGP/IBGP邻居;意义在于让本地的EBGP邻居可以选择离目标最近的EBGP设备来路由;
d. 但是,若本地通过IBGP邻居关系学习到的路由中存在度量值,之后本地再将这些路由传递给本地的其他EBGP邻居时将删除该值,度量为0;
建议只要BGP设备存在EBGP邻居,均需要自己宣告一次AS内部的路由,使得其他AS可以对本AS进行路径优选;
当下各厂商的BGP协议中,自动自动汇总均被默认关闭
[r2]bgp 64512
[r2-bgp]summary automatic 开启自动汇总,不建议手工开启,保持默认关闭即可
理解:BGP协议中的宣告就是逐条的重发布;将IGP重发布到BGP,就是批量的宣告;
两种操作产生的路由,仅起源属性不同,逐条宣告的起源码优于批量行为;
注:因此若使用IGP重发布到BGP行为,关闭自动汇总;每台存在EBGP邻居的BGP均需重发布,来正常携带度量;
即使该条目为手写的空接口路由,依然可以宣告,将网络号传递给邻居;
不宣告明细路由,而是直接在准备进行汇总配置的设备上,手写一条到达汇总网段的空接口路由;
然后将该空接口路由宣告到BGP协议中即可; 该操作的优势在于不用逐条宣告明细了;
注:因为BGP协议工作于AS之间,而AS间正常存在多条互联路径,故为了选路较佳,还需要管理员在传递聚合路由条目的同时,传递部分的明细路由;起到干涉选路的效果;
使用该种汇总配置方式,仅需要宣告汇总路由的同时,该设备再宣告部分明细路由即可实现;
BGP的聚合配置完成后,进行配置的设备将自动生成到达空接口的防环路由;
[r2] bgp 64512
[r2-bgp]aggregate 3.3.0.0 21 此时,明细和聚合条目同时传输
[r2-bgp]aggregate 3.3.0.0 21 detail-suppressed 所有的明细路由被抑制,将无法传递给邻居,仅传递一条聚合条目
在
第二种汇总配置的前提下,若需要在传递聚合条目的同时,再传递部分的明细路由的方法:
[r2]ip ip-prefix s permit 3.3.3.3 32
[r2]route-policy s permit node 10
[r2-route-policy]if-match ip-prefix s
[r2-route-policy]q
[r2]bgp 64512
[r2-bgp]aggregate 3.3.0.0 21 suppress-policy s 注意调用时,为抑制列表;
因为调用时使用的是抑制行为,因此策略表被允许的路由条目,最终反而被抑制传输;
先让BGP将所有的明细和聚合同时传输出去,之后使用策略逐条管理
先让BGP将所有的明细和聚合同时传输出去,之后使用分发策略逐条管理
[r2]acl 2000
[r2-acl-basic-2000]rule deny sou 3.3.3.3 0.0.0.0
[r2-acl-basic-2000]rule permit source any
[r2-bgp]peer 12.1.1.1 filter-policy 2000 export
控制层面方向,只能使用acl
在BGP中可以直接将前缀列表作为分发列表使用
[r2]ip ip-prefix ee deny 3.3.3.3 32
[r2]ip ip-prefix ee permit 0.0.0.0 0 le 32
[r2]bgp 64512
[r2-bgp]peer 12.1.1.1 ip-prefix ee export
BGP使用密文传输认证秘钥
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 password cipher cisco123
BGP协议存在多种属性,用于选路的比较参数;
人为修改任何一个参数都可能影响到选路;
存在6种基本属性,和多种社团属性;
属性:华为和cisco均存在6种基本属性
第一种均为私有属性
传播范围 默认值 大优或小优
Preference_Value 不传播 0 大
全局操作:
[r3-bgp]pe 2.2.2.2 preferred-value 1
本地从邻居2.2.2.2处学习到的所有路由优先值修改为1;
负载分担:
访问不同的目标网段时,让流量进入不同链路来进行通讯;将所有链路利用起来,而不是仅只用唯一链路通讯;
使用前缀抓取需要修改属性的网段
[r3]ip ip-prefix w permit 1.1.1.0 24
定制策略来进行修改,一定关注是否需要空表来允许其他路由通过
[r3]route-policy w permit node 10
[r3-route-policy]if-match ip-prefix w
[r3-route-policy]apply preferred-value 1
[r3-route-policy]q
[r3]route-policy w permit node 20
[r3-route-policy]q
再在协议中针对某个邻居调用
[r3]bgp 2
[r3-bgp]peer 2.2.2.2 route-policy w import
因为该属性为私有不传递属性,故调用时,只能在控制层面的入向调用,来影响本地的BGP生成;
传播范围 默认值 大或小优
本地优先级 IBGP邻居关系间 100 大
第一个公有属性,也是最常用于干涉IBGP选路,最常使用的属性
全局修改:
[r4-bgp]default local-preference 101
本地所有传输到IBGP的路由条目,其中本地优先级修改为101;
使用本地优先级实现负载分担
[r2]ip ip-prefix p permit 1.1.1.0 24
[r2]route-policy p permit node 10
[r2-route-policy]if-match ip-prefix p
[r2-route-policy]apply local-preference 101
[r2-route-policy]q
[r2]route-policy p permit node 20
[r2-route-policy]q
[r2]bgp 2
[r2-bgp]pe 3.3.3.3 route-policy p export
调用时在控制层面的出或入向均可,但必须为IBGP邻居关系;
优选经过AS数量较少路径;
该属性的自动添加是在EBGP邻居关系间进行;
[r4]ip ip-prefix as permit 1.1.1.0 24
[r4]route-policy as permit node 10
[r4-route-policy]if-match ip-prefix as
[r4-route-policy]apply as-path 3 4 5 additive
[r4-route-policy]q
[r4]route-policy as permit node 20
[r4-route-policy]q
[r4]bgp 2
[r4-bgp]pe 14.1.1.1 route-policy as import
注:可以在控制层面的入或出方向调用,但只能在ebgp邻居间操作;可干涉ebgp、ibgp关系选路;
出向调用 x 3 4 5
入向调用 3 4 5 x
x为实际经过的AS号;最前端号码为最新经过的AS号;
切记:as-path 属性又用于EBGP的水平分割,若人为添加的as号,在网络后端实际存在,将导致这些路由无法进入这些AS;解决方案:反复添加已经经过的AS编号;- 选路看数量,防环看数字;
network 宣告本地路由表中的任意路由 i
import 将本地通过其他协议学习的路由重发布到BGP协议中 ?
egp 早期的ebg协议学习的路由重发布到BGP协议中 e
该属性的修改可以在整个控制层面流量经过的任意接口修改;
[r4]ip ip-prefix o permit 1.1.1.0 24
[r4]route-policy o permit node 10
[r4-route-policy]if-match ip-prefix o
[r4-route-policy]apply origin egp 2
此处配置的AS为对端邻居的AS号
[r4]route-policy o permit node 20
[r4-route-policy]q
[r4]bgp 2
[r4-bgp]pe 3.3.3.3 route-policy o export
BGP协议默认不存在cost;
MED就是人为的利用路由器优选路径的规则—先比较管理距离(华为为优先级),若一直再比较度量值(华为为cost)
BGP协议在特定条件下携带本地到达目标的cost值;
本地宣告(重发布)自己路由表中的路由后,将其传递给本地的ebgp邻居,将携带cost值;
对于其他AS的设备学习到从同一个as传递过来的路由,优选MED最小的路径;
管理员可以在控制层面传递路由的过程中,手工修改MDE;最常用于干涉ebgp选路;
常常用于AS1干涉AS2对AS1的选路;
[r1]ip ip-prefix med permit 1.1.1.0 24
[r1]route-policy med permit node 10
[r1-route-policy]if-match ip-prefix med
[r1-route-policy]apply cost 10
[r1-route-policy]q
[r1]route-policy med permit node 20
[r1-route-policy]q
[r1]bgp 1
[r1-bgp]pe 14.1.1.2 route-policy med export
由于实际工程中,管理员只能在一个AS中配置,故无法通过查看BGP表来判断选路结果,可以通过扩展ping来解决
[r1]ping -r -a 1.1.1.1 3.3.3.3
BGP的扩展属性 默认大多数厂商的产品在BGP协议中不携带社团属性
例:控制传播范围的社团属性
[r1]route-policy com permit node 10
[r1-route-policy]apply community no-advertise
针对所有的流量修改属性
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 route-policy com export
默认华为设备也不传递社团属性,故使用社团属性时,必须定义传递性
[r1-bgp]peer 12.1.1.2 advertise-community
逐跳行为,每台设备均需开启传递性
no-advertise 接收到的条目中若存在该社团属性,将不再传递该路由
no-export 接收到的条目若存在该社团属性,将不传递给下一个AS
no-export-subconfed 接收到的条目若存在该社团属性,将不传递给下一个小AS
若网络没有小AS,仅存在大AS时no-export和no-export-subconfed作用一致