本文转自http://cunshen.cnblogs.com/archive/2006/02/11/149553.html,作者:cunshen ,转载至此仅为方便学习参考。
BGP
为什么使用BGP
BGP是可靠的,基于TCP(Port Numer 179)进行建立和维护连接,并且具有并使用TCP的滑动窗口的机制来更新路由表,可以支持一次性的大量路由条目的更新. BGP是增量更新,同时也是触发更新;周期性的发送Keepalive 信息来验证TCP连接是否正常,以确保对方的路由器状态是正常的。
PS:EIGRP(使用IPV4协议号89)和OSPF-V2(使用IPV4协议号88)使用One-One 窗口机制,OSPF一次更新100条路由。
BGP的使用原则
1. 多条路径时,BGP Speaker只选最优的给自己使用
2. BGP Speaker只把自己的路由通告给邻居
3. 从EBGP获得的路由会向它所有BGP 邻居通告(EBGP/IBGP)
BGP Speaker从IBGP获得的路由不会通告给它的IBGP邻居(BGP 的水平分割)IGP是基于端口的水平分割;而IBGP是基于邻居的水平分割。水平分割的作用是避免产生路由环路。
4. BGP Speaker从IBGP获得的路由是否通告给它的EBGP邻居要服从IGP和BGP是否同步来决定
5. 邻居关系一建立,BGP Speaker就把自己所有的BGP最优路由通告给新的邻居
BGP邻居协商过程(4种Message)
1. Open (code 1):用于建立连接,包含版本号(如BGP3/BGP4)Hold Time=180s(是一个协商的过程,以较小的Hold Time为准),Router-ID(OSPF和BGP可以手动配置),AS号(范围从1~65535,其中64512~65535 的AS编号范围留作私有);
2. KeepAlives(code 4):周期发送用于维护连接检查路径(这个包是不可靠的),T=Hold Time/3, Hold Time=0 => No KeepAlive.,keepalive 是个19 字节周期发送的BGP 消息头标,没有数据域。
3. Update(code 2):消息包含了三个组件:网络层可达性消息(NLRI)、路径属性和被撤销的路由。包括到达目的网络的路径和属性,更新路由信息用,一次更新只有一条路径,但可以有多条网络。Update可以删除(宣告不可达)和增加(宣告可达)路由.其内容是前缀的长度。
4. Notification(code 3):网络中出现错误(Error),检测到后断开连接并发送通知给对方。
5.Route-Reflesh message:一个可选的message (negotiated during capability advertisement) that is sent to request dynamic BGP route updates from the Adj-RIB-Out table of a remote BGP speaker
PS :BG Ptime
在BGP路由配置模式下可以配置全局的BGP timer :timers bgp 70 210
对于特定的neighbor可以使用特定的 BGP timer:neighbor 172.17.1.2 timers 80 240
过程:Idel,connect,open sent,open confirm,establish。
BGP邻居建立会话的5种状态:
1. Idle:查找路由表,该过程BGP对它的资源进行初始化,复位一个连接重试计时器,发起一条TCP 连接,并开始倾听远程对等体所发起的连接。
2. Connect:找到路由表后进行TCP三次握手,TCP 连接成功,则转到OpenSent状态,TCP连接失败,则转到active 状态,将尝试再次连接。
3. Open Sent:握上手后发送Open message消息,等待其对等体发送打开消息,如果出错,则发送一条出错消息并退回空闲状态,如果无错,则开始发送Keepalive 并复位keepalive 计时器。
4. Open Confirm:收到对方发来的Open消息,如果收到keepalive 消息,BGP 就进入established状态,邻居关系协商完成;如果系统收到一条更新或keepalive 消息,它将重新启动保持计时器;如果收到Notification消息,BGP 就退回到空闲状态。
5. Established:会话建立,邻居关系协商过程最终状态;这时BGP将开始与它的对等体交换路由更新数据包。
PS: Active状态:当路由器发送出OPEN包给邻居等待回应,如果长时间未接收到回应则超时,超时后状态更改为Idle,试图发起TCP连接获得对等体,成功转到Open Sent状态,连接重试计时器超时,退回连接状态。,这是由于TCP链路上出现了问题所致。??
产生问题的原因主要有:
1. Neighbor命令后面的ip-address配置有错;
2. 没有打上Neighbor命令(两边都要)
3. 更新源错误,或者更新源不可达。
Debug信息:
Aspen#
18:24:33: BGP: 192.168.1.221 went from Idle to Active
18:24:41: BGP: 192.168.1.221 went from Active to OpenSent
18:24:42: BGP: 192.168.1.221 went from OpenSent to OpenConfirm
18:24:42: BGP: 192.168.1.221 went from OpenConfirm to Established
18:24:43: BGP: 192.168.1.221 computing updates, neighbor version 0, table version
n 1, starting at 0.0.0.0
18:24:43: BGP: 192.168.1.221 update run completed, ran for 0ms, neighbor version
0, start version 1, throttled to 1, check point net 0.0.0.0
BGP Input Events
BGP的3个数据库
邻居表、BGP转发表(也叫转发库)、IP路由表。
BGP同步和黑洞问题
BGP 路由器不应该将从其内部BGP 邻居处学到的目的地网络通告给其外部邻居路由器,除非这些目的地网络是通过IGP 可达的。不同步的时候,路由表里面显示的是非最优(①下一跳是否可达②同步原则是否满足),同步默认是打开的,全互连时(用于IBGP)需要关闭同步,命令是:Router(config-router)#no synchronization
BGP 路由进程
从对等体处收到的路由->输入策略引擎->路由判定过程(BGP 表)->路由器所用的路由(IP 路由表)->输出策略引擎->通告给对等体的路由
BGP的下一跳跳属性
1. 在多路广播网络中,其下一条属性不变
如图:B 通过EBGP通告网络172.30.0.0 给A而不改变其下一跳属性 10.10.10.2,这种行为防止了一个不必要的Hop,因为他们都同在一个多路广播网络里面。如果改变了其下一跳属性为10.10.10.1,当AS 65000作为一个Transit AS的时候, AS 64520的EBGP Router就不是以最优的路径通过AS 65000。
PS:BGP是一种AS-by-AS的路由协议,它的下一跳指的是下一个AS.而不是下一个Router
1. 从EBGP学习到的路由,其下一跳属性不变,可以手动做next-hop-self
2. 在IBGP关系中,下一跳地址,就是通告该路由的IBGP 的更新源。???还是Router-id???
jeans_young:
next_hop的三个规则是这样的:
a.如果是由EBGP peer通告的BGP update报文,那么next_hop就是AS外这个EBGP peer的IP地址。(实际上,是与本AS直连的接口IP地址)
b. 假如BGP update报文是由IBGP peer通告的,那么next_hop就是这个IBGP peer发出更新报文的接口IP地址
c.如果update 报文最开始是由EBGP peer通告,但是是从本AS内的边界路由器(也就是IBGP peer),那么next_hop是EBGP peer的通告出更新的接口IP地址,而不是本AS的这个IBGP peer。
ps:其实,前两条规则,比较容易理解,我们可以这样记忆前两条:谁通告的,那么下一跳就是它。主要是第三条有点特殊。但是只要我们把BGP协议本身的起源想一想就容易理解了。BGP是对于大型互联网的一个路由协议。它其实我们应该把它理解成路径向量协议。也就是说它的视角是AS,而不是单个的router。BGP是宏观视角,IGP则是微观视角。所以,像第三种情况,我们要把视角上升到一个更高的高度——从AS来看。那么就容易理解了。既然是IBGP peer转发通告EBGP peer发来的路由,那么得追根溯源。最终追到EBGP peer。所以它才是真正的下一跳。
这里,我们会发现一个问题,就是假如这个边界路由器没有告诉本AS的其它路由器到这个EBGP peer怎么走,那么这样路由不可达就会导致数据包被丢弃。所以引入了next_hop_self机制,配置在边界路由器上,使得IBGP peer要发路由更新给EBGP peer的时候,强制从自己这里走,因为对于边界路由器来讲,他是知道怎么到达EBGP peer的。这个其实有点类似于代理的概念。比如proxy ARP。就是把自己的MAC地址通告给ARP请求者,而不是把ARP请求的真正目的MAC回送回去。目的就是代理。
BGP属性
①公认属性(Must be recognized by all compliant BGP implementations Are propagated to other neighbors)
②Well-known mandatory attributes(Must be present in all update messages)
③Well-known discretionary attributes(May be present in update messages)
④可选(Recognized by some implementations (could be private), expected not to be recognized by everyone ,Recognized optional attributes are propagated to other neighbors based on their meaning )
⑤可选传递属性(If not recognized, are marked as partial and
propagated to other neighbors )
⑥可选不可传递属性(Discarded if not recognized)
公认必选:ORIGIN/AS_PATH/NEXT_HOP
公认自选:LOCAL_PREF/ATOMIC_AFFREGATE
任选可透明传递:AGGREGATOR/COMMUNITY
任选非可透明传递:MED/ORIGINATOR_ID/CLUSTER_LIST
AS-path (prepending):BGP中用于检测环路,当一个AS-PATH中有两个相同的AS号说明有环路产生,如果自己的AS出现在某接收到的路由AS-PATH中,?接收吗?是一个有序列表。
Next-hop:详见上方。
MED:又叫BGP的metrics值(没有MED的路由->MED=0;缺少MED的路由,将成为最先优选的路由),作用是影响邻居AS的路由选择。在有多出口的本AS中,决定邻居AS更优先从哪个出口进入本AS,默认值是0,值越小优先级越高。MED仅向EBGP邻居发送。它是可选的、非传递属性。bgp bestpath missing-as-worst命令修改cisco ios对med的行为,使得和最新的ietf标准(丢失MED->将MED设置成无穷大;缺少MED的路由,将成为最后优选的路由)一致
如果没有启用bgp deterministic-med,接收到的路由的顺序可能影响基于med的最有路径选择,当从多个as收到同一条路由,而且具有完全一样的路径长度和不同的med,就会发生下面的情况:
A) ASPATH 1, MED 100, internal, igp metric to NEXT_HOP 10
B) ASPATH 2, MED 150, internal, igp metric to NEXT_HOP 5
C) ASPATH 1, MED 200, external
在没有配置bgp deterministic-med的路由会优选B(较低的IGP metric),接着是C(EBGP>IBGP),而C的MED值高于A
在启用bgp deterministic-med的Router,将清除对基于MED最优路径选择的临时依赖,它可以确保满足MED的原始要求,来控制进入本AS的流量的选择,会对进入被AS的所有路由进行med比较,最后选择有最小med值的A是最优路径,但是如果Router配置了bgp always-compare-med,将总是采用BGP MED 判断。
Weight(Cisco Only):权重,(范围0 到 65,535)weight是CISCO私有的参数,路由器配置了权重后在本地有效,缺省情况下,从对等学习到的所有路由的Weight都是0,由本Router产生的路由的Weight都是32768。作用是影响路由选择,值越大优先级越高。不向BGP邻居发送,仅限本地路由器,
neighbor {ip-address | peer-group-name} weight default-weight,将邻居发送来的路由的weight值改变
Local-preference:Local-preference是在一个多出口的as中控制流量更优先的从哪个出口出去, Local-preference的默认值是100,更改值的命令是:Router(config-router)#bgp default local-preference value 他的值越高,其优先级越大.本地优先值仅在AS内部中有效.(学习的路由影响出去的流量,公告出去的路由影响进来的流量.)
Origin:起源(也叫起点)属性。
注入BGP路由表有三种方式(来源/起源):
一种是用Network命令进行,在BGP路由表显示为i(源属性:0),另一种是再发布EGP获得的,在路由表中显示为E(源属性:1),最后一种是从IGP或静态路由再发布过来的,显示为?(源属性:2)。
Communities(团体):
扩展communities属性(AS号:AS自己定义的号码)
将他们化成10进制就是CISCO路由器对标准communities属性的表示方法。
(1).INTERNET:INTERNET团体没有一个确定的值,所有属于这个团体的路由豆芽一个缺省值,可以自由的公布属于这个团体的路由(Advertise to any peer)
(2)NO_EXPORT(4294967041或者0Xffffff01):接收到的携带该值的路由不能公布给EBGP对等体,或者如果配置了一个联盟,该路由不能在联盟范围以外公布――邻居
(3)NO_ADVERTISE(4294967042或者0Xffffff02):接收到的携带该值的路由不能公布给EBGP或者IBGP的对等体。――不广播,只留给自己,自私(Do not advertise to any peer /will go to next-hop only
(5).LOCAL_AS(4294967043或者0Xffffff03):RFC1997称这个属性为NO_EXPORT_SUBCONFED.不能将接收到的携带该值的路由公布给EBGP对等体,以及在联盟内的其他AS的对等。――本AS内
(6).None(Removes the community with: set community none)
Transit AS
Stub AS经过这个AS才能到达其它的AS。
BGP汇总(Route Aggregation)
1. BGP默认是自动汇总(主类网络)的,可以用 no auto-summary来关闭
可以用network *.*.*.* mask *.*.*.* 来手动汇总(只有在路由表里面有这些条目的时候,才可以用这条命令来实现手动汇总,而且只能用这条命令公布200条前缀)Network命令不仅宣告汇总路由,并且也将具体路由宣告出去。如果不想将具体路由宣告出去,需进行过滤(前面提到的Outbound策略)。Network命令本身不能做汇总,需要IP route命令配合。这种汇总比较麻烦,我们并不推荐。只当需要将已由IGP汇总(OSPF、EIGRP等)后的路由原封不动地发布到BGP里的情况下才使用。(自动汇总只能汇总到主类网络)
PS: Network命令是将已存在(和已由IGP汇总)的路由表宣告到BGP中。无Mask的宣告将是有类网络(A、B、C),有Mask的则是无类网络。
2. Router(config)#ip route prefix mask null0 Null 0是空端口,不是一个物理的端口,目的是告诉其它路由从我这个路由走,但具体怎么走,不是指定一个物理的端口。只是在路由表里面形成类似于已经汇总的路由,有点路由欺骗的味道,当到达本Router的数据包目的地可达的时候(有相关的路由),不会出现问题,但是,当路由不可到达的时候,所有的包将发送给NULL0口,这样可以防止DDOS攻击。
ip route 192.168.192.0 255.255.248.0 null0(在IGP表里面有的条目)
router bgp 100
network 192.168.192.0 mask 255.255.248.0(向所有建立的邻居都发送聚合路由)
3.
Router(config-router)# aggregate-address ip-address mask [summary-only] [as-set]
对BGP表中的路由器条目进行汇总,在BGP路由进程配置模式下 Aggregate-address汇总命令它是创建一个汇总的路由并进行宣告。
Summary-only参数是只宣告汇总路由,抑制具体路由(不发布具体路由)。
AS-Set参数:不同路由经过的AS可能不一样,这条命令的作用在于汇总路由知道具体路由所经过的AS的集合,不是有序的AS-PATH),以避免产生环路。
这样汇总不须人工指定空端口,系统会自动产生。
Sun#show ip bgp 192.168.192.0 255.255.248.0
BGP routing table entry for 192.168.192.0/21, version 23
Paths: (1 available, best #1)
Advertised to non peer-group peers:
192.168.1.229
300, (aggregated by 300 192.168.1.250)
192.168.1.233 from 192.168.1.233 (192.168.1.250)
Origin IGP, localpref 100, valid, external, atomic-aggregate, best, ref 2
②用aggregate-address和suppress-map过滤/抑制路由
router bgp 100
no sy
neighbor 192.168.1.253 remote-as 200
neighbor 192.168.1.246 remote-as 200
aggregate-address 192.168.192.0 255.255.248.0 suppress-map VERMONT
aggregate-address 192.168.192.0 255.255.248.0 suppress-map CALIFORNIA
aggregate-address 192.168.192.0 255.255.248.0 attribute-map ORIGIN suppress-map
VERMONT
aggregate-address 192.168.192.0 255.255.248.0 as-set summary-only advertise-map
ALLOW_ROUTE
!
ip prefix-list SUPPRESSEDROUTES seq 5 permit 192.168.192.0/22 le 24
ip prefix-list SUPPRESSEDROUTES seq 10 permit 192.168.199.0/24
access-list 1 permit 192.168.195.0 0.0.0.255(隐式拒绝all,表示对其他所有路由都不抑制)
access-list 2 deny 192.168.197.0
access-list 2 permit any
!
route-map VERMONT permit 10
match ip address 1
!
route-map CALIFORNIA permit 10
match ip address prefix-list SUPPRESSEDROUTES
!
route-map ORIGIN permit 10
set origin incomplete
!
route-map ALLOW_ROUTE permit 10
match ip address 2
在access-list中的permit表示运行被抑制的,而deny是不运行被抑制。
③用aggregate-address和attribute-map改变聚合路由的属性
例子在上方,聚合路由有一个IGP的ORIGUN属性。
④neighbor *.*.*.* distribute-list命令过滤路由
neighbor 192.168.1.249 distribute-list 1 out(阻止出站路由)(in-阻止入站路由)!
access-list 1 deny 192.168.192.0(拒绝)
access-list 1 permit any(其他的允许)
⑤用aggregate-address和advertise-map去掉community属性
例子在上方。
PS:EIGRP本地自动汇总,关掉自动汇总,show ip route后马上看到效果。
BGP默认是打开自动汇总的,如果关掉自动汇总,在发给对方的时候才看到效果,也就是给对等体发送的是汇总路由,在本地看不出,
BGP选路原则
PS:在show ip bgp *.*.*.*后面不合法的BGP路由:
1. 如果启用了BGP同步—当前IOS软件的缺省配置,路由器会忽略那些在输入show ip bgp *.*.*.*命令语句后系统输出信息中被注明“not sychronized”的路径---在IP路由表中一定会有一条内部路径(IBGP)与一个地址前缀的匹配被看作是合法路径。
2. 忽略那些下一跳不可达的路径。这就是为什么运行IGP协议非常重要,因为IGP使得与路径的相关下一跳地址可达。
3. 忽略那些从EBGP Peer得到的,本地AS号码出现在AS-PATH中的路径信息。这类路径信息在路由器入口就被拒绝,甚至还来不及按照到BGP RIB库中。同样规则可以使用与ACLS,IP Prefixs,AS路径或者团体属性列表进行判断,并拒绝,除非对等体配置了inbound soft reconfiguration命令语句
4. 如果Router启用了 Bgp bestpath enforce-first-as ,当对等体送来的更新信息中在AS序列项对等体的AS号码不在第一位,则发送一个NOTIFICATION报文并中止回话连接。
5. 忽略那些在输入show ip bgp *.*.*.*命令语句后系统输出信息中被注明“(received-only)”的路径。这条路径被路由器上实施的策略所拒绝,但仍就被保存在路由器内,因为发送这条路径信息的对等体配置了“soft reconfiguration inbound”。
6. 忽略那些下一跳度量值被标记为不可达的路径。
IOS软件BGP最优路径算法:
1.优选有最大Weight的路由
3.优选有最大LOCAL_PREF值的路由(范围 0到 4,294,967,295).
4.优选从本路由器始发的路由(包括本地network配置的重分布,或者在IGP表中已经有一些需要被配置路由聚合的地址,在BGP中用Aggregate命令配置的路由聚合,)
5.优选有最短AS_PATH的路由
A.如果配置了Bgp bestpath as-path ignore,则这个步骤被忽略
B.B.一个AS路径集被当作一个AS,无论在这个集合中有多少AS。AS路径长度中没有包括。AS_CONFED_SEQUENCE。
6.根据Origin属性.优选具有最低起源类型的路由(IGP>EG>Incomplete)
7.优选最小MED 值的路由(范围 0到4,294,967,295).
A.只有在通过两条路径得到第一个AS(对等体)是同一个AS时才进行MED比较;任何子自治域的联盟系统都会被忽略。也就是说,只有在AS序列号中第一个AS号码一致时,才进行MED比较;任何联盟AS序列号(AS_CONFED_SEQUENCE)都会被忽略。
B.如果路由器上配置了 bgp always—compare—med ,在全部的路径进行MED比较。但是这需要全体AS都同时启用这个功能,否则有可能发生路由环路。
C.如果路由器上配置了 bgp bestpath med confed ,将对所有只包括AS_CONFED_SEQUENCE的路径进行MED比较(即路径是起源于本地联盟)。
D.如果接收到的路径没有分配MED值,则将此路径分配为0,除非路由器上配置了bestpath missing—is—worst,将被看作MED值为4,294,967,295的路由将在注入到BGP路由选择表之前被改为4,294,967,294。
E.BGP明确的MED值9(详见本章后面的“BGP明确的MED”段落)也可以影响此步骤。
8.外部路由EBGP优先于联盟(confederation)外部路由优于内部路由IBGP(优选 E-BGP路由)
注意,路径中包括AS_CONFEND_SEQUENCE属性对联盟只有在本地有效,因此被看作是内部路径。无法区别外部联盟和内部联盟。
9. 优选能通过最近的IGP邻居到达的路径(优选对BGP下一跳具有最低IGP度量值的路径);
10.如果在路由器上配置了maximum—pathsN,而且从同一个对等体自治域/子自治域接收到多条外部/外部联盟的路径,则最多可以将N条最近接收到的路径加入到IP路由选择表中。这可以使得eBGP在多条路径上进行负载分担。目前N所代表的最大数目是6;当没有启用此功能时,缺省数值是1。在输入了show ip bgp x.x.x.x后系统输出信息中可以看到最早接收到的路径被标记为最优路径,在将这条最优路径转发到内部对等体之前,需要执行与next_hop_self作用相同的功能。
11.如果是external的路由,优选最老的路由(最先被学习到的路由).
A.此步骤可以将路由摆动的影响减到最小,因为新接收到的路径不会取代老的,即使这条新接收的路径是通过下面提及到的额外路径选择标准来进行选择的。这使得只在iBGP路径下应用额外的选择步骤更有意义。
B.此步骤可以被bgp bestpath compare_routerid命令语句所关闭。
C.如果路由器标志是一样的,此步骤可以被屏蔽,因为这说明路由器正在从自己那里接收路由。
D.如果当前没有最优路由器,此步骤可以被屏蔽。当提供某个路径的对等体路由器宏机,就会发生丢失
当前最优路径的情况。
12.如果在同一时间学习到多条到同一目的地的路由,优选最小BGP-router-ID的路由,注意,如果一个路径包括路由反射器属性,起始者标识将代替路由器标识在路径选择过程中起作用。
12.如果路由从路由反射器上学习到 ,优选最小Cluster-ID(BGP_ID of the route reflector)长度的路由,而且它运行客户机和其他反射器族中的RR/Clients 之间做对等连接,在这种情况下,路由器必须知道BGP协议中的RR的具体配置。
13.优选具有最低对等体地址接收到的路径。这个地址是在BGP对等体上配置并使用的地址,这个地址是本地对等体路由器在其上配置TCP邻居并与远端对等体建立连接时采用的地址。
step12的翻译是这样的:如果从相同的主机收到路径,不论它是对等体还是路由反射器,选择拥有最低对等体IP地址(直连接口的地址或者如果没有直连的话,最近间接相连的接口的地址)的邻居学来的路径。
就像这个图的情况:路由器ABCD处在同一个AS中,A到达D穿过了一个网云,路由器A从路由器D收到两条到达它的路由。如何选择呢。按step12的意思应该是选择路径A。这是我的理解。大家讨论下。
AS-Path/Prefix-List/Outbound/Route-map过滤
限制从邻居收到路由Prefix的数量
Neighbor *.*.*.* maximum-prefix threshold-value [warning-only]:限制从一个邻居接收前缀的数量,[warning-only]参数表示当邻居公布的前缀超过了最大值的90%,Router就生成一个日志消息。
限制从邻居收到路由as路径长度
(1) as路径过滤(filter-list/ip as-path access-list 1 permit …)
(2) Router bgp 109
Neighbor 192.168.1.1 remote-as 65534
Neighbor 192.168.1.1 maxas-limit 10
所有接收到的地址前缀都在BGP 路由表里,但是只有那些as路径长度低于或者等于10的地址前缀才可以进入BGP路由选择处理进程。
路由反射器(Cluster-id)
#路由反射器不改变客户传来的路由的属性
#RR和它的client 就形成一个Cluster,如果AS中有多个RP及其相应的Client,就可以通过不同的Cluster-ID 来区分,对于Cluster内部的Client来说,它不需要FULL-MESHed,并且Client 只与和它位于同一Cluster内部的RP向连接即可,它不会去Cluster外部的BGP Speaker 建立Peer关系。(RFC1966)
#RR防止环路的机制:两个属性originaor_id,包含了始发这条路由的路由器的route-id,因此RR不会将此路由又重新发回给源,如果发起者收到一个带有自己的RID的更新消息,它会不理睬该消息;RR有一个单点故障问题,如果RR挂掉,则client就会丢失他们唯一的NLRI来源,这样就可以做一个双RR备份,此时cluster-list(是一个任选非传递属性,当一个RR将一条路由从一个client反射到一个non-client,它将它的cluster-id加到cluster-list上,如果cluster-list是空的,rr就生成一个,其包含RR的cluster-id(在最新版本的IOS里面,cluster-id在配置RR的时候自动生成),当RR收到一个更新消息的时候,他检查cluster-list,如果在cluster-list里面看到自己的cluster-id值,就不会接收这条路由。????)
可以避免环路,
(1)两个RR配置相同的cluster-id
1.在client1上有一条1.1.1.0的路由,它将这条路由传给它的两个RR(RR1/RR2),RR1和RR2都接收这条路由,因为路由反射器的性质打破了IBGP的水平分割的原则,两个RR互相把这条路由传给对方和另外的客户端,这时候,他们互相在cluster-list里面看到了自己的cluster-id,他们就不接收这条路由(不放进BGP database),所以在RR1/RR2看到的这条路由只有从client1传来的。在client2/3上看到分别从RR1/RR2收到这条路由,但是优选从RR1收到的(我觉得这里面又包含先从谁那里先收到这条路由的问题)
2.在RR1上有一条2.2.2.0的路由,这时候RR1将这条路由传给了RR2和它的3个client,RR2接收这条路由并且把他÷他们传给他的client,这时候3个client同时从RR1和RR2收到这条路由,它在路由的cluster-list里面看到两者有相同的cluster-id,他们优选从RR1收到的路由,由于RR的client就是普通的IBGP路由器,存在水平分割的原则,他们就不会把这条路由传给其他的IBGP邻居。
PS :在Rr的client上的路由里面才看到cluster-list.
在as内部,不改变BGP的下一条属性,show ip b和show ip b *.*.*.*的内容不一样,后者可以看到路由的详细情况。
r1#sho ip b 22.22.22.0
BGP routing table entry for 22.22.22.0/24, version 2
Paths: (2 available, best #2, table Default-IP-Routing-Table)
Not advertised to any peer
Local
2.2.2.2 (metric 65) from 3.3.3.3 (3.3.3.3)
Origin IGP, metric 0, localpref 100, valid, internal
Originator: 22.22.22.22, Cluster list: 0.0.0.1
Local
2.2.2.2 (metric 65) from 2.2.2.2 (22.22.22.22)
Origin IGP, metric 0, localpref 100, valid, internal, best
r1#sh ip b 44.44.44.0
BGP routing table entry for 44.44.44.0/24, version 3
Paths: (2 available, best #2, table Default-IP-Routing-Table)
Not advertised to any peer
Local
4.4.4.4 (metric 129) from 3.3.3.3 (3.3.3.3)
Origin IGP, metric 0, localpref 100, valid, internal
Originator: 44.44.44.44, Cluster list: 0.0.0.1
Local
4.4.4.4 (metric 129) from 2.2.2.2 (22.22.22.22)
Origin IGP, metric 0, localpref 100, valid, internal, best
Originator: 44.44.44.44, Cluster list: 0.0.0.1
----------------------------------------------------------------------------------------------------------------
r2#sho ip b 22.22.22.0
BGP routing table entry for 22.22.22.0/24, version 2
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Advertised to non peer-group peers:
1.1.1.1 3.3.3.3 4.4.4.4
Local
0.0.0.0 from 0.0.0.0 (22.22.22.22)
Origin IGP, metric 0, localpref 100, weight 32768, valid, sourced, local, best
r2# sho ip b 44.44.44.0
BGP routing table entry for 44.44.44.0/24, version 3
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Advertised to non peer-group peers:
1.1.1.1 3.3.3.3
Local, (Received from a RR-client)
4.4.4.4 (metric 65) from 4.4.4.4 (44.44.44.44)
Origin IGP, metric 0, localpref 100, valid, internal, best
----------------------------------------------------------------------------------------------------------------
r3#sho ip b 22.22.22.0
BGP routing table entry for 22.22.22.0/24, version 2
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Advertised to non peer-group peers:
1.1.1.1 4.4.4.4
Local
2.2.2.2 (metric 11) from 2.2.2.2 (22.22.22.22)
Origin IGP, metric 0, localpref 100, valid, internal, best
r3#sho ip b 44.44.44.0
BGP routing table entry for 44.44.44.0/24, version 3
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Advertised to non peer-group peers:
1.1.1.1 2.2.2.2
Local, (Received from a RR-client)
4.4.4.4 (metric 75) from 4.4.4.4 (44.44.44.44)
Origin IGP, metric 0, localpref 100, valid, internal, best
----------------------------------------------------------------------------------------------------------------
r4#sho ip b 22.22.22.0
BGP routing table entry for 22.22.22.0/24, version 3
Paths: (2 available, best #2, table Default-IP-Routing-Table)
Not advertised to any peer
Local
2.2.2.2 (metric 65) from 3.3.3.3 (3.3.3.3)
Origin IGP, metric 0, localpref 100, valid, internal
Originator: 22.22.22.22, Cluster list: 0.0.0.1
Local
2.2.2.2 (metric 65) from 2.2.2.2 (22.22.22.22)
Origin IGP, metric 0, localpref 100, valid, internal, best
r4#sho ip b 44.44.44.0
BGP routing table entry for 44.44.44.0/24, version 2
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Advertised to non peer-group peers:
2.2.2.2 3.3.3.3
Local
0.0.0.0 from 0.0.0.0 (44.44.44.44)
Origin IGP, metric 0, localpref 100, weight 32768, valid, sourced, local, best
(1)两个RR配置不同的cluster-id
1.在client1上有一条1.1.1.0的路由,它将这条路由传给它的两个RR(RR1/RR2),RR1和RR2都接收这条路由,因为路由反射器的性质打破了IBGP的水平分割的原则,两个RR互相把这条路由传给对方和clients,根据bgp的选路原则,他们会优选有较小IGP metric的路由,这时候,就是选择从client1接收的路由。
2.在RR1上有一条2.2.2.0的路由,这时候RR1将这条路由传给了RR2和它的3个client,因为在这条路由的cluster-list里的cluster-id不一样,他们就互相都接收了这条路由,因为路由反射器的性质打破了IBGP的水平分割的原则,他们又把这条路由再传给clients,而3个client在接收这条路由的同时,由于RR的client就是普通的IBGP路由器,存在水平分割的原则,他们就不会把这条路由传给其他的IBGP邻居,但是他们收到了两次这条路由信息的更新,根据bgp的选路原则,他们会优选有较小IGP metric的路由,这时候,就是选择从RR1接收的路由。
(1)如果路由是从Non-client的IBGP学习到的,只将她反射给client。
(2)如果路由是从client学习到的,将它反射给除了发起该路由的client以外的所有non-clent及其client
(3)如果路由是从EBGP对等体学习到的,将它反射给所有的client和non-client。
Confederations(联盟)
由子AS组成的AS,
联盟AS9184是由AS65510/AS65520/AS65530组成的。
AS_path两类属性:as_sequence和as_set,联盟为AS_path增加了两个属性类型。AS_CONFED_SEQUENCE和AS_CONFED_SET
AS_CONFED_SEQUENCE:由属于本地联盟中的自治系统的AS号组成的有序列表,在联盟内部防止路由环路。
AS_CONFED_SET:由属于本地联盟中的自治系统的AS号组成的无序列表,在联盟内部防止在做路由聚合的时候,由于丢失AS信息而引起路由环路。
在联盟中,到联盟外部的EBGP路由优先与到AS成员的EBGP路由,到AS成员的EBGP路由优于IBGP路由,联盟和AS之间还有一个不同:例如NEXT_HOP/MED,可以不加修改地公布给联盟的其他AS成员中的EBGP对端,而且也可以发送LOCAL_PREF.
在RR环境下,只要RR支持路由反射器功能就可以,在联盟环境下,所有的Router都要支持这一特性,因为所有Router都必须识别AS_PATH中的AS_CONFED_SEQUENCE和AS_CONFED_SET类别,因为向联盟外面公布路由的时候,要把这些AS_PATH类去掉,因此其他AS的路由器不要支持联盟。
当向联盟外部的EBGP对等体发送update消息的时候,会将AS_CONFED_SEQUENCE和AS_CONFED_SET
从AS_PATH属性中去掉,将联盟as号加到AS_PATH中,因为这一点,外部的对等体就把联盟看作是一个AS而不是一个自治系统的集合。
PS: AS-Path/AS-Set的区别:AS-Path(有序列表)/AS-Set(无序集合)
Sugarbush#show ip bgp
BGP table version is 19, local router ID is 172.20.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
Network Next Hop Metric LocPrf Weight Path
*> 192.168.192.0/21 192.168.1.230 0 400 300 i
*> 192.168.192.0/21 192.168.1.233 0 300 {200,100,500} ?
Peer Group(对等体组)
如果在某一Router的旁边有一些路由器,它们都有一致的策略,就可以指定一个邻居组(对等组)
创建组的命令:Router(config-router)# neighbor [peer-group-name] peer-group
添加成员的命令:Router(config-router)# neighbor [ip-address]peer-group[peer-group-name]
这样的好处是简化配置。
BGP Route Damping(BGP路由抑制)
bgp dampening [[route-map map-name] [half-life-time reuse-value suppress-value
maximum-suppress-time]]
Penalty:默认值是1000 per flap
Suppress-value:范围1~20000;默认值是2000
Reuse-value:范围1~2000;默认值是750
Half-life:范围1~45min;默认值是15 minutes
Maximum-suppress-time:范围1~255;默认值是60 minutes, or 4 times the half-life
例子:对172.16.220.0/20做抑制
ROUTER C
router ospf 10
redistribute bgp 1 subnets
network 192.68.0.0 0.0.255.255 area 0
router bgp 1
bgp dampening route-map SELECTIVE_DAMPENING
network 192.68.11.0
neighbor 172.16.20.2 remote-as 3
neighbor 192.68.6.1 remote-as 1
no auto-summary
access-list 1 permit 172.16.220.0 0.0.0.255
route-map SELECTIVE_DAMPENING permit 10
match ip address 1
set dampening 20 950 2500 80
route-map SELECTIVE_DAMPENING permit 20
改进BGP的聚合
BGP的邻居认证
#bgp的认证仅仅限制于邻居之间.
例如:\
nei 5.5.5.5 password cisco(默认就是md5认证)
调用认证功能需要CISCO ios软件在TCP连接中每发送一个TCP字段就生成并校验MD5摘要,如果调用了认证,但是其中一个字段没有通过认证,会向console口发送一个message
如果只是在一边配置了认证:
%TCP-6-BADAUTH: No MD5 digest from [peer's IP address]:11003 to [local router's IP address]:179
如果两边的认证密码不匹配:
%TCP-6-BADAUTH: Invalid MD5 digest from [peer's IP address]:11004 to [local router's IP address]:179
正则表达式
. 任意单一字符,包括空格,句号 .标志匹配任意一个字符,包括空格,如:当我们使用permit .*的时候,表示匹配所有的路由。
[] 在方括弧中罗列的任何字符
[^] 除了在方括弧中罗列字符外任何字符
- 在由连字符所分隔的两个字符之间的任意字符,表示两个AS之间的连接符,如:permit ^254_253_252$, 表示起源于252,经过253和254的路由条目
? 字符或模式出现0次或1次,标志匹配前面的一个字符,注意:只是匹配一个字符。?允许前面的字符出现一次或者是空。如:permit 254[0-9]?$,那么就是只匹配起源于AS 254/2540---2549的路由,注意?在CISCO路由器上用CTRL-V来替代。
* 字符或模式出现0次或多次,标志匹配前面的一个字符,注意,和?不同的是,*允许前面的字符出现许多次或者是空,而?只允许匹配出现一次或者是空。如:permit 254[0-9]*$,那么就是只匹配起源于AS 254/2540---25499999........的路由 如果是permit 254[5-9],那么就是匹配起源自AS 254/2545-2549/25455-25459/254555-
254599............
+ 字符或模式出现1次或多次,+和*的区别就是*可以匹配空,但是+必须匹配一个值才行如permit ^254+$,表示起源于254或者2544/25444........而permit ^254*$则可以匹配起源于AS 25/254/25444。
^ 一行的开始,标志一个表达式的开始,如果不用这个字符,那么默认就没有开始的限制了。如:当使用permit ^254,那么表示的意思就是和本地相连的AS是254传过来的路由全部都允许了。如果使用简单的permit 254,那么就是只要是经过了AS 254的路由,全部都被允许了,其实和permit _254_表达的意思相同。
$ 一行的结束,标志一个表达式的结束,如果不用这个字符,那么默认就没有结束的限制了。如:当使用了permit 254$,那么表示的意思就是起源于AS 254的路由全部被接受,如果permit 254那么见上面的解释。
| 由元字符特殊字符分隔的字之一
_ 一个逗号,行的开始,行的结束或空格
BGP的其他性质
1.BGP和ISIS一样以链路为边界。
2.BGP不支持负载均衡,因为通过它复杂的选路原则一定可以决定一条最优的路由。
3.BGP版本向后兼容,如果发现对方是更低的版本,将会降低自己的版本来与之兼容,当前的版本是BGP V4。
4.BGP Peer=BGP Speaker=BGP Neighbor
5. 在本AS内,BGP的AS-PATH属性不变,在离开本AS的时候,会在AS-PATH前面附加上本AS的AS 号。
6.一个Router 只能运行一个BGP实例(不会把一个路由器放到多个BGP(AS)中)。但是可以采用local-as这来使Router可以同时有2个asn(但是实际上只用一个),这是对于Ebgp邻居而言的,如果在A(as 109)-----EBGP----B(as 159) 之间,A配置了
neighbor 145.2.2.2 local-as 210,这时候,B就会以为它正在和Asn是210的EBGP Peer建立邻居关系,A在向B通过路由更新的时候,会把路由里面的as号码改成local-as中配置的asn,在A上显示的从B上学习到的路由就是210_159,在B上显示的从A上学习到的路由就是159_210就相当于as210和as159的EBGP在通信。这在两个ISP何必的时候作为过渡策略使用,避免大面积的地址重新规划和网络环境的重新配置。
7.iBGP TTL = 255
eBGP TTL= 1
8.当重分布OSPF到BGP中的时候,或者如果存在RR ,Ospf的 router-id必须和BGP的router-id一样。
#redistribute ospf 10 match internal external 1 external 2
default-metric 2
redistribute ospf internal external 1 external 2: 必须显式的匹配internals & externals OSPF路由
default-metric 2: Assigns a metric of 2 hops in BGP to the OSPF routes
#router eigrp 100
redistribute bgp 100 route-map test
route-map test permit 10
set automatic-tag
set as-path tag
This will redistribute the BGP path and Origin code into EIGRP /... [Cisco conly]
BGP的几种管理距离
Internal BGP :200
External Border Gateway Protocol (BGP):20
Local BGP:200
Exterior Gateway Protocol (EGP):140
router bgp 200
distance bgp 20 95 200
BGP -4 Command
1.Router(config-router)#neighbor {ip-address | peer-group-name} remote-as autonomous-system
可以用IP地址或对等组名来指定,这个ip-address是对方邻居的路由更新源。EBGP(ip-address应该是与本Router直连的IP)IBGP(ip-address是对方路由器上任何一个IP地址,只要是路由可达,一般是用L0口做更新源,因为这样做可以提高BGP网络的健壮性),用Lo口做更新源一般用于IBGP中,在EBGP中使用,要满足路由可达的原则。
PS:
①两个BGP Neighbor的更新源必须匹配,不然数据包将会被丢弃。
②在EBGP中的TCP包的TTL值是1,所以有了Neighbor ip-address ebgp-multihop x(x是TTL的值) 命令。
2.Router(config-router)#neighbor {ip-address|peer-group-name} shutdown| soft-reconfiguration inbound
Shutdown:邻居关系并没有被删除,而是暂时不可用,一般用于维护和更改策略,它防止路由摆动(Route Flapping),管理shut down。
Soft-reconfiguration inbound:告诉Router存储所有从它的Neighbor更新的路由,才可以让新的inbound policy 生效而不要重新Reset BGP(会话连接仍然维持),这是条内存密集型命令。
3.clear ip bgp {* | address | peer-group-name} [soft [in | out]]
*:所有的BGP会话都将被Reset,全部BGP路由表将被丢弃,BGP会话状态更改为Idle。
Address:特定IP地址的邻居将被Reset,其BGP会话状态更改为Idle,清除从该BGP Peer 学习到的路由。邻居关系将重新建立。
Peer-group-name:指定的 BGP peer-group 将被Reset
Soft out:Router 不会丢失从Neighbor那边学习到的路由,Router重新发送所有BGP路由给Neighbor而不要Reset BGP会话(连接仍然维持),对inbound policy 无效,在做Onbound policy时,这条命令强烈建议使用。
Soft in:Routes advertised to this neighbor are not withdrawn,Router存储所有从它的Neighbor更新的路由,才可以使用存储的,未经改动的更新信息来执行新的inbound policy,而不要重新Reset BGP(会话连接仍然维持)。
下列情况下必须手动Reset 邻居关系
1.补充或者改变与BGP相关的ACLS
2.改变与BGP有关的weight
3.改变与BGP有关的distribute-list
4.改变与BGP有关的Timer
5.改变与BGP有关的Admin distance
6.改变与BGP有关的Router-map
4.建立Neighbor关系的特例(配置练习)
A以对方的LO0(2.2.2.2)口来建立邻居(在as 100中)
B以对方的直连接口(12.12.12.1)来建立邻居(在as 200中)
A:Router bgp 100
Neighbor 2.2.2.2 remote-as 200
neighbor 2.2.2.2 ebgp-multihop 2
B: Router bgp 200
Neighbor 12.12.12.1 remote-as 100
Neighbor 12.12.12.1 update-source lo0
待续…
4.r2#show ip rou
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
r2#show ip bgp
BGP table version is 13, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*>i11.11.11.0/24 1.1.1.1 0 100 0 i
*> 45.45.45.0/24 4.4.4.4 0 0 400 i
5. show ip bgp paths 显示BGP 拓扑图
和show ip bgp 显示BGP 路由表的区别?
6. 私有AS号码剥离:
RTA(config)#router bgp 1
RTA(config-router)#neighbor 172.16.20.2 2 remote-as 65001
RTA(config-router)#neighbor 192.168.6.3 remote-as 7
RTA(config-router)#neighbor 192.168.6.3 remove-private-as
1. Bgp配置缺省路由和路由聚合
① ip route 0.0.0.0 0.0.0.0 null0
router bgp 100
network 0.0.0.0(向所有建立的邻居都发送缺省路由)
② router bgp 100
neighbor *.*.*.* default-originate(只是向特定的邻居发送缺省路由,如果只想发送缺省路由,则需要做路由过滤,这条命令不需要)手动建立一条缺省路由。)
2. Neighbor *.*.*.* version :不同版本的BGP直接的手动协商。
3.