BGP<?XML:NAMESPACE PREFIX = O />

   为什么使用 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 <?XML:NAMESPACE PREFIX = ST1 />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.   在多路广播网络中,其下一条属性不变

2005551.jpg

如图: 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).NoneRemoves 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 默认是打开自动汇总的,如果关掉自动汇总,在发给对方的时候才看到效果,也就是给对等体发送的是汇总路由,在本地看不出,

2005552.jpg
 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 。这是我的理解。大家讨论下。
untitled.GIF


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 值,就不会接收这条路由。???? )

可以避免环路,

     2005553.jpg
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 *.*.*.* 的内容不一样,后者可以看到路由的详细情况。

2005554.jpg

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 接收的路由。

 

     2005555.jpg

1 )如果路由是从 Non-client IBGP 学习到的,只将她反射给 client

2 )如果路由是从 client 学习到的,将它反射给除了发起该路由的 client 以外的所有 non-clent 及其 client

3 )如果路由是从 EBGP 对等体学习到的,将它反射给所有的 client non-client

   Confederations (联盟)

  由子 AS 组成的 AS,


2005556.jpg
联盟
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 做抑制



2005557.jpg

 

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 )

2005558.jpg

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.  

 

 

1

收藏

steveguo2007

44篇文章,19W+人气,0粉丝

Ctrl+Enter 发布

发布

取消