<BGP(Border Gateway Protocol)>
·Autonomous Systems:(自治系统定义)
运行同一种选路策略,由统一管理者管理的一组网络。
RFC对AS的定义:一组被统一管理的路由器,它们使用相同的内部网关协议和统一的度量值在AS内部路由分 组,并使用外部网关协议将分组路由到其他AS。
每一个自治系统都有一个AS号
·AS号由internet地址授权委员会(IANA)统一负责分配,下设三个分支局
AS号取值范围:1-65535
1-64511 (公有)
64512-65535 (私有)
电信AS号:4134 4809 网通AS号:9929 4837 中国教育网:4538
·以下的网站可以获取到AS的一些信息
Bgp.potaroo.net 一个好的网站,可以了解到关于AS号和IP地址的分配信息
http://www.routeviews.org/
Telnet route-server.ip.att.net telnet这一地址可以看到一台BGP路由器的镜像
·BGP协议是一个用来在AS之间传递路由的协议
·BGP路由有一个路径列表,中间记录了这条路由所经过的所有的AS号,BGP路由器不会接受路径列表中包含其AS号的路由选择更新,这种机制也被称为EBGP的水平分割原则。用来防环
·BGP路由器只能将 其使用的路 由通告给他的邻居。也就是说只传递最优的路由。
·BGP被称为路由矢量路由协议,因为一个AS向另一个AS所传递的BGP路由更新,其实是传递一条路径信息,并且描述了通过这条路径所能到达的网络。
·BGP支持逐跳路由选择模式的策略--你可以决定自已的数据流去往哪一个AS,但不能决定邻接的AS如何转发你的数据流。
1、AS允许数据包通过自已到达其它AS
2、AS有多条到其它自治系统的连接
3、需要对数据流进入和离开AS的方式进行控制
·BGP属于EGP,是高级DV协议,也被称为路径矢量协议,基于TCP 179端口。
·现在使用版本BGP4。
·第一次做完整更新,以后就只增量更新、触发更新
·使用keeplive消息维持邻居关系
·丰富的metric值,也叫路径属性
·被设计用于特大的网络,例如internet
·BGP的目地是提供一种域间路由选择系统,确保自主系统能够无环路的交换路由选择信息。BGP路由器交换有关前往目标网络的路径的信息。
·Neighbor table 邻居表
保存所有的邻居信息,BGP的邻居关系需要显示的配置,而且邻居不需要直连
·BGP forwarding table/database
保存从每一个邻居处学到的路由信息
·IP routing table
List of best paths to destination networks
BGP表和路由表是独立的,同样遵循AD小的进入路由表。
BGP默认不做负载均衡,只会选出最优的路由放进路由表,
·BGP中,每一个路由器也要有Router-ID,表示形式和指定过程同OSPF一致。
Open ---includes holdtime and BGP router ID,当然还有AS号。
Keepalive ---每隔60S发送一次。hold time=180S
Update ---information for one path only (could be to multiple networks)
---Includes path attributes and networks
Notification
---when error is detected
---BGP connection is closed after sent (做maximum-prefix时可看到)
· BGP用Open报文建邻居,用KeepaLive报文做日常联系
·OPEN消息中包含以下内容:
1、版本
2、自主系统号
3、hold time 注意: 这个时间是可以协商的,取两个BGP邻居中较小的保持时间。
4、BGP 路由器的 router-id,选择方法与OSPF中相同
5、可选参数
·一个UPDATE 消息一次可以只通告一条路由,并携带多个属性。
一个UPDATE 消息一次也可通告多条路由,但它们的所有属性必须相同。
一个UPDATE 消息可以同时撤消多条路由。
实际上也就是说一个UPDATE中只能有一组相同的路径属性,也就是说只能有一条路径,但可以有多个目标网络号。
BGP邻居也叫BGP对等体,分两种:
EBGP--位于当前AS之外的,属于其它AS的邻居,通常要求直连。
IBGP--位于同一个AS之内的邻居,无需彼此相连,只要它们能够彼此到达对方,完成TCP握手即可。
· 建议EBPG之间用直连接口来建邻居
· 建议IBGP中用环回口建邻居
·从EBGP邻居学到的路由管理距离是20
·从IBGP邻居学到的路由管理距离是200
·BGP's Split Horizon Rule:
IBGP:从IBGP邻居收到的路由不再传给其他的IBGP邻居。
EBGP:不接收携带本AS号的路由更新。
·BGP路由黑洞的解决方法:
1)物理线路的Full Mesh
2)BGP重分布进IGP
3)IGP内所有路由器都运行BGP
4) MPLS/VPN
·IBGP水平分割的解决方法:
1)Full Mesh
2)BGP's Partial Mesh (路由反射器/联邦)
·如果是宣告一个主类网络,则它的掩码不会在BGP路由表中显示出来,表示默认使用主类网络的标准掩码。
例一:用物理接口建立BGP邻居关系
R4和R2建EBGP邻居关系:
R4:
router bgp 4
bgp router-id 4.4.4.4
neighbor 24.1.1.2 remote-as 123 //指定EBGP邻居
R2:
router bgp 123
bgp router-id 2.2.2.2
neighbor 24.1.1.4 remote-as 4 //指定EBGP邻居
R2和R3建立IBGP邻居关系:(需要先在AS123内部运行IGP)
R2:
router bgp 123
neighbor 13.1.1.3 remote-as 123
neighbor 13.1.1.3 next-hop-self //IBGP中,边界路由器需要对邻居打上这一命令
R3:
router bgp 123
neighbor 12.1.1.2 remote-as 123
neighbor 12.1.1.2 next-hop-self
例二:用环回接口建立BGP邻居关系:
R4和R2建EBGP邻居关系:
R4:
ip route 2.2.2.0 255.255.255.0 24.1.1.2 //先确保有去邻居的路由
router bgp 4
bgp router-id 4.4.4.4
neighbor 2.2.2.2 remote-as 123 //指定EBGP邻居
neighbor 2.2.2.2 update-source lo0 //指定自已的更新源
neighbor 2.2.2.2 ebgp-multihop 2 //设置EBGP的多跳
R2:
ip route 4.4.4.0 255.255.255.0 24.1.1.4 //先确保有去邻居的路由
router bgp 123
bgp router-id 2.2.2.2
neighbor 4.4.4.4 remote-as 4 //指定EBGP邻居
neighbor 4.4.4.4 update-source lo0 //指定自已的更新源
neighbor 4.4.4.4 ebgp-multihop 2 //设置EBGP的多跳
R2和R3建立IBGP邻居关系:(需要先在AS123内部运行IGP)
R2:
router bgp 123
neighbor 3.3.3.3 remote-as 123
neighbor 3.3.3.3 update-source lo0
neighbor 3.3.3.3 next-hop-self
R3:
router bgp 123
neighbor 2.2.2.2 remote-as 123
neighbor 2.2.2.2 update-source lo0
neighbor 2.2.2.2 next-hop-self
其它命令:
·宣告路由进BGP,注意BGP的network能够通告路由表中的所有非BGP路由量。
router bgp 123
network 172.16.1.0 mask 255.255.255.0 //宣告网络时要说明掩码
· 下面这条命令修改对所有邻居的keepalive-interval和hold-time
router bgp 123
timers bgp keepalive-interval hold-time
· 下面这条命令修改对特定邻居的keepalive-interval和hold-time。
router bgp 123
neighbor 1.1.1.1 times keepalive-interval hold-time
·各类显示命令:
show ip bgp summary //摘要的邻居邻居信息
show ip bgp 2.2.2.0/24 //显示明细路由的详细信息
show tcp brief //可以看到是谁发起的TCP链接
show ip bgp neighbors //详细的邻居信息
show ip bgp rib-failure //可以看到提示有更高AD的路由
show ip bgp neighbors 2.2.2.2 advertised-routes //看向这个邻居发了哪些路由信息
show ip bgp neighbors 3.3.3.3 received-routes //看这个邻居给我发了哪些路由信息,必须在本路由器上用下面这条命令开启后才能用
R2(config-router)#neighbor 3.3.3.3 soft-reconfiguration inbound //开启查看接收到的路由信息的功能
debgu ip routing //查看路由表调试信息
debug ip bgp updata //查看BGP更新信息
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
路由器用来和邻居建立邻居关系的地址,我们称之为更新源地址。
注意:在BGP建邻居过程中,neighbor命令所指定的邻居的IP地址,也必须是邻居用来和本路由器建立TCP连接的地址。如果不匹配,两端建立不起邻居关系。
" show ip bgp summary中的Neighbor " / " show ip bgp中的Next Hop "
都是指 Update-Source 。
可以在路由器上用以下命令指定使用哪个接口来和邻居建立联系,这个接口就是自已的更新源:
router bgp 123
neighbor 3.3.3.3 update-source loopback 0
1、idle 空闲--查找是否有去往邻居的路由
2、connect 连接--建立TCP三次握手
3、Active 活动--协商还未成功
4、open sent 打开发送--互发参数进行协商,也就是发送open报文
5、open confirm 打开确认--协商取得一致
6、established 建立
IDLE: State when BGP peer refuses any incoming connections.
n CONNECT: State in which BGP peer is waiting for its TCPconnection to be
completed.
n ACTIVE: State in which BGP peer is trying to acquire a peer by listening and
accepting TCP connection.
n OPENSENT: BGP peer is waiting for OPEN message from its peer.
n OPENCONFIRM: BGP peer is waiting for KEEPALIVE or NOTIFICATION
message from its peer.
n ESTABLISHED: BGP peer connection is established and exchanges UPDATE,
NOTIFICATION, and KEEPALIVE messages with itspeer.
只有当连接处于建立状态时,才能交换更新、存活和通知消息
如果一直停在idle状态,则可能:
1、没有去往邻居的路由
2、neighbor命令指错了邻居的地址
如果一直停在active状态,则可能:
1、邻居没有过来的路由
2、邻居没有指neighbor命令
3、邻居neighbor中指的地址错误
4、两端的AS号不匹配
BGP是一个AS-by-AS的路由协议,而不是一个router-by-router的路由协议。
BGP路由的下一跳并不是指下一个路由器的IP地址,而是指到达下一个AS的IP地址。
所以,默认情况下,从EBGP邻居学到的路由再向其它的IBGP邻居传递的时候,下一跳不改变。
当在R4上宣告172.16.1.0的路由进入BGP后,你会在R3上发现如下情况:
R3:
sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 172.16.1.0/24 1 0 64513 i
router#debug ip bgp updates
MA网络的下一跳: 当把一条路由发送给EBGP邻居时,如果接收这条路由的接口与EBGP邻居的更新源地址在同一网段的时候,路由的下一跳不改变。
BGP中,建立邻居关系的时候,有可能要对邻居指上多条命令,peer-group可以将多条命令组合在一起,用来在建邻居关系的时候一次性调用。减少了配置量。
BGP为每个邻居都占用一部分Buffer,使用Peer-Group可以使多个邻居共用同一部分Buffer。减少资源占用。
而且针对比较多的邻居关系,可以减少配置量。
router bgp 123
neighbor WOLF peer-group //定义一个peer-group组
neighbor WOLF remote-as 64513 //向组中加入命令
neighbor WOLF update-source loopback 0
neighbor 2.2.2.2 peer-group WOLF //调用
注意:本命令只会宣告路由,不会激活一个接口进入BGP域
· 在BGP中,network的特点是:
1、能够通告路由表中的所有非BGP路由量、只要是路由表中有的路由,它都可以宣告,直连的,静态的,即使从IGP学到的也可以
2、默认情况下必须精确宣告网络和掩码
3、只起到宣告作用,不建邻居
4、可宣告IGP学到的路由,并携带Metric和Next-hop
· Auto-summary 对于 network 的影响:
1 、可以是主类方式宣告(如: network 3.0.0.0 ),条件是:在 中必须有 ;
2 、也可以是明细方式宣告,必须带mask(如: network 3.3.3.0 mask 255.255.255.0 ),条件是:必须和 IGP 表的路由 。
3 、如果是用 no auto-summary ,那么 network 只能用明细方式宣告(除非是主类网络)。通常都会用这一方式。
R4(config-router)#network 4.4.4.0 mask 255.255.255.0 (在no auto-summary时,严格按照IP地址掩码通告,不加mask按主类掩码匹配)
R4(config-router)#network 100.0.0.0 (在auto-summary时,也可以主类方式通告,前提是有一条明细)
如果路由器从IGP和IBGP都学到一条路由,由于IBGP路由的AD值为200,通常会大于IGP学到的路由,所以它会选择从IGP学到的放进路由表,并在IBGP路由的前面打上r,表示自已有一条同样的IGP路由。在与其竞争时IBGP路由失败了。
·Do not use or advertise to an external neighbor a route learned by IBGP
until a matching route has been learned from an IGP.
解释:开启同步的情况下,AS内的一个路由器从IBGP邻居处学到一条路由,不用也不传,除非是从IGP学到同样一条路由。(网络号和掩码都必须完全一样)
同步规则是为了在一个不是full-mesh的网络中解决路由黑洞而产生的。如果路由器认为一条BGP路由存在黑洞的可能性,它就不会去传这条路由。由于同步规则会对路由的传递产生影响,所以建议关闭它。
router bgp 123
no synchronization
1)同步问题
2)下一跳是否可达
解决方案:
router bgp 123
no synchronization //关闭同步,高版本IOS默认开启
neighbor 3.3.3.3 next-hop-self
<BGP认证>
BGP支持MD5认证
router bgp 123
neighbor 2.2.2.2 password cisco
当你将一个policy应用于BGP的时候,由于BGP是不会做周期更新,所以需要手动做更新。
clear ip bgp * //来硬的,会DOWN掉邻居关系
clear ip bgp * soft //软清,不会down掉邻居关系
neighbor [ ip-address ] soft-reconfiguration inbound 本命令告诉BGP路由器:保存从邻居那里学到的所有路由更新,供入站策略被修改时使用。这样就无需对方重新发送信息
· 在开启自动汇总的情况下,当其他IGP协议重分布进BGP时,默认会进行自动汇总。其它情况下BGP不会自动汇总
1、在auto-summary情况下,将IGP重分布进BGP,不会携带原有的METRIC值,next-hop
2、在no auto-summary情况下,会携带原有的METRIC值和掩码,next-hop
router bgp 123
no auto-summary //关闭自动汇总
aggregate聚合
方法:先为路由器配置一条静态的汇总路由,再宣告进BGP就可以了,注意不要把明细路由宣告进BGP
ip route 192.168.0.0 255.255.252.0 Null0
router bgp 123
network 192.168.0.0 mask 255.255.252.0
使用aggregate命令做路由聚合
第一步:要先宣告每一条明细
第二步:在BGP进程中用以下命令做聚合
例一:如下图所示,要求在R2上做聚合,让R1收到一条192.168.0.0/16的聚合路由
R2:
router bgp 123
aggregate-address 192.168.0.0 255.255.255.0
注意:观察R1,你会发现,默认情况下,明细和汇总路由都会被发出。
例二:以下命令做聚合,则只发汇总,不发明细
R2:
router bgp 123
aggregate-address 192.168.0.0 255.255.255.0 summary-only //只通告汇总
例三:还可用抑制列表对其中的一部分明细路由进行抑制
Suppress-map 抑制列表 ----- 抓的就是被抑制的路由
ip prefix-list 1 permit 192.168.2.0/24
route-map WOLF
match ip address prefix-list 1
router bgp 123
aggregate-address 192.168.0.0 255.255.255.0 suppress-map WOLF //抑制192.168.2.0/24路由
注意:如果用了suppress-map不起作用的话,要清一下本路由器,要硬清才行
例四:
使用aggregate做汇总后,在汇总路由中的一些明细属性将会消失,用下面这一命令可以还原
router bgp 123
aggregate-address 192.168.0.0 255.255.255.0 as-set //还原AS属性
*> 192.168.0.0/22 0.0.0.0 100 32768 i
{4,5} (明细从不同AS传来)
如果不将明细路由的属性还原,有可能导致路由回馈现象发生:
路由回馈现象:
在R2上起两条路由宣告进BGP,在R1上做聚合,想想有啥问题。在这时as-set命令就有大作用了。
aggregate 命令参数详解:
aggregate-address
advertise-map //Set condition to advertise attribute
as-set //Generate AS set path information
attribute-map //Set attributes of aggregate
route-map //Set parameters of aggregate
summary-only //Filter more specific routes from updates
suppress-map //Conditionally filter more specific routes from updates
nlri
<cr>
- Advertise-map ---- 只对 advertise-map 里面匹配的路由进行聚合。当 advertise-map 里面匹配的明细路由全部消失后,即使聚合路由范围内还有其他明细路由,聚合路由也将消失。当与 as - set 合用时,只继承 advertise-map 里面匹配的明细路由的属性。
- As-set---- 让聚合路由继承明细路由的属性,包括: as-path , local_preference , community , origin - code 。与 advertise-map 合用,只继承 advertise-map 里面匹配的明细路由的属性。
- Attribute - map 和 route - map---- 这两个参数一样,可以将聚合路由的属性清除掉(除了 as-path 属性),添加自己需要添加的属性。
- Summary-only ----将聚合路由所包括的所有明细路由都抑制掉,被抑制的路由在 bgp 的转发表里,显示为 s ,代表 suppress 的意思。发送更新时,只发送聚合路由。可以与 neighbor 1.1.1.1 unsuppress-map XX 合用,对特定邻居漏过特定的明细路由。
- Suppress - map ----将 suppress - map 里面匹配的路由抑制掉,被抑制的路由在 bgp 的转发表里,显示为 s ,代表 suppress 的意思。发送更新时,只发送聚合路由和没有被抑制的明细路由。可以 neighbor 1.1.1.1 unsuppress-map XX 合用,对特定邻居漏过特定的明细路由。
redistribute 命令可以将 IGP 的路由引入 BGP 。
例:
router bgp 123
redistribute eigrp 90
注意:
将 OSPF 重分布进 BGP 的时候,默认只能将 internal 的路由重分布进 BGP 。如果还想将 OSPF 的其他路由重分布进 BGP ,可以用以下命令。
router bgp 123
redistribute ospf 110 match [internal | external | nssa external] // 后面的参数可以任意组合
向 IGP 中注入 BGP 路由:
一般不建议将 BGP 的路由重分布进 IGP ,因为路由条目很大,很容易造成 IGP 的瘫痪。
默认情况下只能将 EBGP 的路由重分布进 IGP 。默认不让 IBGP 的路由重分布进 BGP 是为了防止环路。如果非要将 IBGP 的路由重分布进 IGP 。需要在进程内使用以下命令:
router bgp 123
bgp redistribute-internal
将BGP路由注入OSPF或EIGRP时,会将AS-PATH中最前面一个AS号作为TAG值重分布过去。
再把OSPF重分布进BGP时,可用以下方法将TAG还原为AS-PATH
route-map WOLF
set as-path tag
router bgp 123
redi ospf 110 match in ex 1 ex 2 route-map WOLF
方法一:
ip route 0.0.0.0 0.0.0.0 null 0
router bgp 12
network 0.0.0.0
方法二:
ip route 0.0.0.0 0.0.0.0 null 0
router bgp 12
redistribute static
default-information originate
方法三:
router bgp 12
neighbor x.x.x.x default-originate
router bgp 12
neighbor x.x.x.x default-originate route-map xx // 加入条件路由
注意:在使用条件路由时,必须用prefix来匹配路由才行,ACL不行
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
路由反射器
·路由反射器就是一台路由器,可以将它的IBGP邻居指定为自已的客户端。
·路由反射器打破了IBGP的水平分割规则,它的传递规则如下:
1、从EBGP学到的一条路由,会传给client和非client端
2、从client端学到的路由,会传给其它client和非client端
3、从非客户端收到路由,会转发给客户端以及EBGP邻居,但不会转发给非客户端。
·路由反射器和其客户的集合被称为集群(cluster),每一个集群都有一个cluster-id,默认情况下路由反射器的router-id会被用做cluster-id,也可以手工指定。路由反射器所传递的每一条客户端路由都会带上这个cluster-id。
配置路由反射器---
R2:
router bgp 123
neighbor 1.1.1.1 route-reflector-client //将R2配置为路由反射器,R1为客户端
当 RR 的客户 full mesh 时,可以用
no bgp client-to-client reflection
禁止客户到客户的路由反射。可以减少路由更新。
联邦
·将大AS划分成若干个小AS,小AS之间是 EBGP关系
· 1、 联邦中的所有路由器都必须用起小AS号。 (Route bgp 小AS)
router bgp 64512
· 2、 联邦中的所有路由器都必须声明大AS号
router bgp 64512
bgp confederation identifier 123
· 3、 连接小AS的边界路由器要互相指peers :
router bgp 64512
bgp confederation peers 64513
(对端小AS号)
注意:两个小AS之间也要解决多跳问题,大AS的边界路由器必须向内做next-hop-self。
·联邦外路由器和联邦的边界路由器建立邻居关系时,neighbor大AS号。
·联邦中的小AS号(64512)不算作AS-Path属性比较,只算作一个
·在sh ip bgp中,小AS号会用括号括住,并且不算做一个进行路径比较的AS号
属性分类
1、公认强制的--所有的BGP的updata消息都要包含该属性
2、公认自由决定的--该属性是可选可不选的,但是所有的BGP进程都能识别
3、可选传递的--即使BGP进程不能识别该属性,也会继续传递下去
4、可选非传递的--如果BGP进程不能识别该属性,可以忽略这条updata,并且不传递下去
例如:
1、公认强制属性
--AS路径(AS-path)
--下一跳(next-hop)
--源头(origin)
2、公认自由决定的
--本地优先级(local preferent)
3、可选传递的
--社团属性(community)
4、可选非传递属性
--MED
weight(权重)-- cisco私有技术 ,只具有本地意义,用于本地路由器进行选路
一条路由信息包含了一组属性,每一个属性由三个字段组成。
·属性类型
·属性长度
·属性值
CISCO所定义的选路原则标准是11条,这里加了两条(中文的两条),共13条。所加的两条算不上标准的选路原则,只是做一个补充而已。
- Prefer highest weight (local to router).
- Prefer highest local preference (global within AS).
- Prefer route originated by the local router (next hop = 0.0.0.0).
- Prefer shortest AS path.
- Prefer lowest origin code (IGP < EGP < incomplete).
- Prefer lowest MED (exchanged between autonomous systems).
- Prefer EBGP path over IBGP path.
- Prefer the path through the closest IGP neighbor.
- 如果配置了maximum-path[ibgp]n,如果存在多条等价的路径,会插入多条路径。
- Prefer oldest route for EBGP paths.
- Prefer the path with the lowest neighbor BGP router ID.
- 多跳路径的始发路由器ID相同,那么选择CLUSTER_LIST长度短的
- Prefer the path with the lowest neighbor IP address.
·CISCO的私有属性
·该属性本地有效。只在本路由器上起作用,不能传递给任何邻居
·weight属性用来影响本路由器自已的选路
·当一个路由器学到两条相同目的地路由,它可以根据WEIGHT值决定哪一条最优
·默认值=0 如果是本地产生的路由weight值为32768
·在进行比较时,weight值越大越好
例:通过修改Weight来选路
需求:
如上图所示,R3同时从R1和R4学到172.16.1.0的BGP路由,想优选从R1走
解法:
可以在R3上改动weight值
R3:
router bgp 1
Neighber 1.1.1.1 weight 100 //从邻居1.1.1.1传来的所有BGP路由weight值都改为100
也可使用route-map针对某一条路由单独修改
R3:
access-list 1 permit 172.16.1.0
route-map WE
match ip address 1
set weight 8
route-map WE 20 //一定要加上这条空的route-map语句
router bgp 1
neighber 1.1.1.1 route-map WE in
本地优先级是公认自由决定的属性,它告诉AS中的路由器,哪条路径是离开AS的首选路径。
特点:
·优先级属性用来影响IBGP邻居,告诉自己的IBGP邻居如何离开本AS。
·只能在本AS内传递,不能传给EBGP邻居。
·默认值=100
设置方法:通常可以在AS的边界路由器上设置本地优先级,用以下命令。
R1:
router bgp 1
bgp default local-preference 200 //将本地优先级默认值改为200
这条命令只对 EBGP 邻居路由器传过来的路由以及本路由器自己宣告的路由有效,对 IBGP 邻居路由器传过来的路由,不会改变它们的 local-preference 。如果将一个 IBGP 邻居传来的路由传给另外一个 IBGP 邻居,那我必须是 RR 。
·对 "EBGP 传过来的路由 "\" 自己 network 的路由 "\"AS-Path 为空的聚合路由 " 起效,要 show 明细才能看到。
·对 "IBGP 传过来的路由 "\" 联邦中的 EBGP 传过来的路由 "\"AS-Path 非空的聚合路由 " 不起效。
也可以针对邻居传过来的某一条路由单独设置本地优先级:
例如:如果在边界R1上,向R3传172.16.1.0的路由时,将优先级设置为100,在边界R4上向R3传172.16.1.0的路由时,将本地优先级设置为200,则内部路由器R3在选路时,流量会从R4走。
R1:
access-list 1 permit 172.16.1.0
route-map WE
match ip address 1
set local-preference 100
route-map WE 20
router bgp 1
neighbor 3.3.3.3 route-map WE out
R4:
access-list 1 permit 172.16.1.0
route-map WE
match ip address 1
set local-preference 200
route-map WE 20
router bgp 1
neighbor 3.3.3.3 route-map WE out
shortest AS-path
·BGP路由每经过一个AS,就会将这个AS号加入自已的AS-Path中。
·当一个路由器收到两条相同目的地的路由,它将选择AS路径最短的路由。
·这个属性只能在EBGP邻居之间传路由时进行改动,对IBGP邻居传来的路由改不了
·如果做了路由聚合,并加了as-set参数,聚合后继承明细路由的属性,在大括号里面的 as-path 在计算长度时,只算一个。在联盟内小括号里面的 AS 号,在选路时,不计算到 as - path 长度里面。
例:
如上图所示,要求在R1上从R2收到172.16.1.0路由时,在AS-PATH中加三个AS号,7、8、9。
R1:
access-list 1 permit 172.16.1.0
route-map AS
match ip add 1
set as-path prepend 7 8 9 设置虚拟的AS号
router bgp 1
neighbor 2.2.2.2 route-map AS in
也可以让R2在传出路由给R1的时候加AS号,但要注意,在IN方向加和在OUT方向加as号时,在AS-PATH中的排列顺序有一点区别。
做OUT方向时在原有AS号的后面加
做IN方向时在原有AS号的前面加
·做out方向:出本AS之前预先设定AS号,人为设定的AS号顺序不变。
·做in 方向:进本AS之前预先设定AS号,人为设定的AS号顺序不变。
建议:通常都会这样加set as-path prepend 1 1 1 加自已的AS号,不容易出问题
在 as-path prepend 的后面还有一个参数, last - as ,如:
route-map AS
set as-path prepend last-as ?
<1-10> number of last-AS prepends
意思是将离我最近的 AS ,将它的 AS 号在 as - path 里面再重复出现几次。这个 10 看起来可以和 allowas-in 里面的 10 对应起来。
bgp bestpath as-path ignore( 隐藏命令 )
这条命令可以使我们在选路时,跳过 as - path 的选路,直接往下继续选择最优路径。
本属性是用来说明BGP路由的起源,是如何成为BGP路由的。总共只有三个值:
IGP (i) 在BGP中用network命令宣告的路由
EGP (e) 从EGP协议重分布进BGP的中币,这个EGP指的是一种早期的协议,现已不用
Incomplete(?) 从IGP协议或者静态路由重分布进BGP的路由
这三个值有大小之分的:
i<e<? //在用来比较时,越小越优
默认每一条BGP路由都有起源属性,也可以用以下方法来改动一条路由的起源属性:
R2:
access-list 1 permit 172.16.1.0
route-map WOLF
match ip add 1
set origin egp
route-map WOLF 20
router bgp 1
nei 1.1.1.1 route-map WOLF out
多出口鉴别属性
特点:
·当两个AS之间存在多条路径的时候才使用
·用来影响EBGP邻居,告诉自己的EBGP邻居如何选最优路由。
· metric 传递不能传出 AS 。例:始发路由器可以将 metric 传给任何邻居,可以是 IBGP/EBGP ,但邻居收到后,不能传出邻居所在的AS。
·默认值=0,MED值越小越好
Show ip bgp 中显示的Metric值就是MED
例:
AS2希望AS1来访问172.16.1.0网段时流量通过R1过来。来访问192.168.1.0网段时流量从R4过来。
R2:
access-list 1 permit 172.16.1.0
access-list 2 permit 192.168.1.0
route-map TO-R1 10
match ip add 1
set metric 100
route-map TO-R1 20
match ip add 2
set metric 200
route-map TO-R1 30
route-map TO-R4 10
match ip add 1
set metric 200
route-map TO-R4 20
match ip add 2
set metric 100
route-map TO-R4 30
router bgp 2
neighbor 1.1.1.1 route-map TO-R1 out
neighbor 4.4.4.4 route-map TO-R4 out
·默认 不比较从不同AS传来 路由的MED。如果要比较不同AS传来的MED值,要用下面的命令
R2(config-router)#bgp always-compare-med
如果接收到路径没有 MED ,激活了 bgp bestpath missing-as-worst ,在这种情况下,这些路径的度量值被指定为 4294967294 (最大值)。优选那些主动设置了 MED 的路径。
---------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------
社团属性,也叫共同体属性,是可选传递属性
· " 可选 " :意味着并不是所有的路由器都能识别这个社团属性。
·"传递":意味着路由器即使不能识别这个属性,也能将这条路由继续传递下去。
· 社团属性类似于tag标记,它允许路由器能够使用一个指示符来标记路由,并且允许其它路由器根据这个标记来控制路由的传播范围,或者对含有标记的路由做一些处理。
· 一条路由可以设置多个社团属性,也就是说允许同时打上多个标记
· 还可以利用社团属性实现一些扩展的功能。比如在MPLS-VPN中的RT属性。
·默认情况下社团属性不会传递给邻居,必须有以下命令才行
R2(config-router)#neighbor 1.1.1.1 send-community
· 社团属性只会传给指定的邻居,并 此邻居上起效。
比如上例:就只传给1.1.1.1这一邻居,并只在它上面起效,默认不会再向后传
-------------------------------------------
·社团属性分以下两种:
1、well-known communities 公认团体
2、Private communities 私有团体
·社团属性中已经预定义好的三类well-known属性:
no-advertise:携带此属性的路由不会通告给任何BGP邻居。也就是说只传达给一个邻居
no-export: 携带此属性的路由不会传出本AS外,只会传给IBGP。(联邦中的小AS会传递)。
local-AS: 携带此属性的路由不会传出小AS。
配置公有团体属性:
route-map WOLF permit 10
set community no-advertise/ no-export/local-AS
router bgp 4
neighbor 24.1.1.2 send-community
neighbor 24.1.1.2 route-map WOLF out
在24.1.1.2上show明细可以看到社团属性,还有其它的一些属性
配置私有团体:
R4:
route-map WOLF permit 10
set community 4:20
router bgp 4
neighbor 24.1.1.2 send-community
做相应的策略:
R3:
ip community-list 1 permit 4:20
route-map WOLF deny
match community 1
route-map WOLF permit 20
router bgp 123
nei 35.1.1.5 route-map WOLF out 调用
ip bgp new-format 可显示出私有的属性,新格式
<local-as>主要在过渡AS号时用
在上图中,如果R4在与R2建EBGP邻居时,指错了AS号,本来应该是指向123,但是现在指为5了。怎么办:
如果在EBGP中,邻居指错了R2的AS号,可以在R2上用以下方法解决:
R2(config-router)#neighbor 12.1.1.1 local-as 5
(对方指错的AS号)
show ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.0/24 12.1.1.1 0 0 1 i
(加入了指错的AS号)
虽然上面的命令解决了问题,但是一个错误的AS号加入了路由的AS-PATH中,导致这条路由传给R5时,它不接收,因为AS-PATH中包含了它自已的AS号,EBGP水平分割原因限制了路由的接收。针对这个问题有两个解决方案:
1、在R5上针对邻居使用以下命令:
R5(config-router)#neighbor 35.1.1.3 allowas-in
只要在R5上打上以上的命令,针对邻居R3传过来的EBGP路由,将不再进行EBGP水平分割的检查。
2、在R2上也可以通过增加一个参数来搞定:
R2(config-router)#neighbor 12.1.1.1 local-as 5 no-prepend
(在AS-path中去掉指错的AS号, 只能在R2自已这边收到的路由中去掉 )
BGP flaping ·路由器通过IGP学到对方loopback,并用looback建EBGP邻居
·又在BGP中通告此loopback。此时BGP邻居会出现flaping
如下图所示:
R1和R2之间运行一个IGP协议,比如说EIGRP。将环回口都宣告进去,这样R1和R2相互之间就有对方环回口的路由了,然后再用环回口建立EBGP邻居关系。最后再把2.2.2.0和1.1.1.0的环回口宣告进BGP。这时你会发现BGP邻居关系会发生flapping。
问题提出:
1、R2和R3之间用以太网链路相连,R2和R3之间运行一个IGP协议,并将172.16.1.0宣告进IGP。
2、三台路由器运行BGP,组成在个AS
3、R1与R2建EBGP邻居,R1和R3建EBGP邻居。
4、在R2上将172.16.1.0网络再宣告进BGP。
5、R3通过IGP学到172.16.1.0路由,同时也通过EBGP邻居学到172.16.1.0路由。它将比较两条路由的AD值来选最优路由,由于EBGP路由的AD值默认为20,所以R3选择EBGP路由为最优路由,并放入路由表。而实际上这条EBGP路由所连接的是一条T1的链路,带宽是小于R2与R3之间的以太网链路的。并非最好的路由。
总结:
·通过IGP学到某条路由,又从EBGP学到相同的路由。
由于EBGP AD=20,小于IGP的AD,所以会优先EBGP的路由,
但实际路径可能从IGP走更优。
解决:
R3学到两条相同的路由,用以下方法在BGP进程下改,实际上就是提高了从BGP学到的路由的AD值
R3(config-router)#network 172.16.1.0 mask 255.255.255.0 backdoor
通过这样的宣告将EBGP学到的路由的AD值提高,从20提高到200
高版本的IOS即可对EBGP路由进行负载均衡,也可对IBGP路由进行负载均衡
条件是:按照BGP选路原则前八条都比不出来的情况下,多条路由才能进行负载均衡
对EBGP路由负载均衡:
R1(config-router)#maximum-paths 2
对IBGP路由负载均衡:
R1(config-router)#maximum-paths ibgp 2
例:如下图所示,在R1上会收到两条EBGP路由172.16.1.0/24。可以在R1上用maximum-paths命令实现EBGP路由的负载均衡。
问题的产生:
1、三台路由器先运行一个IGP协议,注意,172.16.1.0不用宣告进IGP
2、然后运行BGP,R1与R2建立EBGP邻居,R2与R3建立IBGP邻居
3、在R3上将172.16.1.0宣告进BGP
4、观察R1与R2上的172.16.1.0路由的下一跳,看看有啥问题产生
你将会发现,在R1与R2之间形成了环路。
在R2上做:
R2:
router bgp 2
neighbor 1.1.1.1 next-hop-unchanged //告诉邻居下一跳不改变,推荐做法
这种方法有两个限制:
1、有的IOS不支持unchaged命令
2、EBGP必须要有多跳
%BGP: Can propagate the nexthop only to multi-hop EBGP neighbor EBGP必须要有多跳,也就是说通常要用环回口建EBGP邻居,如果是用直连接口建EBGP邻居,也要打上多跳命令才行。否则上面的命令不起作用。
在R1上修改:
R1:
route-map WOLF
set ip next-hop 13.1.1.3
router bgp 1
neighbor 12.1.1.2 route-map WOLF in //将邻居12.1.1.2传过来的路由的下一跳改为13.1.1.3
-------------------------------------------------------------------------------------------
·为了防止路由频繁抖动。BGP利用Dampening机制,将这种频繁抖动的路由有条件的加以抑制。
· 增强了路由的稳定性,但不牺牲表现良好的( well - behaved )路由的收敛时间。
·BGP默认不启用Dampening,需要手一启用。
·Dampening仅对 EBGP邻居 传来的路由起效。
·Dampening的原理:
当在路由器上启用Dampening后,如果有一条路由up->down,路由器会对这条路由记录一个惩罚值,每down一次,惩罚值加1000,当惩罚值达到start suppress(开始 抑制 )值时,这条频繁抖动的路由被抑制。一条被 抑制的路由不会被使用,也不会传递。
Dampening 为每一条前缀维护了一个路由抖动的历史记录。
Dampening 算法包含以下几个参数:
- 历史记录――――当一条路由 flaping 后,改路由就会被分配一个惩罚值,并且它的惩罚状态被设置为 history 。
- 惩罚值( penalty )――――路由每 flaping 一次,这个惩罚值就会增加。默认的路由 flaping 惩罚值为 1000 。如果只有路由属性发生了变化,那么惩罚值为 500 。这个值是硬件编码的。
- 抑制门限( suppress limit )――――如果惩罚值超过了抑制门限,改路由将被惩罚或 dampen 。路由状态将由 history 转变为 damp 状态。默认值的抑制门限是 2000 ,它可以被设置。
- 惩罚状态( damp state )――――当路由处于惩罚状态时,路由器在最佳路径选择中将不考虑这条路径,因此也不会把这条前缀通告给它的对等体。
- 半衰期( half life )――――在一半的生命周期的时间内,路由的惩罚值将被减少,半衰期的缺省值是 15 分钟。 路由的惩罚值每 5 秒钟减少一次 。半衰期的值可以被设置。
- 重用门限( reuse limit )――――路由的惩罚值不断的递减。当惩罚值降到重用门限以下时,改路由将不再被抑制。缺省的重用门限为 750 。路由器每 10 秒钟检查一次那些不需要被抑制的前缀。重用门限时可以被配置的。当惩罚值达到了重用门限的一半时,这条前缀的历史记录( history )将被清除,以便更有效率的使用内存。
- 最大抑制门限 / 最大抑制时间――――如果路由在短时间内表现出极端的不稳定性,然后又稳定下来,那么累计的惩罚值可能会导致这条路由在过长的时间里一直处于惩罚状态。这就是设置最大抑制门限的基本目的。如果路由表现出连续的不稳定性,那么惩罚值就停留在它的上限上,使得路由保持在惩罚状态。最大抑制门限是用公式计算出来的。最大抑制时间为一条路由停留在惩罚状态的最长时间。默认为 60 分钟(半衰期的 4 倍)可以配置。
- 最大抑制门限=重用门限× 2 (最大抑制时间÷半衰期) 由于最大抑制门限为公式算出来的,所以有可能最大抑制门限≤抑制门限,当这种情况发生时, dampening 的设置是没有效果的。如重用门限= 750 ,抑制门限= 3000 ,半衰期= 30 分钟,最大抑制时间= 60 分钟。按照这样的配置,算出来的最大抑制门限为 3000 ,与抑制门限一样,因为必须超过抑制门限,才能对路由进行 dampening ,所以这时 dampening 的设置没有效果。
被抑制的路由不会传给本地,也不会传给其他EBGP邻居
·Half-life Time : 15 m 半衰期(一个半衰期降为原来的一半)
·Reuse : 750 降到这个值以下,重新开始启用路由
·Start Suppress : 2000 升到这个值以上,开始抑制
·Max Suppress Time : 60 m (4×15) 最大抑制时间
R1:
router bgp 1
bgp dampening //对所有从EBGP收到的路由启用Dampening
或bgp dampening 15 750 2000 60 //可这样修改默认参数,惩罚值不能更改
show ip bgp 1.1.1.0/24 //可查Dampening明细
1, ( suppressed due to dampening )
12.1.1.1 from 12.1.1.1 (1.1.1.1)
Origin IGP, metric 0, localpref 100, valid, external
Dampinfo: penalty , flapped 3 times in 00:11:40, reuse in 00:03:49
·正在翻动的路由会打上 h
·被惩罚的路由前面会打上 d
* 1.1.1.0/24 (打d的路由,不会进入本地路由表,也不会传给其他BGP邻居)
clear ip bgp dampening //本命令主动清除惩罚值
还可针对一个路由单独做dampening,针对一个路由单独做了,就不要再在全局下做
R2:
ip prefix-list 1 permit 1.1.1.0/24
route-map DAMP
match ip address prefix-list 1
set dampening 15 750 2000 60
router bgp 2
bgp dampening route-map DAMP 在进程下调用
本命令用来限制路由器最多只能从邻居处接收多少条路由,如果超过,则断开邻居关系。
neighbor 1.1.1.1 maximum-prefix 10 (1)
neighbor 1.1.1.1 maximum-prefix 10 80 (2)
neighbor 1.1.1.1 maximum-prefix 10 80 warning-only (3)
neighbor 1.1.1.1 maximum-prefix 10 80 restart 20 (4)
10后面跟的数字是百分数,默认值为 (1)针对Neighbor 1.1.1.1传过来的BGP路由,
如果>7条,则报警;如果>10条,则断开BGP连接。Idle(PfxCt) 一旦断开,就无法再建邻居,必须手工清
(2)如果>8条,则报警;如果>10条,则断开BGP连接。
(3)如果>8条,则报警;如果>10条,也只报警,不断开BGP连接。
(4)如果>8条,则报警;如果>10条,则断开BGP连接。
20分钟后重新连接,如果≤10条,则连接;如果仍然>10条,还是断开,(Neighbor会Up,然后Down).
AS bgp maxas-limit {1-2000} // 限制路由器只接受 as-path 属性里最多有几个 AS 号的路由更新条目。
neighbor 1.1.1.1 advertise-map AAA exist-map BBB
当 MAP BBB 里面匹配的路由存在的话向邻居 1.1.1.1 通告 MAP AAA 里面匹配的路由。
neighbor 1.1.1.1 advertise-map AAA non-exist-map CCC
当 MAP CCC 里面匹配的路由不存在的话向邻居 1.1.1.1 通告 MAP AAA 里面匹配的路由。
正则表达式:一种用来做匹配的工具,可用来匹配字符串,在BGP中可用来按AS号进行路由过滤,控制路由器只接受某些特定的AS传来的路由。
常用的通配符:
^ : 代表路径列表(字符串)的开头
$ : 代表路径列表(字符串)的结尾
_ : 代表一个符号(只能是空格/逗号/左括号/右括号)
. : 代表任何一个字符
* : 星号前的字符可重复0次或多次
例子:
100 : 只要AS中包括100都匹配
_100_ : 所有经过AS100的路由
_100$ : 起源于AS100的路由
^100_ : 进入本AS之前的AS必须是100
^100$ : 起源于AS100,并直接传入本AS
100$ : 起源的AS号其最后三位一定是100,例如:100,1100,2100都可以
.* : 所有AS
R1#show ip bgp regexp ^23$
例:如下图所示,要求R3只接收起源于AS2的路由,用正则表达式实现
R3:
ip as-path access-list 1 permit _2$ //在列表的最后也有默认的deny any
router bgp 3
neighbor 13.1.1.1 filter-list 1 in
也可以使用route-map来匹配出路由单独做处理
R3:
ip as-path access-list 1 permit _4$
route-map AS
match as-path 1
set weight 200
route-map AS 20
router bgp 3
neighbor 13.1.1.1 route-map AS in
BGP BGP 有多种过滤方法:
A . neighbor 1.1.1.1 prefix-list 1 {in|out}
用前缀列表来过滤,这个是 BGP 的标准过滤方法,可以用 in 和 out 方向
B . neighbor 1.1.1.1 distribute-list access-list-number {in|out}
用访问控制列表来过滤,支持扩展访问控制列表。建议用 prefix-list 来过滤。
C . neighbor 1.1.1.1 route-map XX {in|out}
用 route-map 来过滤,一般用在前缀有属性改变的时候。
D . neighbor 1.1.1.1 filter-list as-path-access-list-number {in|out}
用 as-path-access-list 所定义的正则表达式表示的 AS-path 来过滤.