<BGP(Border Gateway Protocol)>
该AS间路由协议就是由1989年RFC 1105首次引入的BGP,当前的BGP版本BGP-4是由1995年RFC 1771规定的.
BGP是在EGP应用的基础上发展起来的。EGP在此以前已经作为自治区域间的路由发现协议,广泛应用于NFSNET等主干网络上。但是,EGP被路由环路问题所困扰。BGP通过在路由信息中增加自治区域(AS)路径的属性,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的策略。同时,随着INTERNET的飞速发展,路由表的体积也迅速增加,自治区域间路由信息的交换量越来越大,都影响了网络的性能。BGP支持无类型的区域间路由CIDR(Classless Interdomain Routing),可以有效的减少日益增大的路由表。
·Autonomous Systems:(自治系统定义)
运行同一种选路策略,由统一管理者管理的一组网络。
RFC对AS的定义:一组被统一管理的路由器,它们使用相同的内部网关协议和统一的度量值在AS内部路由分组,并使用外部网关协议将分组路由到其他AS。
每一个自治系统都有一个AS号
·AS号由internet地址授权委员会(IANA)统一负责分配,下设三个分支局
AS号取值范围:1-65535
1-64511 (公有)
64512-65535 (私有)
电信AS号:4134 4809 网通AS号:9929 4837 中国教育网:4538
这里有一个网站,可以很好的了解BGP:http://www.cidr-report.org/as2.0/
·以下的网站可以获取到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如何转发你的数据流。
何时使用BGP:
1、AS允许数据包通过自已到达其它AS
2、AS有多条到其它自治系统的连接
3、需要对数据流进入和离开AS的方式进行控制
在处理AS之间的流量时,需要记住一个重要的法则:每个物理链路实际上代表的是两条逻辑链路,一条用于入站流量,一条用于出站流量
上图中:来自于AS的出站流量得益出默认路由,而去往用户的AS的入站流量则得益于由ISP路由宣告的路由
BGP的特性:
·BGP属于EGP,是高级DV协议,也被称为路径矢量协议,基于TCP 179端口。
·现在使用版本BGP4。
·第一次做完整更新,以后就只增量更新、触发更新
·使用keeplive消息维持邻居关系
·丰富的metric值,也叫路径属性
·被设计用于特大的网络,例如internet
·BGP的目地是提供一种域间路由选择系统,确保自主系统能够无环路的交换路由选择信息。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一致。
BGP协议的层次位置:
BGP
Socket
TCP
IP,IPX
PPP,X.24等
操作系统
硬件接口及驱动
BGP使用Socket服务建立连接,端口号为179。
四种报文:
这里,先给出BGP的消息头格式:
Marker:(16字节)鉴权信息
Length:(1字节)消息的长度
Type:(1字节)消息的类型
0------Open
1------Update
2------Notification
3------Keepalive
Open ---includes holdtime and BGP router ID,当然还有AS号。
Version Number,AS number,router ID,optional paraneters
·OPEN消息中包含以下内容:
1、版本
2、自主系统号
3、hold time 注意:这个时间是可以协商的,取两个BGP邻居中较小的保持时间。
4、BGP 路由器的 router-id,选择方法与OSPF中相同
5、可选参数
在TCP连接建立起来以后,发送的第一个消息就是Open消息,如果收到的Open消息是可接受的,就会发送一个Keepalive消息来证实Open消息,其他格式如下所示:
Veesin:1字节字段,规定发起者运行的BGP版本
My Autonomous System:2字节字段,规定发起者的AS号
Hold Time:2字节的字须,指示发送发为保持时间建议的秒数,接收较小的值或者拒绝该连接,保持时间可以是0或者至少3秒
BGP Identifier:发起者的路由器ID,Cisco路由器可以将它的路由器ID设置成任何它的环回家接口的最高IP地址或者,如果没有配置环回口,就设置成它的物理接口中最高的确IP地址
OptParmLen:一个1字节的字段,指示接下来可选参数字段的整体长度
Optional Parmeters:一个可变长度字段,包括一个可选参数列表。
Keepalive ---cisco默认每隔60S发送一次或者以已协商一致的保持时间的1/3为周斯发送Keepalive消息。hold time=180,如果协商的保持时间为0,则不发送Keepalive消息,其只有一个消息头.
Errsubcode:一个1字节,辅助错误代码
Data:依赖于不同的错误和辅助错误代码,用于诊断错误原因
错误代码表:error code
error rubcode DATA
Update ---information for one path only (could be to multiple networks)
---Includes path attributes and networks
1:Network-layer reachability information
2:Path attributes
3:withdrawn routes
·一个UPDATE 消息一次可以只通告一条路由,并携带多个属性。
一个UPDATE 消息一次也可通告多条路由,但它们的所有属性必须相同。
一个UPDATE 消息可以同时撤消多条路由。
实际上也就是说一个UPDATE中只能有一组相同的路径属性,也就是说只能有一条路径,但可以有多个目标网络号。
其的格式如下:
Unfeasible Routes Len:不可达路由长度
Withdrawn Routes:退出路由
Path Attribute Len:路径属性长度
Path Attributes:路径属性
Network Layer Reachability Information:网络可达信息
常见的属性类型:
Notification
---when error is detected
---BGP connection is closed after sent (做maximum-prefix时可看到)使用Notification消息的一个例子就是在邻居之间协商BGP版本号,建立了一个TCP连接之后,如果BGP-3发言者接收到一个指版本号为4的Open消息,则会响应一条申明不支持该版本的Notification消息,其的格式如下:
差错编码:指示差错的类型
差错子码:提供有关差错的更详细的信息
数据:可变长度字段,用来诊断差错原因
BGP的邻居关系:
BGP邻居也叫BGP对等体,分两种:
EBGP--位于当前AS之外的,属于其它AS的邻居,通常要求直连。
IBGP--位于同一个AS之内的邻居,无需彼此相连,只要它们能够彼此到达对方,完成TCP握手即可。
·建议EBPG之间用直连接口来建邻居
·建议IBGP中用环回口建邻居
·从EBGP邻居学到的路由管理距离是20
·从IBGP邻居学到的路由管理距离是200
BGP的防环机制:
·BGP's Split Horizon Rule:
IBGP:从IBGP邻居收到的路由不再传给其他的IBGP邻居。
EBGP:不接收携带本AS号的路由更新。
BGP路由黑洞问题:
·BGP路由黑洞的解决方法:
1)物理线路的Full Mesh
2)BGP重分布进IGP
3)IGP内所有路由器都运行BGP
4)MPLS/VPN
·IBGP水平分割的解决方法:
1)Full Mesh
2)BGP's Partial Mesh (路由反射器/联邦)
·如果是宣告一个主类网络,则它的掩码不会在BGP路由表中显示出来,表示默认使用主类网络的标准掩码。
BGP的邻接状态机:
1、idle 空闲--查找是否有去往邻居的路由(如没有一个邻居,则一直在这个状态,命令:neighbor xxxx remote-as x)
2、connect 连接--建立TCP三次握手
3、Active 活动--协商还未成功
4、open sent 打开发送--互发参数进行协商,也就是发送open报文(5S,如在此时间内没有收到响应,进入active状态,响应则进行open confirm)
5、open confirm 打开确认--协商取得一致(会传递路由)
6、established 建立
IDLE: State when BGP peer refuses any incoming connections.
CONNECT: State in which BGP peer is waiting for its TCPconnection to be
completed.
ACTIVE: State in which BGP peer is trying to acquire a peer by listening and
accepting TCP connection.
OPENSENT: BGP peer is waiting for OPEN message from its peer.
OPENCONFIRM: BGP peer is waiting for KEEPALIVE or NOTIFICATION
message from its peer.
ESTABLISHED: BGP peer connection is established and exchanges UPDATE,
NOTIFICATION, and KEEPALIVE messages with itspeer.
只有当连接处于建立状态时,才能交换更新、存活和通知消息
以下是BGP的有限状态机和触发状态的迁移事件:
以下的对事件的描述:
如果一直停在idle状态,则可能:
1、没有去往邻居的路由
2、neighbor命令指错了邻居的地址
如果一直停在active状态,则可能:
1、邻居没有过来的路由(如:用Lookupback还做时,没有指定updata-source)
2、邻居没有指neighbor命令
3、邻居neighbor中指的地址错误
4、两端的AS号不匹配
BGP选路策略:
属性分类
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私有技术,只具有本地意义,用于本地路由器进行选路
一条路由信息包含了一组属性,每一个属性由三个字段组成。
·属性类型
·属性长度
·属性值
以下为BGP选路原则:(BGP Select Path)
CISCO所定义的选路原则标准是11条,这里加了两条(中文的两条),共13条。所加的两条算不上标准的选路原则,只是做一个补充而已。(如果路径是内部的,同步要求打开,而没有被同步,则不选择这条路径;如果这条路由的下一跳是不可达,则不选择这条路径)
1:Prefer highest weight (local to router).
2:Prefer highest local preference (global within AS).
3:Prefer route originated by the local router (next hop = 0.0.0.0,路由器本地始发的路由优先).
4:Prefer shortest AS path.
5:Prefer lowest origin code (IGP < EGP < incomplete).
6:Prefer lowest MED (exchanged between autonomous systems).
7:Prefer EBGP path over IBGP path.
8:Prefer the path through the closest IGP neighbor.
9:如果配置了maximum-path[ibgp]n,如果存在多条等价的路径,会插入多条路径。
10:Prefer oldest route for EBGP paths.
11:Prefer the path with the lowest neighbor BGP router ID.
12:多跳路径的始发路由器ID相同,那么选择CLUSTER_LIST长度短的
13:Prefer the path with the lowest neighbor IP address.
<Weight>
·CISCO的私有属性
·该属性本地有效。只在本路由器上起作用,不能传递给任何邻居
·weight属性用来影响本路由器自已的选路
·当一个路由器学到两条相同目的地路由,它可以根据WEIGHT值决定哪一条最优
·默认值=0 如果是本地产生的路由weight值为32768
·在进行比较时,weight值越大越好
<Local_Preference>越大越好
本地优先级是公认自由决定的属性,它告诉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非空的聚合路由"不起效。
也可以针对邻居传过来的某一条路由单独设置本地优先级
<AS-Path>shortest AS-path
·BGP路由每经过一个AS,就会将这个AS号加入自已的AS-Path中。
·当一个路由器收到两条相同目的地的路由,它将选择AS路径最短的路由。
·这个属性只能在EBGP邻居之间传路由时进行改动,对IBGP邻居传来的路由改不了
·如果做了路由聚合,并加了as-set参数,聚合后继承明细路由的属性,在大括号里面的as-path在计算长度时,只算一个。在联盟内小括号里面的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的选路,直接往下继续选择最优路径。
<origin attribute>
本属性是用来说明BGP路由的起源,是如何成为BGP路由的。总共只有三个值:
IGP (i) 在BGP中用network命令宣告的路由
EGP (e) 从EGP协议重分布进BGP的中币,这个EGP指的是一种早期的协议,现已不用
Incomplete(?) 从IGP协议或者静态路由重分布进BGP的路由
这三个值有大小之分的:
i<e<? //在用来比较时,越小越优
默认每一条BGP路由都有起源属性,也可以用以下方法来改动一条路由的起源属性:
<MED>Multi-Exit Discriminator多出口鉴别属性
特点:
·当两个AS之间存在多条路径的时候才使用
·用来影响EBGP邻居,告诉自己的EBGP邻居如何选最优路由。
·metric传递不能传出AS。例:始发路由器可以将metric传给任何邻居,可以是IBGP/EBGP,但邻居收到后,不能传出邻居所在的AS。
·默认值=0,MED值越小越好
Show ip bgp 中显示的Metric值就是MED
<Community>主要用来控制路由的传播范围
社团属性,也叫共同体属性,是可选传递属性
·“可选”:意味着并不是所有的路由器都能识别这个社团属性。
·“传递”:意味着路由器即使不能识别这个属性,也能将这条路由继续传递下去。
·社团属性类似于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
internet:任意传递,也就是说可以在Internet上传递
<关于更新源>Update-Source
路由器用来和邻居建立邻居关系的地址,我们称之为更新源地址。
注意:在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
<BGP的下一跳机制>
BGP是一个AS-by-AS的路由协议,而不是一个router-by-router的路由协议。
BGP路由的下一跳并不是指下一个路由器的IP地址,而是指到达下一个AS的IP地址。
所以,默认情况下,从EBGP邻居学到的路由再向其它的IBGP邻居传递的时候,下一跳不改变
MA网络的下一跳:当把一条路由发送给EBGP邻居时,如果接收这条路由的接口与EBGP邻居的更新源地址在同一网段的时候,路由的下一跳不改变。
<Peer-Group>对等体组,类似于建立一个批处理文件
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 //调用
network---关于BGP中的宣告:
注意:本命令只会宣告路由,不会激活一个接口进入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路由失败了。
<Synchronization>同步。只针对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
BGP路由不优的2个原因:
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
清除BGP会话:
当你将一个policy应用于BGP的时候,由于BGP是不会做周期更新,所以需要手动做更新。
clear ip bgp * //来硬的,会DOWN掉邻居关系
clear ip bgp * soft //软清,不会down掉邻居关系
neighbor [ip-address] soft-reconfiguration inbound 本命令告诉BGP路由器:保存从邻居那里学到的所有路由更新,供入站策略被修改时使用。这样就无需对方重新发送信息。
<Auto-Summary>
·在开启自动汇总的情况下,当其他IGP协议重分布进BGP时,默认会进行自动汇总。其它情况下BGP不会自动汇总
1、在auto-summary情况下,将IGP重分布进BGP,不会携带原有的METRIC值,next-hop
2、在no auto-summary情况下,会携带原有的METRIC值和掩码,next-hop
router bgp 123
no auto-summary //关闭自动汇总
<Summary>aggregate聚合
1)通过Network做汇总:
方法:先为路由器配置一条静态的汇总路由,再宣告进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
2)Aggregate:
使用aggregate命令做路由聚合
第一步:要先宣告每一条明细
第二步:在BGP进程中用以下命令做聚合
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合用,对特定邻居漏过特定的明细路由。
<IGP与BGP之间的重分布>
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
<向BGP注入默认路由>
方法一:
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不行
<Reflector>路由反射器
·路由反射器就是一台路由器,可以将它的IBGP邻居指定为自已的客户端。
·路由反射器打破了IBGP的水平分割规则,它的传递规则如下:
1、从EBGP学到的一条路由,会传给client和非client端
2、从client端学到的路由,会传给其它client和非client端
3、从非客户端收到路由,会转发给客户端以及EBGP邻居,但不会转发给非客户端。
·路由反射器和其客户的集合被称为集群(cluster),每一个集群都有一个cluster-id,默认情况下路由反射器的router-id会被用做cluster-id,也可以手工指定。路由反射器所传递的每一条客户端路由都会带上这个cluster-id。
<Confederation>
联邦
·将大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号
FEATURE
<local-as>主要在过渡AS号时用
虽然local-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
<BackDoor>
·通过IGP学到某条路由,又从EBGP学到相同的路由。
由于EBGP AD=20,小于IGP的AD,所以会优先EBGP的路由,
但实际路径可能从IGP走更优。
<BGP负载均衡>
高版本的IOS即可对EBGP路由进行负载均衡,也可对IBGP路由进行负载均衡
条件是:按照BGP选路原则前八条都比不出来的情况下,多条路由才能进行负载均衡
对EBGP路由负载均衡:
R1(config-router)#maximum-paths 2
对IBGP路由负载均衡:
R1(config-router)#maximum-paths ibgp 2
<Next-hop-unchange>
将在后面的实验做出解释
<Dampening>
·为了防止路由频繁抖动。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) 最大抑制时间
<Maximum-Prefix>
本命令用来限制路由器最多只能从邻居处接收多少条路由,如果超过,则断开邻居关系。
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后面跟的数字是百分数,默认值为75%
(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里面匹配的路由。
<Regular expression_r_r>
正则表达式:一种用来做匹配的工具,可用来匹配字符串,在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
<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来过滤.