BGP实验 之☞配置IBGP与EBGP
BGP经典总结:(谢谢:
[url]http://net.chinaunix.net/1/2009/01/19/1358278.shtml[/url]
作者分享)
BGP,边界网关协议.一种应用在大型网络上的协议,主要用来控制AS间通信,具有灵活的可控性,同时也是一种复杂的协议.类似距离矢量特性,BGP是一种路径矢量协议,每个AS作为一跳.它通过TCP协议运行,使用TCP 179端口通信,可靠性由TCP进行控制,因为BGP的路由表一般来说都很大,所以使用TCP利用窗口滑动技术可以提高传输效率,这一点不同于EIGRP、OSPF这样的IGP协议,后者使用1-1的确认方式,效率低下。BGP存活消息每隔60秒发一次,保持时间180秒。
BGP必须手工指定邻接关系,BGP邻接关系分为内部邻居(处于同一AS中),内部邻居之间可以跨越多个路由器,默认TTL跳数为255,所以无需额外使用多跳属性;外部邻居(不同的AS中),一般来说外部邻居都是直连的邻居,因为这样通过直连或者静态路由就可以到达对方,如果不是直连,则需要有本地路由配合确保能够到达对方,而且必须明确设置多跳属性,因为外部BGP邻居默认跳为1跳,配置方法:neighbor ip ebgp-multihop num。
BGP定义的属性:
公认强制属性:1。AS路径 2。下一跳 3。源头 这些都是必须被传播的。
公认自由:1。本地优先级 2。原子聚合(告诉邻接AS,始发路由器对路由进行了聚合)
可选船体:1。聚合站 2。共同体
可选非传递:MED(多出口鉴别器)
CISCO私有还多了一个:权重
BGP使用AS路径属性,每个BGP路由都携带这样的路径列表,BGP拒绝列表中包含自己AS的路径,这样确保无环路。
下一跳属性:从EBGP学习到路由条目,在传播给IBGP时候,默认保持下一跳不变,这里的下一跳是进入下一个AS的边界路由器的接口IP,因此在AS内的路由,如果要到下一个AS,它就要首先查找BGP表,从BGP表里发现要通过的下一跳,所以IP路由表中必须要有到达下一跳的路由信息,否则下一跳不可达的BGP路由是不会被装入路由表的。如果AS内的路由器没办法获得到达下一跳的路径信息,那就应该使用next-hop-self属性(修改下一跳)。对于多路访问网络第三方下一跳会自动修正下一跳为最合适的接口(但是NBMA情况下,第三方下一跳有时会出问题)。
BY:
[url]http://www.mycisco.cn[/url]
源头属性:定义路径信息的初始来源的源头,它可能为:
1。IGP,起始在AS内部,通过NETWORK宣告的。用i表示
2。EGP,早期的,现在已过时。
3。不完全,源头未知或者通过其他方法获悉的,例如被充分发到BGP中的,不完整的源头用?表示。
本地优先级属性:只在AS内部有作用,只发送给内部BGP邻居,影响数据出去的方向。CISCO默认值100。可以使用在BGP进程下bgp default local-preference num来修改,越大越好。可以在neighbor ip remote-as num后跟上route-map name in,在IN方向上对不同的外部网络设置不同的本地优先级,这样本地AS到达不同的外部网络时可以选择不同的出口。这里需要注意,为了影响自己AS到达外部网络,所以外部网络在从不同的外部邻居学习进来的时候就要在各自的IN方向设置本地优先级,这样本地BGP表里才会是通过不同的接口有不同的本地优先级别。
权重属性:CISCO私有的,只对当前路由器有效,影响数据出方向,权重越大越好,可以使用neighbor ip remote-as num weight num让权重与外部邻居挂钩,从而让一个路由器有多个到外部AS出口时选择最大的一个。
MED属性:在自己AS内定义,影响外部AS数据进来,这是唯一一个影响数据入方向的属性,正因为是影响数据入方向,所以MED作的工作是传播给邻接AS,让邻接AS根据不同的MED选择不同的出路。因此在使用route-map作为neighbor命令的参数时候要使用OUT方向(影响别人从而达到影响自己的目的)。全局修改MED在BGP进程下使用default-metric num.
BGP水平分割原则:从IBGP学到的不应该在传播给下一个IBGP(学习的IBGP除外)。正是由于此,IBGP之间需要进行全互连,这样才能确保各个IBGP都能学习到外部BGP路由。
BGP同步规则:BGP规定,BGP路由器不会将通过IBGP学习到路由发送给EBGP(但是会装入BGP表,但不是最优路径,所以不会发给别人),除非这个路由在IGP中有获悉,即只有当IGP与IBGP都有到达某个网络的路由时,这个BGP路由才能发送给EBGP(从外部学到的BGP路由必须在IGP中也存在对应的路由,这就要求将外部BGP重分发到IGP中,一般来说这种情况不可能,外部BGP路由太大了)。本来这个规则是为了防止路由黑洞的,但是却带来了一个麻烦,即一旦IGP里路由与BGP的不同步,路由就不能正常被使用。因此现在的ISP网络大都是在AS内实行全互连,且同时都运行BGP,这样就可以关闭同步。
指定BGP邻居的方法:
neighbor 邻居IP、对等体组名 remote-as AS号
设置对等体组方法:
neighbor 对等体组名 peer-group
加入对等体组方法:
neighbor 对等体IP peer-group 对等体组名
BGP对对等体独特要求:BGP的路由更新源地址一定要是和指定邻居中的IP一致。因此如果使用环回地址作为对等体IP,那么就需要配上neighbor 对等体IP(环回) remote-as update-source 环回地址.外部对等体最需要注意的就是多跳问题,见上面总结,同时也必须确保这个跳是可达的。
=============一个范例============
router bgp 65111
neighbor 1.1.1.1 remote-as 65111 (内部邻居,使用的对等体IP是个对方的环回地址)
neighbor 1.1.1.1 update-source loopback0 (指定更新源是自己的环回地址)
neighbor 1.1.1.1 next-hop-self (修改下一跳)
neighbor 2.2.2.2 remote-as 65222 (外部邻居,也使用对方环回接口)
neighbor 2.2.2.2 ebgp-multihop 2 (设置多跳,跳数2)
neighbor 2.2.2.2 update-source loopback 0 (指定更新源是自己的环回地址)
ip route 2.2.2.2 255.255.255.255 172.16.31.2(设置到达外部邻居环回接口的路由,否则邻居关系起不来)
重置BGP绘画,因为BGP一般运算很占资源,所以一般不能轻易使用clear ip bgp * ,一般应带上soft in或者soft out参数。
BGP邻居的状态:
1。IDLE
2。CONNECT
3。ACTIVE
4。OPEN SENT
5。OPEN CONFIRM
6。Established
只有在已建立状态后,路由器才相互发送路由信息。
空闲状态表示路由器还不知道如何前往邻居,如果一直是这个状态,要检查邻居配置以及1、2层连通性,检查有无到达对方的网络。
活动状态表明,它已经找到邻居,并发送了打开分组,但还未得到响应。如果长时间这个状态,检查邻居是配置了正确的邻接关系和检查链路是否是单向链路,或检查对方有无回来的路。
CISCO路由器对BGP条目的选择标准:(BGP只选一个最好的路径加入路由表)
1。权重最大的(当前路由器有效)
2。本地优先级最高的(AS内有效)
3。当前路由器通告的(next hop=0.0.0.0)
4。AS PATH最短的
5。源头编码最小的(igp best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 172.16.0.0 0.0.0.0 0 32768 i
结果:正常宣告.前提:未关闭汇总,宣告的是主类,IP表中有主类的子网存在.
===================================================================
case3:
router bgp 1
network 172.16.0.0
ip route 172.16.0.0 255.255.0.0 null 0
r3-2514#sh ip bgp
BGP table version is 1, local router ID is 3.3.3.3
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
* 172.16.0.0 0.0.0.0 0 32768 i
结果:宣告进去,(特殊:变成最优要等很长时间).前提:未关闭自动汇总,宣告的是主类,IP路由表有精确匹配,但无子网路由.
=================================================================
case4:
router bgp 1
network 172.16.10.0
r3-2514#sh ip bgp
结果:宣告不进去, 前提:宣告172.16.10.0且不带MASK,没有配置子网路由和精确匹配.
=================================================================
case5:
router bgp 1
network 172.16.10.0
ip route 172.16.10.0 255.255.255.0 null 0
r3-2514#sh ip bgp
结果:宣告不进去,前提:宣告172.16.10.0不带MASK,配置精确匹配.
==================================================================
case6:
router bgp 1
network 172.16.10.0
ip route 172.16.10.0 255.255.255.252 null 0
结果:宣告不进去.前提:宣告的是172.16.10.0 不带mask,IP路由表中有它的子网路由.
总结:未关闭自动汇总时,使用主类网络通告(不带MASK),同时IP表中存在至少一条子网路由(或精确匹配的).
=======================================================================
case7 :
router bgp 1
no auto-summary
network 172.16.0.0
ip route 172.16.10.0 255.255.255.0 null 0
r3-2514#sh ip bgp
结果:宣告不进去.前提:关闭自动汇总,宣告主类,有子网路由.
========================================================================
case8:
router bgp 1
no auto-summary
network 172.16.0.0
ip route 172.16.0.0 255.255.0.0 null 0
r3-2514#sh ip bgp
BGP table version is 2, local router ID is 3.3.3.3
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
*> 172.16.0.0 0.0.0.0 0 32768 i
结果:正常宣告.前提:关闭自动汇总,宣告主类,IP路由表有完全匹配路由.
==========================================================================
case9:
router bgp 1
no auto-summary
network 172.16.0.0或net 172.16.10.0
ip route 172.16.10.0 255.255.255.0 null 0
r3-2514#sh ip bgp
结果:宣告不进去.前提:关闭自动汇总,宣告172.16.10.0或172.16.0.0,IP路由表有完全匹配路由.
===========================================================================
case10:
router bgp 1
no auto-summary
network 172.16.10.0
ip route 172.16.0.0 255.255.0.0 null 0
r4-2501#sh ip bgp
结果:宣告不进去.
总结:关闭汇总,只能通告分类网络(不带mask),且必须要求宣告的网络与IP路由表的条目要完全匹配.
============================================================================
2。如果命令中带掩码,那么IP路由表中必须存在有一条与该通告命令完全一样(网络号和掩码都要相同)的路由,否则不会通告该网络。
关于BGP宣告方面文章看这里:
[url]http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a00800945ff.shtml#topic1[/url]
利用network进行BGP的汇总:
其实本身network并不是汇总的命令,它是BGP宣告网络的方法,只是我们可以利用它在宣告的时候就宣告为汇总的网络。
从BGP的network宣告规则可以看出,要宣告一个汇总路由条目,前提是路由表中要已存在相同地址和掩码的路由条目,所以很多时候为了宣告汇总路由往往需要先手工指定一个相同地址和前缀的静态路由(指向NULL0接口),这样既可以保证宣告成功又能保证当没有具体子网时候数据被丢弃,防止路由黑洞。例如:
route bgp 65111
network 192.168.0.0
network 192.168.1.0
network 192.168.2.0
network 192.168.3.0
这样的宣告可以改成这样汇总:
ip route 192.168.0.0 255.255.255.252 null 0
router bgp 65111
network 192.168.0.0 255.255.252.0
利用aggregate-address汇总BGP路由:
这是汇总BGP表里路由的命令,它只聚合已经存在于BGP表中的网络。它在汇总后会自动增加一条指向空接口的路由到路由表中。
aggregate-address ip地址 掩码 summary-only|as-set
参数summary-only表示只通告汇总路由出去,默认是汇总+具体路由一起出去的。
as-set表示在聚合路由的的AS路径属性字段里填上所有具体路由中包含的那些AS号,否则只包含执行聚合的AS的号。
本文来自ChinaUnix博客,如果查看原文请点:[url]http://blog.chinaunix.net/u2/65250/showart_1804501.html[/url]
实验记录:
R1#sh run | b router bgp
router bgp 100
no synchronization
bgp log-neighbor-changes
network 172.16.0.0 mask 255.255.255.0
network 172.16.1.0 mask 255.255.255.0
neighbor 2.2.2.2 remote-as 100
neighbor 2.2.2.2 update-source Loopback100
no auto-summary
!
ip classless
ip route 2.2.2.0 255.255.255.0 172.16.255.2
ip http server
!
!
R2#show run | b router bgp
router bgp 100
no synchronization //IBGP同步不启用
bgp log-neighbor-changes
neighbor 1.1.1.1 remote-as 100
neighbor 1.1.1.1 update-source Loopback200 //指定邻居1.1.1.1的更新源
neighbor 1.1.1.1 next-hop-self //设置邻居1.1.1.1的下一跳为R2
neighbor 10.1.255.2 remote-as 200
neighbor 10.1.255.2 ebgp-multihop 255 //设置EBGP为多跳
no auto-summary //不汇总
!
ip classless
ip route 1.1.1.0 255.255.255.0 172.16.255.1
ip http server
!
R3#show run | b router bgp
router bgp 200
no synchronization
bgp log-neighbor-changes
network 192.168.0.0
network 192.168.1.1
network 192.168.3.0
neighbor 10.1.255.1 remote-as 100
neighbor 10.1.255.1 ebgp-multihop 255
no auto-summary
!
R1与R2间必需运行路由协议来实现底层的通信!
R2#sh run
router eigrp 99
network 10.1.255.0 0.0.0.255
network 172.16.255.0 0.0.0.255
no auto-summary
!
ip route 1.1.1.0 255.255.255.0 172.16.255.1
结果分析:
R1#sh ip route
Gateway of last resort is not set
1.0.0.0/24 is subnetted, 1 subnets
C 1.1.1.0 is directly connected, Loopback100
2.0.0.0/24 is subnetted, 1 subnets
S 2.2.2.0 [1/0] via 172.16.255.2
172.16.0.0/16 is variably subnetted, 5 subnets, 2 masks
C 172.16.255.0/30 is directly connected, FastEthernet0/0
C 172.16.0.0/24 is directly connected, Loopback0
C 172.16.1.0/24 is directly connected, Loopback1
C 172.16.2.0/24 is directly connected, Loopback2
C 172.16.3.0/24 is directly connected, Loopback3
10.0.0.0/30 is subnetted, 1 subnets
D 10.1.255.0 [90/2172416] via 172.16.255.2, 00:57:17, FastEthernet0/0
B 192.168.0.0/24 [200/0] via 2.2.2.2, 00:17:26
B 192.168.3.0/24 [200/0] via 2.2.2.2, 00:17:27
R2#sh ip route
Gateway of last resort is not set
1.0.0.0/24 is subnetted, 1 subnets
S 1.1.1.0 [1/0] via 172.16.255.1
2.0.0.0/24 is subnetted, 1 subnets
C 2.2.2.0 is directly connected, Loopback200
172.16.0.0/16 is variably subnetted, 3 subnets, 2 masks
C 172.16.255.0/30 is directly connected, FastEthernet0/0
B 172.16.0.0/24 [200/0] via 1.1.1.1, 00:24:42
B 172.16.1.0/24 [200/0] via 1.1.1.1, 00:24:42
10.0.0.0/30 is subnetted, 1 subnets
C 10.1.255.0 is directly connected, Serial1/1
B 192.168.0.0/24 [20/0] via 10.1.255.2, 00:24:42
B 192.168.3.0/24 [20/0] via 10.1.255.2, 00:24:42
R3#sh ip route
Gateway of last resort is not set
172.16.0.0/24 is subnetted, 2 subnets
B 172.16.0.0 [20/0] via 10.1.255.1, 00:25:07
B 172.16.1.0 [20/0] via 10.1.255.1, 00:25:07
10.0.0.0/30 is subnetted, 1 subnets
C 10.1.255.0 is directly connected, Serial1/0
C 192.168.0.0/24 is directly connected, Loopback0
C 192.168.1.0/24 is directly connected, Loopback1
C 192.168.2.0/24 is directly connected, Loopback2
C 192.168.3.0/24 is directly connected, Loopback3
分析:
R1上有R3上BGP发布的路由(B 192.168.0.0/24 [200/0] via 2.2.2.2, 00:17:26
B 192.168.3.0/24 [200/0] via 2.2.2.2, 00:17:27) 但却无法PING通!
因为虽然R1有路由到达R3但是R3却没有路由回来~!!!
若源用172.16.0.0或者172.16.1.0 网段的地址即可PING通~!!!
R1#ping
Protocol [ip]:
Target IP address: 192.168.0.1
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [2]:
Extended commands [n]: y
Source address or interface: 172.16.0.1
Type of service [0]:
Set DF bit in IP header? [no]:
Validate reply data? [no]:
Data pattern [0xABCD]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Sweep range of sizes [n]:
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.1, timeout is 2 seconds:
Packet sent with a source address of 172.16.0.1
!!!!!