BGP所有的数据均基于TCP会话传递,由TCP来进行邻居的发现及所有数据包的ACK;
注:所有的BGP信息均基于TCP会话传输,可靠保障;
当BGP协议单播传递路由时,穿越了中未运行BGP的设备时,出现控制层面可达,但数据层面在未运行BGP的设备上不可达,最终导致路由黑洞;
EBGP水平分割:针对EBGP环路
AS-PASH:BGP的一种属性,BGP的路由条目在传递过程中将记录所有经过的AS号,若接收到的路由条目中存在本地的AS号,将拒绝接收该条目;
IBGP水平分割:针对IBGP环路
一台设备若从一个IBGP邻居处学习到了路由条目,不得传递给下一个IBGP邻居;
该机制可以限制IBGP环路的出现,但同时也导致全网所有BGP设备间均需要建立邻居关系,配置量极大
路由反射器、联邦可以有条件打破IBGP水平分割
r1(config)#router bgp 1 启动时需要定义真实的AS号;无多进程概念;
r1(config-router)#bgp router-id 1.1.1.1 配置RID;
在BGP协议中,邻居关系的建立和路由条目的宣告是分开配置的;
建立邻居关系
r1(config-router)#neighbor 12.1.1.2 remote-as 2
对端的IP地址及所在AS号
r2(config)#router bgp 2
r2(config-router)#neighbor 3.3.3.3 remote-as 2
r2(config-router)#neighbor 3.3.3.3 update-source loopback 0
切记:使用环回建立邻居关系时,必须同时更新源地址;
r4(config)#ip route 5.5.5.0 255.255.255.0 45.1.1.2
r4(config)#ip route 5.5.5.0 255.255.255.0 54.1.1.2
r4(config)#router bgp 2
r4(config-router)#neighbor 5.5.5.5 remote-as 3
r4(config-router)#neighbor 5.5.5.5 update-source loopback 0
r4(config-router)#neighbor 5.5.5.5 ebgp-multihop ?
<1-255> maximum hop count
255
建邻配置完成后,邻居间开始建立TCP的会话r1#show tcp brief
TCB Local Address Foreign Address (state)
64280044 12.1.1.1.179 12.1.1.2.13413 ESTAB
当TCP会话建立,BGP协议使用open包和对端建立BGP的邻居关系,生成邻居表:r1#show ip bgp neighbors 查看邻居表---该表过大不易查看
r1#show ip bgp summary 查看简表
BGP router identifier 1.1.1.1, local AS number 1
BGP table version is 1, main routing table version 1
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
12.1.1.2 4 2 7 7 1 0 0 00:03:13 0
状态处的数字标示该邻居处学习到的路由条目数量;该处为数字也标示了已经和该设备建立邻居关系;
r1(config)#router bgp 1
r1(config-router)#network 1.1.1.0 mask 255.255.255.0
宣告时,条目的内容必须和路由表的记录完全一致 ;
切记:BGP协议只能逐条宣告本地路由表中的内容(不关注条目的产生方式);
宣告时必须和表中的记录完全一致;
当宣告配置完成后,路由器将发出和接收到update,学习路由条目,加载本地BGP表中;
该表用于记录所有本地发出及接收的条目;
r1#show ip bgp 查看BGP表;
BGP table version is 2, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.0/24 0.0.0.0 0 32768 i
状态 目标 属性
优的条件:
r3(config)#router bgp 2
r3(config-router)#no synchronization
IOS 版本12.2(8)T以上默认关闭
r2(config)#router bgp 2
r2(config-router)#neighbor 3.3.3.3 next-hop-self
在将路由条目传递给3.3.3.3该邻居时,将下一跳修改为本地地址;
使用字母i标识通过IBGP邻居学习的路由;
总结:
*和>均存在时才可以加表;
仅>存在即可传递,除出现s时;
条目必须即优也可用才能加表;
仅优即可传递,前提为不能被S抑制;
在MA网段中,ICMP重定向将帮助BGP学习到最佳的下一跳;
R1#debug ip bgp updates 动态查看BGP更新包
R1#clear ip bgp * 硬重启 重启本地所有邻居间的TCP会话
R1#clear ip bgp * soft 软重启 仅和本地所有邻居间重新收发路由,不断开任何关系
R1#clear ip bgp 3.3.3.3 仅和3.3.3.3邻居进行硬重启
R1#clear ip bgp 3.3.3.3 soft 仅和3.3.3.3邻居进行软重启
R1#clear ip bgp 3.3.3.3 soft ? 软重启
in Soft reconfig inbound update 收路由
out Soft reconfig outbound update 发路由
R1#show ip bgp neighbors 123.1.1.2 advertised-routes
仅查看本地发送给邻居123.1.1.2的路由信息
R1#show ip bgp neighbors 123.1.1.2 received-routes
% Inbound soft reconfiguration not enabled on 123.1.1.2
仅查看本地从123.1.1.2 的接收到的路由,默认没有专用的存储空间来装载
R1(config-router)#neighbor 123.1.1.2 soft-reconfiguration inbound
配置存储空间,建议查看完后删除该空间
BGP协议在宣告路由时,将携带本地路由表中到达目标的度量值及下一跳;
度量值:可以让本地EBGP邻居,判定那台EBGP设备离目标最近;
当本地从一台IBGP邻居处学习到的路由,需要传递给本地的EBGP邻居时,度量值清除;
注:为保障路径的优秀,建议所有存在EBGP邻居的BGP路由器均需要本AS的路由;
下一跳:接收到的路由条目中,若下一跳地址为本地,那么条件不优;
该条件必须在打破水平分割、没有修改下一跳为本地时才能有意义;
意义在于迫使管理员让所有存在EBGP邻居的BGP路由器均宣告本地AS路由;
自动汇总的命令不针对普通的BGP路由;仅针对从IGP重发布到BGP的路由;
r2(config-router)#redistribute ospf 1
auto-summary 不携带原有的掩码、度量值、下一跳
no auto-summary 携带原有的掩码、度量值、下一跳
在BGP协议中的逐条宣告,可以理解为逐条将其他协议产生的路由重发布到BGP协议中;
在BGP协议中进行重发布,可以理解为批量的将其他协议产生的路由宣告到BGP协议中;
携带原有的度量和原有的下一跳地址其规则、目的同上面的宣告问题一致;
总结:无论在BGP协议中是宣告,还是重发布都应该在所有存在EBGP邻居关系的BGP路由器均进行配置;
注:重发布进入BGP的路由和宣告进入BGP的路由其属性中,起源属性不同;
本地路由表中任何形式产生的路由均可宣告
先在本地配置一条到达汇总地址的空接口防环路由,然后再在BGP协议中宣告这种汇总路由
r5(config)#ip route 5.5.4.0 255.255.252.0 null 0
r5(config)#router bgp 3
r5(config-router)#network 5.5.4.0 mask 255.255.252.0
为精确的选路,AS间常常在发送了聚合路由条目后,还需要酌情发送部分的明细路由,来保障选路;
在这种聚合配置下,只要需要再逐一的宣告有需求的明细路由即可;
先逐条宣告明细路由,然后再在更新源上进行聚合配置
r5(config)#router bgp 3
r5(config-router)#network 5.5.5.0 mask 255.255.255.0
r5(config-router)#network 5.5.6.0 mask 255.255.255.0
r5(config-router)#aggregate-address 5.5.4.0 255.255.252.0
默认所有的明细和聚合条目同时发送
r5(config-router)#aggregate-address 5.5.4.0 255.255.252.0 summary-only
仅发送汇总路由,所有的明细路由被S-抑制传输;
标准的聚合配置将自动产生空接口防环路由;
为精确的选路,AS间常常在发送了聚合路由条目后,还需要酌情发送部分的明细路由,来保障选路;
必须在进行标准聚合配置才能使用
```
r5(config)#ip prefix-list ss permit 5.5.5.0/24
r5(config)#route-map ss permit 10
r5(config-route-map)#match ip address prefix-list ss
r5(config)#router bgp 3
r5(config-router)#aggregate-address 5.5.4.0 255.255.252.0 suppress-map ss
r5(config-router)#end
r5#clear ip bgp * soft
```
注:这种做法是route-map 中允许的流量反而被抑制;
```
r5(config)#ip prefix-list xx permit 5.5.5.0/24
r5(config)#route-map xx deny 10
r5(config-route-map)#match ip address prefix-list xx
r5(config-route-map)#exit
r5(config)#route-map xx permit 20
r5(config-route-map)#exit
r5(config)#router bgp 3
r5(config-router)#neighbor 4.4.4.4 route-map xx out 控制层面方向
r5(config-router)#end
r5#clear ip bgp * soft
```
r5(config)#access-list 1 deny 5.5.5.0
r5(config)#access-list 1 permit any
r5(config)#router bgp 3
r5(config-router)#neighbor 4.4.4.4 distribute-list 1 out
r5(config-router)#end
r5#clear ip bgp * soft
```
r5(config)#ip prefix-list qq deny 5.5.5.0/24
r5(config)#ip prefix-list qq permit 0.0.0.0/0 le 32
r5(config)#router bgp 3
r5(config-router)#neighbor 4.4.4.4 prefix-list qq out
r5(config-router)#end
r5#clear ip bgp * soft
```
汇总地址不处于更新源AS时,默认聚合条件将回流到更新源AS,导致黑洞路由流量必须到汇总的AS来丢弃;
利用EBGP水平分割:路由条目在传递时将记录所有经过的AS编号,接收到的条目中若存在本地的AS号将拒绝接收;
解决方法:将明细路由上的AS-pash属性附着于汇总条目上
r4(config)#router bgp 2
r4(config-router)#aggregate-address 5.5.4.0 255.255.252.0 summary-only as-set
为避免IBGP环路,存在IBGP水平分割机制,在该机制下为实现全网的路由正常传递,必须全连的邻居关系(本AS内所有的BGP路由间均需要存在IBGP邻居关系),建邻数量成几何上升;
所谓有条件的打破,是指在打破水平分割机制时,必须保证无环;
存在客户端、非客户端、RR(反射器)三种角色;
构成一个簇(组);
客户端、非客户端在一个组内数量不限制客户端必须至少一台,所有的客户端、非客户端与RR间必须为IBGP邻居关系;
r3(config)#router bgp 2
r3(config-router)#neighbor 2.2.2.2 route-reflector-client
2.2.2.2成为本地的客户端,同时本地成为RR;
切记:反射器仅反射优的路径,因为只有优的路径存在传递性;
若在真机上,一台设备成为RR或者客户端,那么在这个设备配置修改下一跳为本地后无效;模拟器上均生效;
r2(config-router)#neighbor 3.3.3.3 next-hop-self
可以在真机上使用route-map来替代:
r2(config)#route-map nex permit 10
r2(config-route-map)#set ip next-hop peer-address
r2(config-route-map)#exit
r2(config)#router bgp 2
r2(config-router)#neighbor 3.3.3.3 route-map nex out
r2(config-router)#end
r2#clear ip bgp * soft
在一个真实的AS中,逻辑的划分出多个小AS;
小AS间为联邦内的EBGP邻居关系,这种关系可以向EBGP关系一样传递路由,当不能修改属性;
r2(config)#router bgp 64512
r2(config-router)#bgp confederation identifier 2
r3(config)#router bgp 64512
r3(config-router)#bgp confederation peers 64513
总结:实际工程中,以上两种技术将被结合使用;
各种参数,存在排序;修改属性可以直接干涉BGP的选路;
Weight | 传播范围 | 默认数值 | 大优或小优 |
---|---|---|---|
Cisco私有属性 | 不传播 | 本地32768,邻居0( 0-65535) | 大 |
r4(config)#router bgp 2
r4(config-router)#neighbor 3.3.3.3 weight 1
r4(config-router)#end
r4#clear ip bgp * soft
本地所有从3.3.3.3学习的路由,权重值修改为1;
基于不同的目标选择不同的最佳路径;
r4(config)#ip prefix-list w permit 2.2.2.0/24
r4(config)#route-map w permit 10
r4(config-route-map)#match ip address prefix-list w
r4(config-route-map)#set weight 1
r4(config-route-map)#exit
r4(config)#route-map w permit 20
r4(config-route-map)#exit
r4(config)#router bgp 2
r4(config-router)#neighbor 3.3.3.3 route-map w in
r4(config-router)#end
r4#clear ip bgp * soft
注:调用时只能在本地的控制层面入向,因为该属性不传播;
route-map优于filter-list优于neighbot weight
Local-preference | 传播范围 | 默认数值 | 大优或小优 |
---|---|---|---|
公有属性 | IBGP邻居关系间 | 100(0-255) | 大 |
最常用于干涉IBGP邻居关系选路;本地出口在多个路由器上的场景
r3(config-router)#bgp default local-preference 101
r3(config-router)#end
r3#clear ip bgp * soft
本地发送给所有IBGP邻居的路由,优先级均修改为101;
基于部分的路由进行修改,可以在控制层面流量的入或出接口上修改;
必须为IBGP邻居关系;
r4(config)#ip prefix-list l permit 2.2.2.0/24
r4(config)#route-map l permit 10
r4(config-route-map)#match ip address prefix-list l
r4(config-route-map)#set local-preference 101
r4(config-route-map)#exit
r4(config)#route-map l permit 20
r4(config-route-map)#exit
r4(config)#router bgp 2
r4(config-router)#neighbor 3.3.3.3 route-map l in
r4(config-router)#end
r4#clear ip bgp * soft
即使在EBGP邻居使用route-map 配置了在出方向也是没用的,因为发给EBGP对等体的update根本不会携带这个属性,所以这样配置没有意义
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/24 0.0.0.0 0 100 0 1 i
* i 1.1.1.1 0 100 0 1 i
条目在传递过程中记录经过的AS编号;优选经过数量最少的路径;
AS的增加只能在EBGP邻居关系间进行;
管理员可以策略在EBGP邻居关系间增加AS的数量,不能减少;
虽然只能在EBGP邻居关系间修改,当依然可以干涉到IBGP关系下的选路;
由只能增加,故修改A路径,优选B路径;
r1(config)#ip prefix-list as permit 2.2.2.0/24
r1(config)#route-map as permit 10
r1(config-route-map)#match ip address prefix-list as
r1(config-route-map)#set as-path prepend 3 4 5
r1(config-route-map)#exit
r1(config)#route-map as permit 20
r1(config-route-map)#exit
r1(config)#router bgp 2
r1(config-router)#neighbor 12.1.1.2 route-map as in
r1(config-router)#end
r1#clear ip bgp * soft
注:只能在EBGP邻居间的控制层面干涉选路;
入向调用—3 4 5 x,X为真实经过过的编号
出向调用—X 3 4 5 ; 最前端AS为最新经过的编号;
注:AS-pash属性还用于EBGP水平分割,若人为添加的AS号,在网络的后方真实存在,那么这些路由将无法进入这些AS;可以重复添加已经经过的AS号;或者添加私有的AS号;
r1(config)#route-map as permit 10
r1(config-route-map)#set as-path prepend 1 1 1
解决方法:
nei X.X.X.X allowas-in 允许和具有自己相同的AS的路由进入本AS (接收者)
nei x.x.x.xas-override 把具有普和其他AS相同AS号的路由放入这个AS (发送者)
Origin codes: i - IGP, e - EGP, ? - incomplete
所谓起源属性,及条目是通过什么方式进入到BGP协议来的;
使用i标识network --管理员宣告条目
使用e标识通过早期的EGP协议学习后,重发布到BGP来的
使用?标识通过IGP学习,重发布到BGP协议
规则:i优于e优于?
r1(config)#ip prefix-list o permit 2.2.2.0/24
r1(config)#route-map o permit 10
r1(config-route-map)#match ip address prefix-list o
r1(config-route-map)#set origin egp 2 修改为e,数字为对端邻居所在AS编号
r1(config-route-map)#exit
r1(config)#route-map o permit 20
r1(config-route-map)#exit
r1(config)#router bgp 2
r1(config-router)#neighbor 4.4.4.4 route-map o out
r1(config-router)#end
r1#clear ip bgp * soft
度量值
BGP协议不存在度量值,当管理员可以人为去赋值,来干涉选路;
可用于干涉EBGP/IBGP邻居下的选路,当最常用于干涉EBGP邻居间的选路;
它被典型的用在AS间的链路上,以区分到达相同的邻居AS的多个出口点
如果到同一个目的地的两条路由来自不同的AS,此时BGP路由选路时不进行比较MED,MED只对单一的AS有意义
我们可以强制让它们比较bgp always-compare-med
MED | 传播范围 | 默认数值 | 大优或小优 |
---|---|---|---|
公有属性 | 相邻AS之间 | 0 | 小 |
例:AS1干涉AS2对AS1的选路
r2(config)#ip prefix-list med permit 2.2.2.0/24
r2(config)#route-map med permit 10
r2(config-route-map)#match ip address prefix-list med
r2(config-route-map)#set metric 1
r2(config-route-map)#exit
r2(config)#route-map med permit 20
r2(config-route-map)#exit
r2(config)#router bgp 1
r2(config-router)#neighbor 12.1.1.1 route-map med out
r2(config-router)#end
r2#clear ip bgp * soft
使用扩展ping来进行检测:
r2#ping
Protocol [ip]:
Target IP address: 4.4.4.4
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [2]:
Extended commands [n]: y
Source address or interface: 2.2.2.2
Type of service [0]:
Set DF bit in IP header? [no]:
Validate reply data? [no]:
Data pattern [0xABCD]:
Loose, Strict, Record, Timestamp, Verbose[none]: r
GP协议除了基本属性外,还存在大量的扩展属性;
但默认各家厂商的BGP协议不识别、不传递该属性;
Internet 所有属于这个社团属性的路由都有一个缺省值,可以自由地公布属于这个团体的路由,换句话说这个社团的前缀通告没有任何限制
local-AS 接收到的条目中携带该属性,不得将该条目再传递给其他小AS
no-advertise 接收到的条目中携带该属性,不得将该条目再传递给其他邻居
no-export 接收到的条目中携带该属性,不得将该条目再传递给其他大AS
若没有小AS,local-AS和no-export作用一致;
有网络管理员自己定义的社团属性,它的主要目的是为前缀附加管理标记,以便制定合适的策略。
例:关于条目传播范围的几种社团属性
r1(config)#route-map com permit 10
r1(config-route-map)#set community no-advertise
r1(config-route-map)#exit
r1(config)#router bgp 1
r1(config-router)#neighbor 12.1.1.2 route-map com out
r1(config-router)#end
r1#clear ip bgp * soft
注:因为默认的不传播社团属性,故添加社团数据后,必须开启传递性;
r1(config)#router bgp 1
r1(config-router)#neighbor 12.1.1.2 send-community
用来警告下游路由器路由聚合后产生的路由路径丢失。
BGP支持向BGP邻居传递重叠路由,可以选择多种方式:
aggregate-address 10.0.0.0 255.0.0.0
aggregate-address 10.0.0.0 255.0.0.0 suppress-map
aggregate-address 10.0.0.0 255.0.0.0 sunnary-only as-set
aggregate-address 10.0.0.0 255.0.0.0 sunnary-only
用来通告汇总路由的汇聚路由器BGP_ID(Cisco)和聚合路由的路由器的AS号。
路由反射器使用该属性,不接收与自己相同的起源者ID的路由,防止环路。
出环
路由反射器使用该属性,不接收与自己相同的簇列表的路由,防止环路。
比较前提:同步被关闭、下一跳可达;均可优
r2(config)#router bgp 1
r2(config-router)#maximum-paths 2
r1(config)#router bgp 1
r1(config-router)#bgp router-id 1.1.1.1
r1(config-router)#neighbor xxx peer-group 创建名为xxx的peer-group
r1(config-router)#neighbor xxx remote-as 2 定制内容
r1(config-router)#neighbor xxx update-source loopback 0
r1(config-router)#neighbor xxx ebgp-multihop
r1(config-router)#neighbor 2.2.2.2 peer-group xxx
r1(config-router)#neighbor 3.3.3.3 peer-group xxx
r1(config-router)#neighbor 4.4.4.4 peer-group xxx
注:一旦和某个邻居调用了peer-group,那么之后与该邻居的大部分命令就是必须在peer-group中完成;
r1(config-router)#neighbor 2.2.2.2 password cisco
注:邻居的密码是以MD5值发送的;
因为使用passwrod字符,故在running-config中可以使用密码加密服务来加密显示
r1(config)#service password-encryption
修改自己路由器的对外通告AS
改变本地AS号
对外欺骗还是原来的AS
这样原来相连的AS就不用改变
启动翻动路由的惩罚机制(默认不启动)
R4(config-router)#bgp dampening
缺省情况,每次翻动会分配惩罚值1000,如果累计超过2000,路由会被抑制直到降低至750。
减少的速率是按照每15分钟减少一半的速率(半衰期)。
为了防止惩罚值太大被一直抑制,有一个最大的抑制时间,通常为半衰期的4倍,默认半衰期是15分钟,那么最大抑制时间为60分钟。
这些默认值可以进行修改
R4(config-router)#bgp dampening 15 750 2000 60
15:半衰期时间,单位分钟
750:重用阀值,没有单位
2000:抑制阀值,没有单位
60:最大抑制时间,单位分钟
如果被抑制,BGP路由前面会打d ,如果是打h,代表曾经发生过翻动,但未达到惩罚值。
R4#show ip bgp dampening flap-statistics
可以查看打d和h的路由
R4#show ip bgp dampening dampened-paths
可以查看正被抑制的路由
假如翻动的路由已经被修复,可以使用以下命令进行立即解封
R4#clear ip bgp dampening
立即清除已经被抑制的路由,使它们恢复可用
R4#clear ip bgp flap-statistics
不单可清除被抑制的路由,还可以清除所有惩罚值
后面还可以跟正则表达式来指定相应的路由
例如:R4#clear ip bgp flap-statistics regexp _30_
可以清楚所有包含AS 30的翻动的路由的惩罚值。
也可以跟filter-list
精确下发默认路由给特定的邻居
R4(config)#router bgp 100
R4(config-router)#neighbor 45.1.1.2 default-originate
没有具体的邻居,发给所有的邻居
R4(config)#router bgp 100
R4(config-router)#default-information originate
创建静态默认路由
将静态默认路由重分发进bgp进程
设置BGP命令default-information originate