您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页BGP实验手册

BGP实验手册

来源:爱go旅游网
BGP实验手册

实验:

BGP宣告精确路由和聚合路由实验: 实验拓扑为:

说明:R1在AS1,R2在AS2 R3在AS 3

R1的具体配置如下: interface Loopback0

ip address 192.168.192.1 255.255.255.0 interface Loopback1

ip address 192.168.193.1 255.255.255.0 interface Loopback2

ip address 192.168.194.1 255.255.255.0 interface Loopback3

ip address 192.168.195.1 255.255.255.0 interface Loopback4

ip address 192.168.196.1 255.255.255.0 interface Loopback5

ip address 192.168.197.1 255.255.255.0 interface Loopback6

ip address 192.168.198.1 255.255.255.0 interface Loopback7

ip address 192.168.199.1 255.255.255.0

router ospf 1

log-adjacency-changes

network 192.168.192.0 0.0.0.255 area 0 network 192.168.193.0 0.0.0.255 area 0 network 192.168.194.0 0.0.0.255 area 0 network 192.168.195.0 0.0.0.255 area 0 network 192.168.196.0 0.0.0.255 area 0 network 192.168.197.0 0.0.0.255 area 0 network 192.168.198.0 0.0.0.255 area 0 network 192.168.199.0 0.0.0.255 area 0 !

router bgp 1

1

aggregate-address 192.168.192.0 255.255.248.0 聚合路由

redistribute ospf 1 实验采用重分布,但是实际不建议这样。

neighbor 12.1.1.2 remote-as 2

neighbor 12.1.1.2 send-community 向12.1.1.2邻居宣告community属性

neighbor 12.1.1.2 route-map zhang out 定义一个名为zhang的策略路由! !

access-list 101 permit ip host 192.168.192.0 host 255.255.248.0 这种访问列表的

目的在于指定精确地前缀

!

route-map zhang permit 10 match ip address 101 set community none !

route-map zhang permit 20 set community no-export

上面的route-map作用就是如果匹配了访问列表则在community属性中什么都不加入,如果没有匹配则在community加入no-export属性。该属性的作用就是不向该AS的邻居的邻居通告明细路由。在此例中也就是不会向R3通告明细路由。

R2的配置如下: interface Serial1/0

ip address 12.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 23.1.1.1 255.255.255.0 serial restart-delay 0

router bgp 2

no synchronization bgp router-id 2.2.2.2

bgp log-neighbor-changes neighbor 12.1.1.1 remote-as 1 neighbor 23.1.1.2 remote-as 3 R3的配置如下: interface Serial1/0

ip address 23.1.1.2 255.255.255.0 router bgp 3

no synchronization

2

bgp log-neighbor-changes neighbor 23.1.1.1 remote-as 2

这时查看R2的BGP表: Router#show ip bgp

BGP table version is 66, local router ID is 2.2.2.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path *> 192.168.192.0 12.1.1.1 0 0 1 ? *> 192.168.192.0/21 12.1.1.1 0 0 1 i *> 192.168.193.0 12.1.1.1 0 0 1 ? *> 192.168.194.0 12.1.1.1 0 0 1 ? *> 192.168.195.0 12.1.1.1 0 0 1 ? *> 192.168.196.0 12.1.1.1 0 0 1 ? *> 192.168.197.0 12.1.1.1 0 0 1 ? *> 192.168.198.0 12.1.1.1 0 0 1 ? *> 192.168.199.0 12.1.1.1 0 0 1 ? 这时能看到不但可以学习到明细路由也可以学习到精确路由。 在查看community no-export属性:

Router#show ip bgp community no-export

BGP table version is 66, local router ID is 2.2.2.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path *> 192.168.192.0 12.1.1.1 0 0 1 ? *> 192.168.193.0 12.1.1.1 0 0 1 ? *> 192.168.194.0 12.1.1.1 0 0 1 ? *> 192.168.195.0 12.1.1.1 0 0 1 ? *> 192.168.196.0 12.1.1.1 0 0 1 ? *> 192.168.197.0 12.1.1.1 0 0 1 ? *> 192.168.198.0 12.1.1.1 0 0 1 ? *> 192.168.199.0 12.1.1.1 0 0 1 ? 该属性所显示的是明细路由,也就是说这些明细路由都被加入了no-export属性,所以R2不会将这些明细路由宣告给R3。我们可以在R3上进行验证。 Router#show ip bgp

BGP table version is 58, local router ID is 23.1.1.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

3

Network Next Hop Metric LocPrf Weight Path *> 192.168.192.0/21 23.1.1.1 0 2 1 i 可以明显的看到,R3上并没有学习到192.168.的明细路由。

该实验告诉我们如果某一个区域的明细路由只能通告给他指定的邻居,而不想向他邻居的邻居通告的话,就可以加入no-exeport属性。

2)宣告聚合路由和选定的精确路由: 实验拓扑为:

说明:R1在AS1,R2在AS2 R3在AS 3

R1的具体配置如下: interface Loopback0

ip address 192.168.192.1 255.255.255.0 interface Loopback1

ip address 192.168.193.1 255.255.255.0 interface Loopback2

ip address 192.168.194.1 255.255.255.0 interface Loopback3

ip address 192.168.195.1 255.255.255.0 interface Loopback4

ip address 192.168.196.1 255.255.255.0 interface Loopback5

ip address 192.168.197.1 255.255.255.0 interface Loopback6

ip address 192.168.198.1 255.255.255.0 interface Loopback7

ip address 192.168.199.1 255.255.255.0

router ospf 1

log-adjacency-changes

network 192.168.192.0 0.0.0.255 area 0 network 192.168.193.0 0.0.0.255 area 0 network 192.168.194.0 0.0.0.255 area 0 network 192.168.195.0 0.0.0.255 area 0 network 192.168.196.0 0.0.0.255 area 0 network 192.168.197.0 0.0.0.255 area 0 network 192.168.198.0 0.0.0.255 area 0 network 192.168.199.0 0.0.0.255 area 0

4

!

router bgp 1

no synchronization

bgp log-neighbor-changes

aggregate-address 192.168.192.0 255.255.248.0 suppress-map liang 在聚合路

由后加入了名为liang的抑制策略suppress-map liang

redistribute ospf 1

neighbor 12.1.1.2 remote-as 2

neighbor 12.1.1.2 send-community neighbor 12.1.1.2 route-map zhang out no auto-summary !

ip classless

no ip http server ! !

access-list 101 permit ip host 192.168.192.0 host 255.255.248.0

access-list 1 permit 192.168.195.0 0.0.0.255 access-list 1 permit 192.168.196.0 0.0.3.255

说明:仔细看这个访问列表他的目的是抑制列表中允许的路由,既192.168.195.0 ---192.168.199.0

route-map liang permit 30 定义这个策略路由如果匹配列表1的路由

条目,则对这些条目抑制不进行宣告,只宣告那些不匹配的路由。

match ip address 1

route-map zhang permit 10 match ip address 101 set community none !

route-map zhang permit 20 set community no-export

R2和R3的配置如实验一不变。 这时查看R1的BGP表: Router#show ip bgp

BGP table version is 15, local router ID is 1.1.1.1

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

5

Network Next Hop Metric LocPrf Weight Path *> 192.168.192.0 0.0.0.0 0 32768 ? *> 192.168.192.0/21 0.0.0.0 32768 i *> 192.168.193.0 0.0.0.0 0 32768 ? *> 192.168.194.0 0.0.0.0 0 32768 ? s> 192.168.195.0 0.0.0.0 0 32768 ? s> 192.168.196.0 0.0.0.0 0 32768 ? s> 192.168.197.0 0.0.0.0 0 32768 ? s> 192.168.198.0 0.0.0.0 0 32768 ? s> 192.168.199.0 0.0.0.0 0 32768 ?

在R1的BGP表上可以明显看到红色部分的明细路由前面有一个S标记,就是被R1抑制的路由不会对外进行宣告。黑色部分的路由没有匹配访问列表1所以对外宣告。

可以在R2上进行验证: Router#show ip bgp

BGP table version is 101, local router ID is 2.2.2.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path *> 192.168.192.0 12.1.1.1 0 0 1 ? *> 192.168.192.0/21 12.1.1.1 0 0 1 i *> 192.168.193.0 12.1.1.1 0 0 1 ? *> 192.168.194.0 12.1.1.1 0 0 1 ?

在R3上仍然只是一条聚合路由。因为这些明细路由仍然带有no-exeport属性。

说明:这个实验告诉我们可以只向其他的AS宣告指定的路由,这个属性具有很好的优点,如果在一个AS中有两个边界路由器和另外一个区域的两个边界路由器互联,这时可以用这个属性在两个边界路由器上分别进行不同的路由通告,以实现路由带宽的分担。如果两个边界路由器都宣告汇聚路由时,这是如果某一条链路断掉了,由于有汇聚路由的存在,并不会影响路由的走向。

实验:

本次试验是运用命令default-information originate。

6

实验拓扑如图所示:R1 R2 R4分别属于AS 1 AS 2 AS 4 ,在本试验的命令作用就是将默认路由重发布进BGP的时候,如果没有该命令,则默认路由是不可能发送给EBGP邻居的。当然现实的配置中很多情况是手工指定一条默认路由,但是这样做不是很方便,因为这样需要在每一台路由器上都要进行指定,如果采用重发布的话,在这个拓扑中R1是不需要进行配置的,当然现网中的拓扑是很复杂的,需要进行详细的规划。首先完成拓扑的基本配置。然后在R2 和R4上各指定一条默认路由,具体配置如下: R1:

interface Serial1/1

ip address 12.1.1.1 255.255.255.0 serial restart-delay 0 !

interface Serial1/2

ip address 14.1.1.1 255.255.255.0 serial restart-delay 0 router bgp 1

no synchronization

bgp log-neighbor-changes neighbor 12.1.1.2 remote-as 2 neighbor 14.1.1.2 remote-as 4 no auto-summary R2:

interface Loopback0

ip address 172.16.1.1 255.255.255.0 !

interface Serial1/0

ip address 12.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 23.1.1.1 255.255.255.0 serial restart-delay 0

7

router bgp 2

no synchronization

no bgp log-neighbor-changes

network 12.1.1.0 mask 255.255.255.0 network 23.1.1.0 mask 255.255.255.0

redistribute static 将静态路由重新发布进BGP neighbor 12.1.1.1 remote-as 1 neighbor 23.1.1.2 remote-as 3 no auto-summary !

ip route 0.0.0.0 0.0.0.0 172.166.1.10

R4:

interface Loopback0

ip address 4.4.4.4 255.255.255 interface Serial1/1

ip address 14.1.1.2 255.255.255.0 serial restart-delay 0 router bgp 4

no synchronization

bgp log-neighbor-changes redistribute static

neighbor 14.1.1.1 remote-as 1 no auto-summary !

ip route 0.0.0.0 0.0.0.0 4.4.4.10

但是此时查看R1 R2 R4的BGP表: R1:

Router#show ip bgp

Network Next Hop r> 12.1.1.0/24 12.1.1.2 *> 23.1.1.0/24 12.1.1.2 R2:

Router#SHOW IP BGP

Network Next Hop *> 12.1.1.0/24 0.0.0.0 *> 23.1.1.0/24 0.0.0.0 R4:

Router# show ip bgp

Network Next Hop *> 12.1.1.0/24 14.1.1.1 *> 23.1.1.0/24 14.1.1.1

模拟静态路由 Metric LocPrf Weight Path 0 0 2 i 0 0 2 i Metric LocPrf Weight Path 0 32768 i 0 32768 i Metric LocPrf Weight Path 0 1 2 i 0 1 2 i

8

发现虽然R2和R4配置了静态路由,同时也进行了重发布,但是在他们的BGP中根本没有默认路由,原因就是要想让BGP将默认路由发布出来必须在BGP进程下敲入命令:

default-information originate,现在在R2和R4的BGP进程下敲入该命令后再次查看R1的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path * 0.0.0.0 12.1.1.2 0 0 2 ? *> 14.1.1.2 0 0 4 ? r> 12.1.1.0/24 12.1.1.2 0 0 2 i *> 23.1.1.0/24 12.1.1.2 0 0 2 i 此时R1学到两条默认路由,优选了R4的,此时查看R2的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 0.0.0.0 172.16.1.10 0 32768 ?

* 12.1.1.1 0 1 4 ? *> 12.1.1.0/24 0.0.0.0 0 32768 i *> 23.1.1.0/24 0.0.0.0 0 32768 i

此时R2优选本地的默认路由。实验做到这里应该结束了,但是有一个特殊的情况,就是在这种情况下如果还有其他的静态路由,在重分布的时候也被充分布进BGP了,但是现实情况是只希望重发布默认路由怎么办?这个时候可以采用ROU-MAP来做。比如这个例子在R2上还有一个到达192.168.1.0这个网段的默认路由,配置如下:

ip route 192.168.1.0 255.255.255.0 172.16.1.11 此时在R1上查看BGP表: Router#show ip bgp

BGP table version is 25, local router ID is 12.1.1.1

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path * 0.0.0.0 12.1.1.2 0 0 2 ? *> 14.1.1.2 0 0 4 ? r> 12.1.1.0/24 12.1.1.2 0 0 2 i *> 23.1.1.0/24 12.1.1.2 0 0 2 i *> 192.168.1.0 12.1.1.2 0 0 2 ?

可以看到R2将这个路由也进行了公布。所以要想只公布R2的默认路由,具体配置如下: router bgp 2

no synchronization

no bgp log-neighbor-changes

network 12.1.1.0 mask 255.255.255.0

9

network 23.1.1.0 mask 255.255.255.0

redistribute static route-map zhang 在重发布后加入route-map zhang neighbor 12.1.1.1 remote-as 1 neighbor 23.1.1.2 remote-as 3 default-information originate no auto-summary !

ip route 0.0.0.0 0.0.0.0 172.16.1.10

ip route 192.168.1.0 255.255.255.0 172.16.1.11 !

ip prefix-list 1 seq 5 permit 0.0.0.0/0 此route-map 只允许默认路由通过。 !

route-map zhang permit 10 match ip address prefix-list 1 set ip next-hop 172.16.1.11 现在再次查看R1的BGP表: Router#show ip bgp

BGP table version is 26, local router ID is 12.1.1.1

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path * 0.0.0.0 12.1.1.2 0 0 2 ? *> 14.1.1.2 0 0 4 ? r> 12.1.1.0/24 12.1.1.2 0 0 2 i *> 23.1.1.0/24 12.1.1.2 0 0 2 可以发现192那个网段不见了。实验完毕。

实验:

每一个路由器都需要有默认路由来帮助路由器到达那些没有在本地IP表中的网络地址,但是默认路由的设计也是很有讲究的,首先可以在每一台路由器上手工的设置一条默认路由,但是这样做的话每一台路由器都要耗费一定的内存来维护这条默认路由,代价比较大,而且相对麻烦,因为在每一台路由器上都要手工的配置。第二种方法就是运行一些路由协议,让其中一台去通告默认路由,其他的路由器只是学习,但是这样也有一个问题,因为本实验是在BGP的环境下,所以之探讨BGP该实验配置。本实验所涉及到的命令为: neighbor * * * * default-originate

该命令可以向运行着BGP的路由器通告一条默认路由,当然这条默认路由首先要存在与本地的IP表,但是该命令并不是完美的,因为该命令隐含的意思是这条默认路由会始终通告给运行着BGP的邻居,不管这条默认路由是否可达。

10

实验拓扑如上,R1和R2属于AS1,R3属于AS2,用R3来模拟互联网,在R2一条默认路由指向R3的S1/0口,相关的配置与解释如下: R1:

interface Serial1/1

ip address 12.1.1.1 255.255.255.0 serial restart-delay 0 router bgp 1

no synchronization

bgp log-neighbor-changes neighbor 12.1.1.2 remote-as 1

R2:

interface Serial1/0

ip address 12.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 23.1.1.1 255.255.255.252 router bgp 1

no synchronization

bgp log-neighbor-changes neighbor 12.1.1.1 remote-as 1 neighbor 12.1.1.1 next-hop-self

neighbor 12.1.1.1 default-originate 向R1通告默认路由。 neighbor 23.1.1.2 remote-as 2

ip route 0.0.0.0 0.0.0.0 23.1.1.2 设置一条默认路由指向R3

R3:

nterface Loopback0

ip address 3.3.3.3 255.255.255.0 !

interface Serial1/0

ip address 23.1.1.2 255.255.255.252 serial restart-delay 0 router bgp 2

no synchronization

bgp log-neighbor-changes

network 3.3.3.0 mask 255.255.255.0

11

neighbor 23.1.1.1 remote-as 1

现在查看R2的BGP表和路由表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 3.3.3.0/24 23.1.1.2 0 0 2 i Router#show ip rou

Gateway of last resort is 23.1.1.2 to network 0.0.0.0

3.0.0.0/24 is subnetted, 1 subnets

B 3.3.3.0 [20/0] via 23.1.1.2, 00:01:57 23.0.0.0/30 is subnetted, 1 subnets

C 23.1.1.0 is directly connected, Serial1/1 12.0.0.0/24 is subnetted, 1 subnets

C 12.1.1.0 is directly connected, Serial1/0 S* 0.0.0.0/0 [1/0] via 23.1.1.2

可以看到在R2上的路由表中存在一条默认路由。现在查看R1的路由表和BGP表

Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *>i0.0.0.0 12.1.1.2 100 0 i *>i3.3.3.0/24 12.1.1.2 0 100 0 2 i Router#show ip rou

Gateway of last resort is 12.1.1.2 to network 0.0.0.0

3.0.0.0/24 is subnetted, 1 subnets

B 3.3.3.0 [200/0] via 12.1.1.2, 00:03:15 12.0.0.0/24 is subnetted, 1 subnets

C 12.1.1.0 is directly connected, Serial1/1 B* 0.0.0.0/0 [200/0] via 12.1.1.2, 00:05:21

可以看到R1学习到了从R2发来的默认路由,并且已经加入到路由表。

现在我们在R2上把和R3相连的接口shutdown掉,然后再次查看R1的BGP表和路由表。

Router#show ip bgp

BGP table version is 22, local router ID is 12.1.1.1

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path *>i0.0.0.0 12.1.1.2 100 0 i

Router#show ip rou

12

Gateway of last resort is 12.1.1.2 to network 0.0.0.0

12.0.0.0/24 is subnetted, 1 subnets

C 12.1.1.0 is directly connected, Serial1/1 B* 0.0.0.0/0 [200/0] via 12.1.1.2, 00:12:37

可以看到由于R2和R3之间断掉了,R1就学习不到3.3.3.0这个网络了,但是R2仍然会向R1通告默认路由,虽然这个默认路由已经不可达,但是R2依然通告,这样的话如果R1下面接入的用户要想访问外网的话是不可能的,虽然路由表里有这条路由。这种问题的解决方法还是有很多的,在这里只介绍一种,那就是在neighbor * * * * default-originate

后面加入一个策略,策略定义只有当外网可达时才通告默认路由,当默认路由不可达时,就不通告。R2的具体配置如下: router bgp 1

neighbor 12.1.1.1 remote-as 1 neighbor 12.1.1.1 next-hop-self

neighbor 12.1.1.1 default-originate route-map zhang neighbor 23.1.1.2 remote-as 2 no auto-summary

ip route 0.0.0.0 0.0.0.0 23.1.1.2 !

access-list 1 permit 23.1.1.0 0.0.0.3 !

route-map zhang permit 10 match ip address 1

定义一个策略,该策略意思就是只有23.1.1.0 0.0.0.3这个网段存在的条件下,才通告默认路由,否则就不通告。 现在查看R1的BGP表:

Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *>i0.0.0.0 12.1.1.2 100 0 i *>i3.3.3.0/24 12.1.1.2 0 100 0 此时我们再将R2的S1/1口断掉,然后再次查看R1的BGP表:

Router#show ip bgp

现在R1学习部到了默认路由,原因就是23.1.1.0 0.0.0.3这个网段现在断掉了。实验完毕。

实验:

本实验所用到的命令为:default-metric **,该命令的作用就是将静态路由重发布

13

进BGP后,给重发布进BGP的静态路由指定一个默认值,如果不用这条命令的话直接重发布进BGP的静态路由的度量或MED值为0。然而其他协议重发布进BGP后会将原来的度量带到BGP中。实验拓扑如下:

在这个拓扑中R1和R2是EBGP邻居,R2和R3之间运行OSPF协议。 具体配置如下: R1:

interface Serial1/1

ip address 12.1.1.1 255.255.255.0 router bgp 1

neighbor 12.1.1.2 remote-as 2 R2:

interface Serial1/0

ip address 12.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 23.1.1.1 255.255.255.0 serial restart-delay 0 router ospf 1

log-adjacency-changes

network 23.1.1.0 0.0.0.255 area 0 ! router bgp 2

no synchronization

no bgp log-neighbor-changes

network 12.1.1.0 mask 255.255.255.0 network 23.1.1.0 mask 255.255.255.0

redistribute ospf 1 将OSPF重发进BGP neighbor 12.1.1.1 remote-as 1 ! R3:

router ospf 1

log-adjacency-changes

network 23.1.1.0 0.0.0.255 area 0

network 202.102.192.0 0.0.0.255 area 0 将环回口地址通告进OSPF

这个时候查看R2的BGP表:

14

Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 12.1.1.0/24 0.0.0.0 0 32768 i *> 23.1.1.0/24 0.0.0.0 0 32768 i *> 202.102.192.1/32 23.1.1.2 65 32768 ? 可以看到202这个网段的度量值是65,(64+1),这个时候可以通过下述方法修改默认值,就是在重发布的时候加上Metric 再加上需要的度量,R2配置如下: redistribute ospf 1 metric 20 将重发布进BGP的OSPF路由的度量值修改为20。 此时查看R2BGP表:

Router(config)#do show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 12.1.1.0/24 0.0.0.0 0 32768 i *> 23.1.1.0/24 0.0.0.0 0 32768 i *> 202.102.192.1/32 23.1.1.2 20 32768 ?

此时在R2上做一条静态路由,ip route 192.168.1.0 255.255.255.0 202.102.192.10 具体配置如下: router bgp 2

no synchronization

no bgp log-neighbor-changes

network 12.1.1.0 mask 255.255.255.0 network 23.1.1.0 mask 255.255.255.0 redistribute static

redistribute ospf 1 现在只是将静态和OSPF重发布进BGP neighbor 12.1.1.1 remote-as 1 现在查看R2的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 12.1.1.0/24 0.0.0.0 0 32768 i *> 23.1.1.0/24 0.0.0.0 0 32768 i *> 192.168.1.0 172.16.1.11 0 32768 ? *> 202.102.192.1/32 23.1.1.2 65 32768 ?

可以看到静态的度量是0,而OSPF的度量就是原协议的度量值,现在需要将OSPF的度量修改为20,将静态的修改为30。 具体配置如下: router bgp 2

no synchronization

no bgp log-neighbor-changes

network 12.1.1.0 mask 255.255.255.0 network 23.1.1.0 mask 255.255.255.0 redistribute static

default-metric 30 将静态路由的度量修改为30 redistribute ospf 1 metric 20 将OSPF度量修改20 neighbor 12.1.1.1 remote-as 1

15

default-metric 30 no auto-summary

现在查看R2的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 12.1.1.0/24 0.0.0.0 0 32768 i *> 23.1.1.0/24 0.0.0.0 0 32768 i *> 192.168.1.0 172.16.1.11 30 32768 ? *> 202.102.192.1/32 23.1.1.2 20 32768 ? 实验完毕。

实验:

本实验用R1和R3的环回口模拟R4。R4发布一条192.168.1.0/24的路由,通告给R1和R3,然后R1和R3将这条路由通告给R2。个路由器的具体配置如下: R1:

interface Loopback0

ip address 192.168.1.1 255.255.255.0 !

interface Serial1/1

ip address 12.1.1.1 255.255.255.0 serial restart-delay 0

router bgp 1

no synchronization

bgp log-neighbor-changes network 192.168.1.0

16

neighbor 12.1.1.2 remote-as 2

neighbor 12.1.1.2 route-map zhang out !

route-map zhang permit 10 set metric 300

set as-path prepend 4 该策略就是将通告给R2的路由的MED设置为

300,再加上一个AS 4,证明该路由是从R4通告的。

R2:

interface Serial1/0

ip address 12.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 23.1.1.1 255.255.255.0 serial restart-delay 0 router bgp 2

no synchronization

bgp log-neighbor-changes neighbor 12.1.1.1 remote-as 1 neighbor 23.1.1.2 remote-as 3

R3:

interface Loopback0

ip address 192.168.1.1 255.255.255.0 interface Serial1/0

ip address 23.1.1.2 255.255.255.0 serial restart-delay 0

router bgp 3

no synchronization

bgp log-neighbor-changes network 192.168.1.0

neighbor 23.1.1.1 remote-as 2

neighbor 23.1.1.1 route-map zhang out no auto-summary !

route-map zhang permit 10 set metric 200

set as-path prepend 4 原理同上,但是不同的是将这条路由的MED

值设置为200

17

! 这时查看R2的BGP表: Router# show ip bgp

Network Next Hop Metric LocPrf Weight Path * 192.168.1.0 23.1.1.2 200 0 3 4 i *> 12.1.1.1 300 0 1 4 i

这时会发现该路由并没有选择MED值小的路由,原因是同一条路由的MED在比较大小的时候是不会比较来自两个不同AS的MED值的。这个时候R1和R3上面做的策略根本没有起到任何作用,此时路由器选择路由是按照路由器的ID来比较的,首选ID小的。如过现在必须要比较来自两个不同AS的MED值的话,那么就需要在R2的BGP进程下面敲入命令:bgp always-commpare-med 这个时候再次查看R2的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 192.168.1.0 23.1.1.2 200 0 3 4 i * 12.1.1.1 300 0 1 4 i

此时R2就选择MED值小的那条路径。bgp always-commpare-med这条命令的作用就是不管同一条路由是否来自同一个AS,始终比较MED值,优选MED值小的路径。注意如果使用了这个命令,那么这个AS中的每个运行BGP的路由器都要配置这条命令。

实验:

本实验所用到的命令为:bgp bestpath as-path ignore 该命令的作用就是路由器在比较路由的优先级的时候忽略as-path这个属性。

本实验用R1的环回口模拟接入AS 5。R3的环回口模拟接入AS4,此时AS4发布一条192.168.1.0/24的路由,通告给R1和R3,然后R1和R3将这条路由通告给R2。每个路由器的具体配置如下: R1:

interface Loopback0

ip address 192.168.1.1 255.255.255.0

18

!

interface Serial1/1

ip address 12.1.1.1 255.255.255.0 serial restart-delay 0

router bgp 1

no synchronization

bgp log-neighbor-changes network 192.168.1.0

neighbor 12.1.1.2 remote-as 2

neighbor 12.1.1.2 route-map zhang out !

route-map zhang permit 10

set as-path prepend 4 5 该策略就是将R1通告给R2的路由再加上一个AS

4和AS5,证明该路由是经过了AS4和AS5传到R1的。

R2:

interface Serial1/0

ip address 12.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 23.1.1.1 255.255.255.0 serial restart-delay 0 router bgp 2

no synchronization

bgp log-neighbor-changes neighbor 12.1.1.1 remote-as 1 neighbor 23.1.1.2 remote-as 3

R3:

interface Loopback0

ip address 192.168.1.1 255.255.255.0 interface Serial1/0

ip address 23.1.1.2 255.255.255.0 serial restart-delay 0

router bgp 3

no synchronization

bgp log-neighbor-changes network 192.168.1.0

19

neighbor 23.1.1.1 remote-as 2

neighbor 23.1.1.1 route-map zhang out no auto-summary !

route-map zhang permit 10

set as-path prepend 4 原理同上。

这个时候查看R2的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 192.168.1.0 23.1.1.2 100 0 3 4 i * 12.1.1.1 100 0 1 4 5 i

可以看到此时R2选择AS-PATH短的路径,但是现在因为某种需求,必须让R2经过R1到达这个网络,这个时候如果没有其他属性的前提下,可以在R2上配置bgp bestpath as-path ignore这条命令,让R2忽略AS-PATH属性,选择路由器ID小的R1这条路径。

当配置完成后查看R2的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path * 192.168.1.0 23.1.1.2 0 3 4 i

*> 12.1.1.1 0 1 4 5

此时R2忽略了AS-PATH属性,选择了路由器ID小的R1这条路径。实验完毕。 实验:

本实验用于比较在一个联盟内部的MED值。在一个联盟内部,路由的优先级有时候也是需要进行比较和选择的,这时就可以使用命令bgp bestpath med-confed这条命令。

实验拓扑

在这个实验拓扑中,R1 R2 R3 都处于AS 1 中,但是他们之间配置了联盟,在联盟内部R1属于AS 65501,R2属于AS65502,R3属于65503。R1和R3的环回口模拟从另外的一个AS发送来的同一个网段192.168.1.0/24。 下面是每个路由器的具体配置和相关命令的解释: R1:

interface Loopback0

ip address 192.168.1.1 255.255.255.0 !

interface Serial1/1

ip address 12.1.1.1 255.255.255.0

20

serial restart-delay 0 router bgp 65501 no synchronization

bgp log-neighbor-changes

bgp confederation identifier 1 对其他AS宣称自己在AS 1中。

bgp confederation peers 65502(联盟内对端的AS) 对联盟中的其他AS说明我们是联盟关系 network 192.168.1.0

neighbor 12.1.1.2 remote-as 65502

R2:

interface Serial1/0

ip address 12.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 23.1.1.1 255.255.255.0 serial restart-delay 0 router bgp 65502 no synchronization

bgp log-neighbor-changes bgp confederation identifier 1

bgp confederation peers 65501 65503 neighbor 12.1.1.1 remote-as 65501 neighbor 23.1.1.2 remote-as 65503 R3:

interface Loopback0

ip address 192.168.1.1 255.255.255.0 !

interface Serial1/0

ip address 23.1.1.2 255.255.255.0 serial restart-delay 0 router bgp 65503 no synchronization

bgp log-neighbor-changes bgp confederation identifier 1

bgp confederation peers 65502 network 192.168.1.0

neighbor 23.1.1.1 remote-as 65502 no auto-summary 这个时候查看R2的BGP表: Router#show ip bgp

命令解释同上。含义同上 21

Network Next Hop Metric LocPrf Weight Path * 192.168.1.0 23.1.1.2 0 100 0 (65503) i *> 12.1.1.1 0 100 0 (65501) i 可以看到R2选择了最优路由,此时将R1上的MED值进行设置,将MED值改的大一些,

具体配置如下: R1:

router bgp 65501 no synchronization

bgp log-neighbor-changes bgp confederation identifier 1 bgp confederation peers 65502 network 192.168.1.0

neighbor 12.1.1.2 remote-as 65502 neighbor 12.1.1.2 route-map zhang out no auto-summary !

ip prefix-list 1 seq 5 permit 192.168.1.0/24 !

route-map zhang permit 10 match ip address prefix-list 1 set metric 20

set as-path prepend 4 5 !

route-map zhang permit 20

将R1通告给R2的路由192.168.1.0这个网段的MED设置为20,按照要求此时R2应该选择从R3到达192.168.1.0这个网段的,但是事实并不是这样,查看R2的BGP表:

Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path * 192.168.1.0 23.1.1.2 0 100 0 (65503) i *> 12.1.1.1 20 100 0 (65501) i 可以看到R2仍然选择R1到达这个网段,虽然此时R1的MED是20,原因就是因为R1 R2 R3是联盟的关系,实在AS1内部自己的定义的AS,外部并不知道,所以在MED的比较上不是按照正常的原则,如果想让一个联盟内部的路由器也比较MED的值,这时就需要在相关的路由器上添加命令:bgp bestpath med-confed。在次试验中式在R2上的BGP进程下加上这条命令。 命令添加完后再次查看R2的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 192.168.1.0 23.1.1.2 0 100 0 (65503) i * 12.1.1.1 20 100 0 (65501) i 这个时候R2就选择MED值小的R3这条路径了。注意本实验模拟的只是R2一台路由器在AS65502中,若该AS中还有其他的路由器,凡是运行BGP的路由

22

器都要加上该命令。实验完成。

实验:

Neighbor {ip-address/peer-group-name} advertisement-interval seconds 该命令的作用就是更改BGP路由更新的最小时间间隔。当BGP正在广播的一个路由改变时,BGP会发送UPDATE或WITHDRAWN信息,如果一个已经广播的路由发生闪动,则会引起大量的UPDATE或WITHDRAWN信息出现,为了控制BGP发送大量的信息,可以设置最小时间间隔。IBGP默认是5秒,EBGP默认是30秒。

实验拓扑如上,R1属于AS1,R2和R3属于AS 2. 完成个路由器的基本配置。 然后查看R2上的邻居: R2:

Router#show ip bgp neighbors

BGP neighbor is 12.1.1.1, remote AS 1, external link BGP version 4, remote router ID 12.1.1.1

Default minimum time between advertisement runs is 30 seconds BGP neighbor is 23.1.1.2, remote AS 2, internal link BGP version 4, remote router ID 23.1.1.2 BGP state = Established, up for 00:00:53

Last read 00:00:53, hold time is 180, keepalive interval is 60 seconds Default minimum time between advertisement runs is 5 seconds 通过显示可以看到EBGP的默认是30S,IBGP的默认是5S。

现在在R2上设置命令,将EBGP的路由更新间隔设置为40。将IBGP路由更新间隔设置为30。具体配置为在R2的BGP进程下:

Router(config-router)#neighbor 12.1.1.1 advertisement-interval 40 Router(config-router)#neighbor 23.1.1.2 advertisement-interval 30 现在再次在R2上显示邻居 Router#show ip bgp nei

BGP neighbor is 12.1.1.1, remote AS 1, external link BGP version 4, remote router ID 12.1.1.1

Minimum time between advertisement runs is 40 seconds BGP neighbor is 23.1.1.2, remote AS 2, internal link Minimum time between advertisement runs is 30 seconds 实验完毕。

23

实验:

本实验涉及到的命令为:neighbor {ip-address / peer-group-name} distribute-list distribute-list-name in 该命令的作用就是在路由器的入口方向对从邻居学习到的路由进行过滤。实验拓扑如下:

在该拓扑图中,在R2上启用4个环回口用来模拟四个网段,172.16.1.0/24—172.16.3.0/24。 首先完成BGP的基本配置: R1:

interface Serial1/1

ip address 12.1.1.1 255.255.255.0 serial restart-delay 0 router bgp 1

no synchronization

bgp log-neighbor-changes neighbor 12.1.1.2 remote-as 2 R2:

interface Loopback0

ip address 172.16.1.1 255.255.255.0 !

interface Loopback1

ip address 172.16.2.1 255.255.255.0 !

interface Loopback2

ip address 172.16.3.1 255.255.255.0 !

interface Loopback3

ip address 172.16.4.1 255.255.255.0 !

interface Serial1/0

ip address 12.1.1.2 255.255.255.0 serial restart-delay 0

router bgp 2

no synchronization

bgp log-neighbor-changes

network 172.16.1.0 mask 255.255.255.0 network 172.16.2.0 mask 255.255.255.0 network 172.16.3.0 mask 255.255.255.0

24

network 172.16.4.0 mask 255.255.255.0 neighbor 12.1.1.1 remote-as 1 这个时候在R1上查看BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.3.0/24 12.1.1.2 0 0 2 i *> 172.16.4.0/24 12.1.1.2 0 0 2 i 可以看到R2上通告的4个网段全部学习到了。

现在我们不想让R1学下172.16.3.0/24这个网段,我们可以在R1上实现也可以在R2上实现,下面我们分别来做

在R1上实现该目的就要用到上面的那条命令,现在我们在R1上敲入命令: neighbor 12.1.1.2 distribute-list 1 in !

access-list 1 deny 172.16.3.0 0.0.0.255 access-list 1 permit any

这个时候我们再次查看R1的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.4.0/24 12.1.1.2 0 0 2 i

发现此时172.16.3.0这个网段已经被R1过滤掉了。此时我们在R2上查看他向R1通告了那些路由:

Router#show ip bgp neighbors 12.1.1.1 advertised-routes

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 0.0.0.0 0 32768 i *> 172.16.2.0/24 0.0.0.0 0 32768 i *> 172.16.3.0/24 0.0.0.0 0 32768 i *> 172.16.4.0/24 0.0.0.0 0 32768 i

可以看到R2通告了172.16.3.0这个网段,只不过该网段在R1上被过滤了。 如果想在R2上实现的话,具体配置如下,首先将R1上的相关配置删除掉。 neighbor 12.1.1.1 distribute-list 1 out 注意方向

access-list 1 deny 172.16.3.0 0.0.0.255 access-list 1 permit any

其实我们看到唯一的区别就是方向的不同。此时我们在R1上查看BGP 表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 12.1.1.2 0 0 2 i

25

*> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.4.0/24 12.1.1.2 0 0 2 i

也完成了过滤,但是我们现在在R2上查看一下它向R1通告了那些路由。 Router#show ip bgp neighbors 12.1.1.1 advertised-routes

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 0.0.0.0 0 32768 i *> 172.16.2.0/24 0.0.0.0 0 32768 i *> 172.16.4.0/24 0.0.0.0 0 32768 i 可以看到此时R2就没有向R1通告172.16.3.0 这个路由,在R2上就被过滤掉了。 本实验要注意的一点就是在使用分布列表进行过滤的时候,所调用的是访问列表。

实验:

本实验所用到的命令为:neighbor {ip-address / peer-group-name} filter-list as-path-list-name in

该命令是采用as-path来过滤从特定的BGP邻居学习到的路由更新。 实验拓扑如下:

R1 R2 R3分别属于AS1 AS2 AS3,现在我们在R2和R3上各起四个环回口用来模拟外网。首先完成BGP的基本配置。 R1:

interface Serial1/1

ip address 12.1.1.1 255.255.255.0 serial restart-delay 0 router bgp 1

no synchronization

bgp log-neighbor-changes neighbor 12.1.1.2 remote-as 2 no auto-summary R2:

interface Loopback0

ip address 172.16.1.1 255.255.255.0 !

interface Loopback1

ip address 172.16.2.1 255.255.255.0 !

interface Loopback2

ip address 172.16.3.1 255.255.255.0

26

!

interface Loopback3

ip address 172.16.4.1 255.255.255.0 interface Serial1/0

ip address 12.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 23.1.1.1 255.255.255.0 serial restart-delay 0

router bgp 2

no synchronization

bgp log-neighbor-changes

network 172.16.1.0 mask 255.255.255.0 network 172.16.2.0 mask 255.255.255.0 network 172.16.3.0 mask 255.255.255.0 network 172.16.4.0 mask 255.255.255.0 neighbor 12.1.1.1 remote-as 1 neighbor 23.1.1.2 remote-as 3

R3:

interface Loopback0

ip address 192.168.0.1 255.255.255.0 !

interface Loopback1

ip address 192.168.1.1 255.255.255.0 !

interface Loopback2

ip address 192.168.2.1 255.255.255.0 !

interface Loopback3

ip address 192.168.3.1 255.255.255.0 !

interface Serial1/0

ip address 23.1.1.2 255.255.255.0 serial restart-delay 0

router bgp 3

no synchronization

bgp log-neighbor-changes network 192.168.0.0 network 192.168.1.0 network 192.168.2.0

27

network 192.168.3.0

neighbor 23.1.1.1 remote-as 2

这个时候查看每个路由器的BGP表以保证路由是否学习到。 R1:

Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.3.0/24 12.1.1.2 0 0 2 i *> 172.16.4.0/24 12.1.1.2 0 0 2 i *> 192.168.0.0 12.1.1.2 0 2 3 i *> 192.168.1.0 12.1.1.2 0 2 3 i *> 192.168.2.0 12.1.1.2 0 2 3 i *> 192.168.3.0 12.1.1.2 0 2 3 i

R2:Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 0.0.0.0 0 32768 i *> 172.16.2.0/24 0.0.0.0 0 32768 i *> 172.16.3.0/24 0.0.0.0 0 32768 i *> 172.16.4.0/24 0.0.0.0 0 32768 i *> 192.168.0.0 23.1.1.2 0 0 3 i *> 192.168.1.0 23.1.1.2 0 0 3 i *> 192.168.2.0 23.1.1.2 0 0 3 i *> 192.168.3.0 23.1.1.2 0 0 3 i

R3:

Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 23.1.1.1 0 0 2 i *> 172.16.2.0/24 23.1.1.1 0 0 2 i *> 172.16.3.0/24 23.1.1.1 0 0 2 i *> 172.16.4.0/24 23.1.1.1 0 0 2 i *> 192.168.0.0 0.0.0.0 0 32768 i *> 192.168.1.0 0.0.0.0 0 32768 i *> 192.168.2.0 0.0.0.0 0 32768 i *> 192.168.3.0 0.0.0.0 0 32768 i 现在我们的需求就是在R1上过滤掉所有起源于AS3学习到的路由。按照这个拓扑来看,R1学习到AS3上的路由是通过R2学习的,所以我们可以在R1的入方向上设置过滤,当然也可以在R2的出方向上设置过滤,这就要看实际的需求了,本实验采用在R1的入方向上进行过滤。 具体配置如下:

neighbor 12.1.1.2 filter-list 1 in no auto-summary

28

!

ip as-path access-list 1 deny _3$ ip as-path access-list 1 permit .*

注意该列表和访问控制列表的区别,具体每个符号的含义参考正则表达式,这里就不多做解释。这时候查看R1的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.3.0/24 12.1.1.2 0 0 2 i *> 172.16.4.0/24 12.1.1.2 0 0 2 i 可以看到来自AS3的路由已经被过滤掉了。

实验

本实验是在上一个实验的基础上加以改进,拓扑如下:

按照上面的拓扑,R1,R2,R3,R4分别属于AS1,AS2,AS3,AS4.我们在R2上启用四个环回口,在R3和R4上分别启用2个环回口。首先完成BGP的基本配置。 R1:

interface Serial1/1

ip address 12.1.1.1 255.255.255.0 serial restart-delay 0 !

router bgp 1

no synchronization

bgp log-neighbor-changes neighbor 12.1.1.2 remote-as 2 neighbor 12.1.1.2 filter-list 1 in R2:

interface Loopback0

ip address 172.16.4.1 255.255.255.0 !

interface Loopback1

ip address 172.16.3.1 255.255.255.0 !

interface Loopback2

ip address 172.16.2.1 255.255.255.0

29

!

interface Loopback3

ip address 172.16.1.1 255.255.255.0 interface Serial1/0

ip address 12.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 23.1.1.1 255.255.255.0 serial restart-delay 0 router bgp 2

no synchronization

bgp log-neighbor-changes

network 172.16.1.0 mask 255.255.255.0 network 172.16.2.0 mask 255.255.255.0 network 172.16.3.0 mask 255.255.255.0 network 172.16.4.0 mask 255.255.255.0 neighbor 12.1.1.1 remote-as 1 neighbor 23.1.1.2 remote-as 3 R3:

interface Loopback0

ip address 192.168.0.1 255.255.255.0 !

interface Loopback1

ip address 192.168.1.1 255.255.255.0 !

interface Serial1/0

ip address 23.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 34.1.1.1 255.255.255.0 serial restart-delay 0 router bgp 3

no synchronization

bgp log-neighbor-changes network 192.168.0.0 network 192.168.1.0

neighbor 23.1.1.1 remote-as 2 neighbor 34.1.1.2 remote-as 4 R4:

interface Loopback0

ip address 192.168.2.1 255.255.255.0 !

30

interface Loopback1

ip address 192.168.3.1 255.255.255.0 !

interface Serial1/0

ip address 34.1.1.2 255.255.255.0 serial restart-delay 0 router bgp 4

no synchronization

bgp log-neighbor-changes network 192.168.2.0 network 192.168.3.0

neighbor 34.1.1.1 remote-as 3

此时完成基本配置后查看R1的BGP表: R1# show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.3.0/24 12.1.1.2 0 0 2 i *> 172.16.4.0/24 12.1.1.2 0 0 2 i *> 192.168.0.0 12.1.1.2 0 2 3 i *> 192.168.1.0 12.1.1.2 0 2 3 i *> 192.168.2.0 12.1.1.2 0 2 3 4 i *> 192.168.3.0 12.1.1.2 0 2 3 4 i 可以看到路由已经学习全了,上一个实验我们只是在R1上过滤了起源于AS3的路由,在本实验中我们为了加深印象以及对概念的理解,我们要求过滤掉起源于AS3的路由但是允许经过AS3的路由。及过滤掉192.168.0.0和192.168.1.0,允许192.168.2.0和192.168.3.0。 现在在R1上进行配置, neighbor 12.1.1.2 filter-list 1 in no auto-summary !

ip as-path access-list 1 deny _3$ ip as-path access-list 1 permit .* 现在我们查看R1的BGP表: R1#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.3.0/24 12.1.1.2 0 0 2 i *> 172.16.4.0/24 12.1.1.2 0 0 2 i *> 192.168.2.0 12.1.1.2 0 2 3 4 i *> 192.168.3.0 12.1.1.2 0 2 3 4 i

31

我们可以发现192.168.0.0 和192.168.1.0这两个网段被过滤掉了,但是同时我们也发现这个配置和上一个实验的配置是相同的并没有什么变化,所以我们就知道正则表达式_3$,他只是过滤起源于AS3的路由,也就是在AS-PATH中最后一个数字是3的路由。

现在我们更改一下配置,首先将上面的AS-PATH列表删除,然后配置: neighbor 12.1.1.2 filter-list 1 in

ip as-path access-list 1 deny ^3$ 注意改正则表达式和上面的区别。 ip as-path access-list 1 permit .* 现在我们查看R1的BGP表: R1# show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.3.0/24 12.1.1.2 0 0 2 i *> 172.16.4.0/24 12.1.1.2 0 0 2 i *> 192.168.0.0 12.1.1.2 0 2 3 i *> 192.168.1.0 12.1.1.2 0 2 3 i *> 192.168.2.0 12.1.1.2 0 2 3 4 i *> 192.168.3.0 12.1.1.2 0 2 3 4 i 发现并没有路由被过滤掉,这是为什么呢?^3$是什么含义呢?

在上面的配置中^3$的含义是只过滤那些AS-PATH中只包含AS3的路由,如果有其他任何AS号,都不过滤,所以该列表放置在这里并没有起到路由过滤的作用,但是我们可以将3换成2,这时172.16.1.0---172.16.4.0的路由都会被过滤掉: neighbor 12.1.1.2 filter-list 1 in !

ip as-path access-list 1 deny ^2$ ip as-path access-list 1 permit .* 现在查看R1的BGP表: R1# show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 192.168.0.0 12.1.1.2 0 2 3 i *> 192.168.1.0 12.1.1.2 0 2 3 i *> 192.168.2.0 12.1.1.2 0 2 3 4 i *> 192.168.3.0 12.1.1.2 0 2 3 4 i 可以看到只有AS2的路由北过滤掉了。实验完毕

实验

该实验还是采用上一个实验的拓扑,基本配置不变,这里就不再重复,本实验所

32

要完成的目的是在R1上过滤掉包含AS3的路由,注意区别,第一个实验式过滤掉起源于AS3的,第二个实验是过滤掉只包含AS3的,而本实验是过滤掉包含AS3的。

R1上具体的配置如下:

neighbor 12.1.1.2 filter-list 1 in

ip as-path access-list 1 deny _3_ 注意这里的配置 ip as-path access-list 1 permit .* !

现在查看R1的BGP表: R1# show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.3.0/24 12.1.1.2 0 0 2 i *> 172.16.4.0/24 12.1.1.2 0 0 2 i 可以发现只要是含有AS3的路由都被过滤掉了。

注意:以上三个实验采用了三个不同的正则表达式,_3$, ^3$, _3_. _3$的含义是起源于AS3的路由。 ^3$的含义是只包含AS3的路由。 _3_的含义是包括AS3的路由。

当然要想完成上述实验所要达到的效果,也可以在R2上做相应的策略,只不过有一点需要注意那就是在配置filter-list时要注意方向问题,如果要在R2上进行配置那么就要将方向更改为OUT。实验完毕。

实验:

本实验所用到的命令为:neighbor {ip-address / peer-group-name} maximum-prefix prefix-limit threshold-value warning-only

该命令的作用就是限制从特定邻居得到的前缀的数目,如果没有明确的设置这个数值,默认值是75%。例如,如果把prefix-limit 设置为1000,threshold-valu设置为75%,当从这个邻居得到751个前缀时,路由器就会产生一个警报,当从这个邻居得到的前缀数目超过prefix-limit的值时,就会中断这两个邻居间的BGP链接,如果使用warning-only选项,当超过前缀限制时路由器会发出一个警报,但是不会断掉这个连链接。 实验拓扑如下:

R1,R2分别属于AS1,AS2。现在我们在R2上启用9个环回口,模拟172.16.0.1/24---172.16.8.1/24这9个网段。

33

首先完成每个路由器的基本配置. R1

interface Serial1/1

ip address 12.1.1.1 255.255.255.0 router bgp 1

no synchronization

bgp log-neighbor-changes neighbor 12.1.1.2 remote-as 2

neighbor 12.1.1.2 maximum-prefix 8 在这里设置了R1在正常情况下最多能够

R2:

interface Loopback0

ip address 172.16.1.1 255.255.255.0 !

interface Loopback1

ip address 172.16.0.1 255.255.255.0 !

interface Loopback2

ip address 172.16.2.1 255.255.255.0 !

interface Loopback3

ip address 172.16.3.1 255.255.255.0 !

interface Loopback4

ip address 172.16.4.1 255.255.255.0 !

interface Loopback5

ip address 172.16.5.1 255.255.255.0 !

interface Loopback6

ip address 172.16.6.1 255.255.255.0 !

interface Loopback7

ip address 172.16.7.1 255.255.255.0 !

interface Loopback8

ip address 172.16.8.1 255.255.255.0 router bgp 2

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 network 172.16.2.0 mask 255.255.255.0 network 172.16.3.0 mask 255.255.255.0

接受R2的路由条目是6(8*75%)个。

R2向R1通告了6个网段。 34

network 172.16.4.0 mask 255.255.255.0 network 172.16.5.0 mask 255.255.255.0 neighbor 12.1.1.1 remote-as 1

现在我们查看R1的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.0.0/24 12.1.1.2 0 0 2 i *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.3.0/24 12.1.1.2 0 0 2 i *> 172.16.4.0/24 12.1.1.2 0 0 2 i *> 172.16.5.0/24 12.1.1.2 0 0 2 i

现在是可以学习到的,R1上面也没有出现告警。此时我们在R2上再次network一个网段。

network 172.16.6.0 mask 255.255.255.0 现在看R1上会出现一个告警:

*Jun 16 09:46:58.075: %BGP-4-MAXPFX: No. of prefix received from 12.1.1.2 (afi 0) reaches 7, max 8

但是此时明明有中断,因为还没有到达8个的上限。现在在R2上再宣告一个网段,R1上会再次报警

*Jun 16 09:48:36.183: %BGP-4-MAXPFX: No. of prefix received from 12.1.1.2 (afi 0) reaches 8, max 8

现在的路由段数目已经和最大上限相同了,但是此时仍然没有中断BGP连接。 我们在R2上再宣告一个网段,这时R2向R1宣告了9个网段,已经超出了R1设置的最大接受路由条目的8个,所以BGP连接会中断。 此时R1上告警为:

*Jun 16 09:52:27.223: %BGP-3-MAXPFXEXCEED: No. of prefix received from 12.1.1.2 (afi 0): 9 exceed limit 8

*Jun 16 09:52:27.227: %BGP-5-ADJCHANGE: neighbor 12.1.1.2 Down BGP Notification sent

*Jun 16 09:52:27.231: %BGP-3-NOTIFICATION: sent to neighbor 12.1.1.2 3/1 (update malformed) 0 bytes

Router# conf FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0034 0200 0000 1940 0101 0040 0204 0201 0002 4003 040C 0101 0280 0404 0000 0000 18AC 1008 在R1上查看邻居状态:

Router# show ip bgp summary

BGP router identifier 12.1.1.1, local AS number 1 BGP table version is 17, main routing table version 17

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd

35

12.1.1.2 4 2 42 34 0 0 0 00:01:06 Idle (PfxCt)

邻居状态现在已经断掉了。但是在现网中BGP是承载互联网路由的,除非很特殊的情况否则是不允许BGP断掉的,如果设置了最大接受条目,但是又不想当路由条目超出而中断BGP连接的话,那么就要用到warning-only选项了。现在我们在R1上将这个选项加上。

先将原来的配置neighbor 12.1.1.2 maximum-prefix 8 删除掉,然后配置

neighbor 12.1.1.2 maximum-prefix 8 warning-only,此时虽然R1上仍然会报警, *Jun 16 09:57:12.083: %BGP-3-MAXPFXEXCEED: No. of prefix received from 12.1.1.2 (afi 0): 9 exceed limit 8

但是现在的BGP链接并没有断掉,我们可以通过查看R1上的BGP表来确认。 Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.0.0/24 12.1.1.2 0 0 2 i *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.3.0/24 12.1.1.2 0 0 2 i *> 172.16.4.0/24 12.1.1.2 0 0 2 i *> 172.16.5.0/24 12.1.1.2 0 0 2 i *> 172.16.6.0/24 12.1.1.2 0 0 2 i *> 172.16.7.0/24 12.1.1.2 0 0 2 i *> 172.16.8.0/24 12.1.1.2 0 0 2 i

可以看到虽然设置了最多接收8个网段,但是加上了warning-only选项后,当接收多于8个后路由器只会产生告警,但是并不会中断连接。 实验完毕

实验:

该实验所用到的命令为:neighbor {ip-address / peer-group-name} password password

该命令的作用就是在BGP建立邻接关系时相互进行认证,如果密码不相同的话,则BGP邻接关系是不会建立的,BGP只支持MD5认证。实验拓扑如下

首先完成BGP的基本配置,然后查看R1的邻接关系: Router#show ip bgp summary

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down

36

State/PfxRcd

12.1.1.2 4 2 94 84 44 0 0 00:42:46 9

邻接是正常建立了。现在我们在R1上配置与R2邻接的密码,但是R2不进行配置。 R1

neighbor 12.1.1.2 password zhang 此时R1上会报错:

*Jun 16 10:44:43.567: %TCP-6-BADAUTH: No MD5 digest from 12.1.1.2(14580) to 12.1.1.1(179) --More--

*Jun 16 10:44:45.027: %TCP-6-BADAUTH: No MD5 digest from 12.1.1.2(179) to 12.1.1.1(54986) --More--

*Jun 16 10:44:47.019: %TCP-6-BADAUTH: No MD5 digest from 12.1.1.2(179) to 12.1.1.1(54986)

*Jun 16 10:44:47.031: %TCP-6-BADAUTH: No MD5 digest from 12.1.1.2(179) to 12.1.1.1(54986)

*Jun 16 10:44:47.579: %TCP-6-BADAUTH: No MD5 digest from 12.1.1.2(14580) to 12.1.1.1(179) --More--

*Jun 16 10:44:49.795: %TCP-6-BADAUTH: No MD5 digest from 12.1.1.2(23733) to 12.1.1.1(179)

*Jun 16 10:44:50.435: %TCP-6-BADAUTH: No MD5 digest from 12.1.1.2(23733) to 12.1.1.1(179) --More--

*Jun 16 10:44:51.015: %TCP-6-BADAUTH: No MD5 digest from 12.1.1.2(179) to 12.1.1.1(54986)

*Jun 16 10:44:51.031: %TCP-6-BADAUTH: No MD5 digest from 12.1.1.2(179) to 12.1.1.1(54986)

等时间超过了更新时间后,BGP邻居会断掉。 Router#show ip bgp summary

BGP router identifier 12.1.1.1, local AS number 1 BGP table version is 53, main routing table version 53

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd

12.1.1.2 4 2 96 93 0 0 0 00:02:21 Active

此时邻居一直处于活动状态并不停地报错。 现在我们在R2上也进行相关的配置。 neighbor 12.1.1.1 password zhang

此时再次查看R1的状态发现邻居建立了。

*Jun 16 10:48:40.235: %BGP-5-ADJCHANGE: neighbor 12.1.1.2 Up

37

实验完毕。

实验:

本实验所用到的命令为:neighbor ip-address peer-group peer-group-name 此命令是用来建立对等体组的。所谓对等体就是BGP在建立邻居关系的时候不论是EBGP还是IBGP,如果他们之间所作的策略是相同的,那么就可以将他们划入到一个组中,这个组就是对等体组,当然一定要注意的是,在划入之前一定要确认被划入的这些路由器所作的策略是否相同,相同的可以在同一个对等体,不同的话就不行。实验拓扑如下,

这三台路由器都在AS1中,R2是边界,R2对R1和R3所作的策略是相同的,那么此时我们就可以将他们划分到同一个对等体组。下面呢我们首先按照正常的配置看一下,在这里我只显示BGP进程下的配置,接口地址不显示。 R2:

neighbor 12.1.1.1 remote-as 1

neighbor 12.1.1.1 distribute-list 1 out neighbor 23.1.1.2 remote-as 1

neighbor 23.1.1.2 distribute-list 1 out

可以看到在正常的配置下,R2对R1和R3都做相同的策略,并且要分别配置。下面我们采用对等体组的配置方法: router bgp 1

neighbor zhang peer-group 定义一个对等体组 zhang neighbor zhang remote-as 1 定义该对等体属于AS1 neighbor zhang distribute-list 1 out 定义该对等体的策略 neighbor 12.1.1.1 peer-group zhang 将邻居加入到对等体中 neighbor 23.1.1.2 peer-group zhang

比较两种配置可以看到配置了对等体后命令不但没有减少反而增多了,但是实际并不是这样的,该实验拓扑只有几台路由器,如果现在又50台路由器我们可以算一下在正常配置下每一个邻居要配置两条,那也就是说要配置100条命令。但是在定义了对等体后,

neighbor zhang peer-group 定义一个对等体组 zhang

38

neighbor zhang remote-as 1 定义该对等体属于AS1 neighbor zhang distribute-list 1 out 定义该对等体的策略

这三条命令是必须的,然后只需要将50个邻居加入到该对等体就可以了,所以说只需要53条命令。所以说对等体是用在路由器较多的情况下,当然前提还是这些路由器的策略必须是相同的。 配置对等组的顺序如下: 1)创建对等组

2)指定对等组的邻居

3)如果对等组的所有成员都在相同的AS,指定对等组的AS 4)指定对等组的更新策略。 实验完毕。

实验:

本实验所用到的命令为:neighbor {ip-address / peer-group-name} prefix-list perfix-list-name in

在进行实验之前首先介绍一下前缀列表,前缀列表被用来过滤IP前缀,与普通的访问列表相比,前缀列表的使用可以提供更高的性能(既较少的CPU周期),注意前缀列表不能用于数据包的过滤。还要注意分布列表(distribute list)是过滤BGP路由选择更新的另一种方式,它使用的是访问列表来定义规则,并且与前缀列表互相排斥。

前缀列表的基本形式是同时精确地匹配前缀号和前缀长度。例如:

Ip prefix-list 1 permit 172.16.1.0/24,仅仅匹配172.16.1.0,不匹配172.16.1.128/25和172.16。1.0/25。

为了匹配前缀的长度的范围,就需要一些额外的可选的关键字。当某个范围终止于/32时,那么就可以为之指定大于或者等于( ge)关键字,ge的值必须大于由前缀/长度指定的长度值,并且不大于32。如果仅仅指定ge的属性,那么范围就是从ge的值到32。如果范围不是终止于3的,那么就需要另外一个关键字le. 例如如果前缀列表为172.16.1.0/24 ge 25,那么与之匹配的前缀长度落在了25到32之间,包含25和32,因而例如172.16.1.128/25和172.16.1.0/30的前缀就属于这个范围。

小于或等于(le)属性也可以指定范围,该范围从前缀/长度所指定的值到le的值,并包含这两个值。例如:Ip prefix-list 1 permit 172.16.0.0/16 le 32,就是匹配了整个172.16.0.0B类地址范围。

当同时指定ge和le属性时,范围就落在ge值到le值之间。设定的ge值和/或le值必须满足下列条件: 长度例如Ip prefix-list 1 permit 172.16.1.0/24 ge 25 le 31

注意172.16.1.0/24不在这个范围之内,所有的/32也不在这个范围之内,匹配的范围包括以下所有的前缀:

2个/25----------------172.16.1.0/25, 172.16.1.128/25

4个/26----------------172.16.1.0/26,172.16.1.64/26,……172.16.1.192/26 8个 /27---------------172.16.1.0/27, 172.16.1.32/27…………172.16.1.224/27 16个/28--------------172.16.1.0/28,172.16.1.16/28………….172.16.1.240/28 32个/29-------------172.16.1.0/29,172.16.1.8/29………….. 172.16.1.248/29

39

64个/30-------------172.16.1.0/30,172.16.1.4/30…………. 172.16.1.252/30 128个/31-----------172.16.1.0/31 172.16.1.2/31…………... 172.16.1.254/31

本实验用到的拓扑如上,路由器R2正在向R1广1播四个前缀,现在我们在R2上起上四个环回口用来模拟四个网段。并在R1上做相应的设置,首先我们的要求是过滤精确路由,但是允许聚合路由。 R1:

interface Serial1/1

ip address 12.1.1.1 255.255.255.0 router bgp 1

no synchronization

bgp log-neighbor-changes neighbor 12.1.1.2 remote-as 2 R2:

interface Loopback0

ip address 172.16.0.1 255.255.255.0 !

interface Loopback1

ip address 172.16.1.1 255.255.255.0 !

interface Loopback2

ip address 172.16.2.1 255.255.255.0 !

interface Loopback3

ip address 172.16.3.1 255.255.255.0 !

interface FastEthernet0/0 no ip address shutdown duplex half !

interface Serial1/0

ip address 12.1.1.2 255.255.255.0 router bgp 2

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

40

network 172.16.2.0 mask 255.255.255.0 network 172.16.3.0 mask 255.255.255.0

aggregate-address 172.16.0.0 255.255.252.0 聚合路由 neighbor 12.1.1.1 remote-as 1 现在我们在R1上查看BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.0.0/24 12.1.1.2 0 0 2 i *> 172.16.0.0/22 12.1.1.2 0 0 2 i *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.3.0/24 12.1.1.2 0 0 2 i 可以看到除了明细路由外还可以学习到聚合路由,现在我们在R1的in方向上做策略,只允许聚合路由装表。 R1上具体配置如下:

neighbor 12.1.1.2 prefix-list zhang in 定义一个命名的前缀列表 !

ip prefix-list zhang seq 5 permit 172.16.0.0/22 该前缀列表只允许聚合路

由,后面隐含的是deny any.

现在我们查看R1的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.0.0/22 12.1.1.2 0 0 2 i

当然我们要完成此项要求还可以在R2宣告聚合路由后面加入summary-only,让R2只通告聚合路由就可以了。但是我们现在也可以通过这个命令来完成。 紧接着我们的要求变化了,我们现在的要求是通告明细路由,但是抑制聚合路由。 首先呢我们可以采取最原始的方法就是设置前缀列表让每一条明细都通过,R1具体的配置如下:

neighbor 12.1.1.2 prefix-list zhang in no auto-summary !

ip prefix-list zhang seq 5 permit 172.16.0.0/24 ip prefix-list zhang seq 10 permit 172.16.1.0/24 ip prefix-list zhang seq 15 permit 172.16.2.0/24 ip prefix-list zhang seq 20 permit 172.16.3.0/24 现在查看R1的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.0.0/24 12.1.1.2 0 0 2 i *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.3.0/24 12.1.1.2 0 0 2 i 但是我们可以更加简洁的完成此项要求,只需要一条前缀列表就行。

41

具体配置如下:

neighbor 12.1.1.2 prefix-list zhang in !

ip prefix-list zhang seq 5 permit 172.16.0.0/22 ge 23 按照上面的解释本条前缀列

表包括/23一直到/32,当然/22不包括。

现在查看R1的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.0.0/24 12.1.1.2 0 0 2 i *> 172.16.1.0/24 12.1.1.2 0 0 2 i *> 172.16.2.0/24 12.1.1.2 0 0 2 i *> 172.16.3.0/24 12.1.1.2 0 0 2 i

效果相同,当然我们现在所做的配置在在R1的in方向上,我们还可以在R2的out方向上做相应的配置这里就不在演示。实验完毕。

实验:

本实验所用到的命令为:neighbor {ip-address / peer-group-name}remove-private-as 该命令的作用就是在更新中将私有AS移出到邻居或对等组中。私有AS号码的范围是64512—65535。我们因该知道私有AS号码是不能出现在公网上的。在使用这个命令时应用下面的条件: 1)之应用于EBGP对等体

2)如果AS路径更新中只有私有AS号码,BGP就会移出私有AS号码,这种情

况被认为是一种配置错误。

3)如果AS路径中包含私有的也包含公有的AS号码,BGP就不移出私有的AS

号码,这种情况被认为是配置错误。

4)如果AS路径中包含EBGP邻居的AS号码,BGP也不移出这些私有的AS

号码。

5)如果AS路径中包含联邦,BGP就会移出出现在AS路径中联邦部分后面的

私有AS号码 实验拓扑如下

现在R1属于私有AS64555,R2是ISP1属于AS2,R3属于ISP2属于AS4,我们在R1上做三个环回口模拟三个网段。首先我们完成基本配置: R1:

interface Loopback0

ip address 192.168.1.1 255.255.255.0 !

42

interface Loopback1

ip address 192.168.2.1 255.255.255.0 !

interface Loopback2

ip address 192.168.3.1 255.255.255.0 interface Serial1/1

ip address 12.1.1.1 255.255.255.0 router bgp 64555 network 192.168.1.0 network 192.168.2.0 network 192.168.3.0

neighbor 12.1.1.2 remote-as 2 R2:

interface FastEthernet0/0

ip address 23.1.1.1 255.255.255.0 duplex half !

interface Serial1/0

ip address 12.1.1.2 255.255.255.0 serial restart-delay 0 router bgp 2

no synchronization

bgp log-neighbor-changes

neighbor 12.1.1.1 remote-as 64555 neighbor 23.1.1.2 remote-as 4 R3:

interface FastEthernet0/0

ip address 23.1.1.2 255.255.255.0 router bgp 4

neighbor 23.1.1.1 remote-as 2 现在我们查看R3的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 192.168.1.0 23.1.1.1 0 2 64555 i *> 192.168.2.0 23.1.1.1 0 2 64555 i *> 192.168.3.0 23.1.1.1 0 2 64555 i 可以看到这些路由都带有私有的AS号码,但是在现网中这些私有的AS号码是不允许出现的,为了防止这些私有号码的出现我们可以在ISP1也就是R2上做相应的配置:

neighbor 23.1.1.2 remove-private-as 注意邻居,是其他非私有AS邻居。 现在再次查看R3的BGP表: Router#show ip bgp

43

Network Next Hop Metric LocPrf Weight Path *> 192.168.1.0 23.1.1.1 0 2 i *> 192.168.2.0 23.1.1.1 0 2 i *> 192.168.3.0 23.1.1.1 0 2 i

可以看到此时这些路由显示的都是从R2学习到的,去掉了私有的AS号码。但是这样做也有不利的一面,那就是隐藏了路由的精确性。所以在现网中配置BGP时要慎重的考虑。

实验:

BGP的选路原则。

BGP之所以能够承载互联网的路由除了他本质的一些特性以外,最主要的就是它能够运用各种属性来控制路由。在路由的选路方面有着其他路由协议不能超越的优势。BGP有着严格的选路原则,以下就是BGP的选路原则: 1)拥有权重值高的最优。当权重相同看第二条 2)本地优先级。若相同看第三条

3)相同的网段一个是通过其他邻居学来的,一个是自己NETWORK的,那首选自己NETwork的。

4)具有最短AS-PATH的路由优先。

5)比较起源属性,IGP7)相同的路由,一个是从EBGP学到的,一个是从IBGP学到的,首选EBGP的。

8)选择从最老的EBGP邻居学习到的路由。 10)比较路由器ID

11)比较相邻路由器的接口地址。

BGP选路原则是严格按照上面的规律进行的,只有上一条相同的情况下,才会比较下一条。下面是实验拓扑,

本实验将要达到的目的就是证明BGP选路完全按照以上的选路原则。

首先在R1上起环回口1 172.16.1.1 255.255.255.0 将这个网段Network进BGP。完成BGP的基本配置以后,现在查看各个路由器的BGP表, R1r#show ip bgp

Network Next Hop Metric LocPrf Weight Path

44

*> 172.16.1.0/24 0.0.0.0 0 32768 i

R2#show ip bgp

Network Next Hop Metric LocPrf Weight Path *>i172.16.1.0/24 12.1.1.1 0 100 0 i

R3#show ip bgp

Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 23.1.1.1 0 1 i * i 14.1.1.1 0 100 0 1 i

R4r#show ip bgp

Network Next Hop Metric LocPrf Weight Path * i172.16.1.0/24 23.1.1.1 0 100 0 1 i *> 14.1.1.1 0 0 1 i

仔细看可以发现在R3和R4上面这条路由都有两条,但是在R2上面只从R1学到了这条路由,R2并没有从R3学习到,为什么呢?原因就是BGP再向邻居通告路由的时候,只会把自己优化的路由向邻居进行宣告,没有优化的路由是不会宣告的。路由优化的条件有2条:1)同步。 2)下一条可达。所以在本拓扑中这种多出口的环境下一般都会互相指为下一跳,保证一方链路出现问题,数据包可以从其他方向路由。但是在本试验中,即便R3首选了经过R4到达172的网段,他也是不会把这条路由传给R2的,因为这条路由本来就是R1通告的,R1在AS1中,这条路由的AS-PATH中携带了1,而R2也在AS 1中,所以当这条路由被R3传过来后,R2看到他的AS-PATH中携带了本AS 号码,是不会放进BGP表的。

这个现象会在一会的试验中看到。

首先查看R4的BGP表会发现他到达172这个网段是通过F0/0口。但是为了演示本实验,我现在需要让他从S1/0口经过R3到达,这个时候我们首先用MED属性来进行设置,在这里在回顾一下MED属性的原理和配置,MED是本AS影响其他AS的路由怎么进入本AS。因为172这个网段在AS 1 所以我们分别设置R1和R2的MED属性。MED越小越优先。 R1:在BGP进程下:

neighbor 14.1.1.2 route-map zhang out 在全局模式下

ip prefix-list 1 seq 5 permit 172.16.1.0/24 !

route-map zhang permit 10 match ip address prefix-list 1

set metric 200 将满足前缀列表1的网段的MED值设置为200 !

route-map zhang permit 20

同理在R2上也做类似的策略:

45

neighbor 23.1.1.2 route-map zhang out !

ip prefix-list 1 seq 5 permit 172.16.1.0/24 !

route-map zhang permit 10 match ip address prefix-list 1

set metric 100 将满足前缀列表1的网段的MED值设置为100 !

route-map zhang permit 20 !

这个时候再次查看R4的BGP表, R4r# show ip bgp

Network Next Hop Metric LocPrf Weight Path *>i172.16.1.0/24 34.1.1.1 100 100 0 1 i * 14.1.1.1 200 0 1 i

可以看到在设置了MED后,R4首选经过R3到达172这个网段,在这个基础之上我们在AS2中设置本地优先属性,因为本地优先属性的优先级高于MED,通过设置查看变化。

因为本地优先属性就是决定本AS的路由怎么出AS。

所以在R4上进行设置,优先级的值越大越优先。具体配置如下:

neighbor 14.1.1.1 route-map zhang in 注意方向,因为要将从R1

学来的这条路由的优先级设置的大一些。

!

ip prefix-list 1 seq 5 permit 172.16.1.0/24 !

route-map zhang permit 10 match ip address prefix-list 1 set local-preference 200

route-map zhang permit 20

为什么不在R3上做呢?原因是因为在运行BGP协议的路由器默认情况下本地优先值为0,所以只要将R4的本地优先级值修改的大于0就行了。 这个时候再次查看R4的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path * i 34.1.1.1 0 100 0 i *> 172.16.1.0/24 14.1.1.1 200 200 0 1 i

这个时候可以看到R4从新选择了R1这条路径。所以可以证明在路由选路的优先级上本地优先大与,MED,这个时候,我在此基础上想让R4再次选择R3这条

46

路径,我们可以运用思科私有的属性权重属性来再次比较验证BGP选路是严格按照上面的优先级来运行的。 首先查看R3的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path

*>i172.16.1.0/24 34.1.1.2 200 200 0 1 i * 23.1.1.1 100 0 1 i

现在R3选择的是经过R4到达这个网段,现在我们在R3上设置权重,首先我们要明白权重这个属性只能作用与本路由器,不向本地优先和MED那样都只作用与整个AS。

R3具体的配置如下

neighbor 23.1.1.1 route-map zhang in

ip prefix-list 1 seq 5 permit 172.16.1.0/24 !

route-map zhang permit 10 match ip address prefix-list 1 set weight 100 !

route-map zhang permit 20

这个时候再次查看R3的BGP 表 Router# show ip bgp

BGP table version is 15, local router ID is 34.1.1.1

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path * i172.16.1.0/24 34.1.1.2 200 200 0 1 i *> 23.1.1.1 100 100 1 i 当把由R2传来的这条路由的权重设置为100后,R3就选择了这条路径。现在查看R4的BGP表: Router#show ip bgp

BGP table version is 16, local router ID is 34.1.1.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path * i172.16.1.0/24 34.1.1.1 100 100 0 1 i *> 14.1.1.1 200 200 0 1 可以看到R4仍然选择走R1到达,可见权重属性只能影响R3自己的路由器选路,

47

并不能决定AS内其他的路由器。

实验得出的结论是在BGP进行选路的时候,优先级 权重>本地优先级>MED. 实验结束。

实验:路由反射器和联盟实验:

R1属于AS 1,R2 R3 R4属于AS 2 R5属于AS 3

按照拓扑图基本的配置完成后可以看到在R4上是学习不到R1发出的1.1.1.0这个网段的,因为在AS 2内部,R2 R3 R4 要遵循水平分割原理,既在一个AS内部如果某一台运行BGP的路由器从它的IBGP邻居学习来的路由不会再传给它的另一个IBGP邻居。同理R2上也没有R5的5.5.5.0 的路由。这就会给在一个AS内部的路由选路造成问题。要解决这个问题有三种方法,第一种在一个AS内部所有的IBGP邻居建立全互联状态。第二种方法就是运用路由反射器。第三种方法就是用联盟。

下面分别介绍每种方法的配置: 第一全互联。

在建立全互联的前提是在一个运行IBGP的AS内部要运行IGP协议保证TCP会话能够建立。在本实验中运用OSPF建立TCP会话。 相关的配置如下: R1:

interface Loopback0

ip address 1.1.1.1 255.255.255.0 !

interface Loopback1

ip address 172.16.1.1 255.255.255.0

48

!

interface Loopback2

ip address 172.16.2.1 255.255.255.0 !

interface Loopback3

ip address 172.16.3.1 255.255.255.0

router bgp 1

no synchronization

bgp log-neighbor-changes

network 1.1.1.0 mask 255.255.255.0 neighbor 12.1.1.2 remote-as 2 R2:

router bgp 1

no synchronization

bgp log-neighbor-changes

network 1.1.1.0 mask 255.255.255.0 neighbor 12.1.1.2 remote-as 2 router ospf 1 router-id 2.2.2.2

log-adjacency-changes

network 2.2.2.0 0.0.0.255 area 0 network 23.1.1.0 0.0.0.255 area 0 network 34.1.1.0 0.0.0.255 area 0 !

router bgp 2

no synchronization

bgp log-neighbor-changes

network 12.1.1.0 mask 255.255.255.0 network 23.1.1.0 mask 255.255.255.0 network 34.1.1.0 mask 255.255.255.0 network 45.1.1.0 mask 255.255.255.0 neighbor 3.3.3.3 remote-as 2

neighbor 3.3.3.3 update-source Loopback0 neighbor 3.3.3.3 next-hop-self

neighbor 4.4.4.4 remote-as 2 会话。

neighbor 4.4.4.4 update-source Loopback0 neighbor 4.4.4.4 next-hop-self neighbor 12.1.1.1 remote-as 1 R3:

interface Loopback0

R2也要和R4建立IBGP49

ip address 3.3.3.3 255.255.255.0 !

interface Serial1/0

ip address 23.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 34.1.1.1 255.255.255.0

router ospf 1

log-adjacency-changes

network 3.3.3.0 0.0.0.255 area 0 network 23.1.1.0 0.0.0.255 area 0 network 34.1.1.0 0.0.0.255 area 0 !

router bgp 2

no synchronization

bgp log-neighbor-changes neighbor 2.2.2.2 remote-as 2

neighbor 2.2.2.2 update-source Loopback0 neighbor 4.4.4.4 remote-as 2

neighbor 4.4.4.4 update-source Loopback0 R4:

interface Loopback0

ip address 4.4.4.4 255.255.255.0 !

interface Serial1/0

ip address 34.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 45.1.1.1 255.255.255.0 serial restart-delay 0 router ospf 1

log-adjacency-changes

network 4.4.4.0 0.0.0.255 area 0 network 34.1.1.0 0.0.0.255 area 0 network 45.1.1.0 0.0.0.255 area 0 !

router bgp 2

no synchronization

bgp log-neighbor-changes

neighbor 2.2.2.2 remote-as 2

R4也要和R2建立IBGP会话。

50

neighbor 2.2.2.2 update-source Loopback0 neighbor 2.2.2.2 next-hop-self neighbor 3.3.3.3 remote-as 2

neighbor 3.3.3.3 update-source Loopback0 neighbor 45.1.1.2 remote-as 3

R5省略

这个时候查看R2和R5的路由表。 R2:

Router#show ip bgp

BGP table version is 8, local router ID is 2.2.2.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 12.1.1.1 0 0 1 i *>i5.5.5.0/24 4.4.4.4 0 100 0 3 i *> 12.1.1.0/24 0.0.0.0 0 32768 i *> 23.1.1.0/24 0.0.0.0 0 32768 i *> 34.1.1.0/24 23.1.1.2 128 32768 i *> 45.1.1.0/24 23.1.1.2 192 32768 i

可以看到5.5.5.0 这个网段学习到了。同理R4上1.1.1.0 这个网段也学习到了。

第二种方法路由反射器:

路由反射器的原理就是:当一台路由器收到一条BGP路由的时候,他会把这条路由反射给他的EBGP邻居和IBGP邻居。 在这个路由图中由于BGP的水平分割原理,R3上不会吧R5的路由传递给R2 ,R3也不会把R1上的路由传递给R4基于这种情况现在将R3定义成RR(路由反射器)。

具体的配置就是先将R2和R4的IBGP邻居NO掉然后在R3上加上下面的命令: neighbor 2.2.2.2 route-reflector-client neighbor 4.4.4.4 route-reflector-client

加上这两条命令后再次查看R2和R4的路由表: R4: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 2.2.2.2 0 100 0 1 i *> 5.5.5.0/24 45.1.1.2 0 0 3 i *>i12.1.1.0/24 2.2.2.2 0 100 0 i

同样能够学习到。从上面的命令可以看出在R3上只是指定了R2和R4是R3这个路由反射器的客户端。但是R2和R4并不知道自己自己是这个路由反射簇的成员,他们只是正常转发BGP学习到的路由。路由反射簇的概念就是凡事由RR指定的邻居就和这个RR构成了一个路由反射簇。但是按照路由反射器的定

51

义,即便这个时候不指定R4是R3的客户端R4也是可以学习到1.1.1.0这个网络的。但是一般情况下都会将与RR相连的路由器都指定为客户端。 第三种方法就是用联盟。

联盟的含义就是在一个大的AS内部再将路由器划分成其他的AS,这些内部AS可以是私有AS,也可以是共有AS。在边界路由器上与其他AS建立EBGP会话的路由器会将这些内部AS再次转换成大的AS号。

拓扑不变,在AS 2 内部将R2和R3定义为AS65512 将R3定义为AS 65513 。 具体配置如下: R1:

interface Loopback0

ip address 1.1.1.1 255.255.255.0 !

interface Loopback1

ip address 172.16.1.1 255.255.255.0 !

interface Loopback2

ip address 172.16.2.1 255.255.255.0 !

interface Loopback3

ip address 172.16.3.1 255.255.255.0 ! router bgp 1

no synchronization

bgp log-neighbor-changes

network 1.1.1.0 mask 255.255.255.0

neighbor 12.1.1.2 remote-as 2 码。 R2:

interface Loopback0

ip address 2.2.2.2 255.255.255.0 !

interface FastEthernet0/0 no ip address shutdown duplex half !

interface Serial1/0

ip address 12.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 23.1.1.1 255.255.255.0

注意在指邻居的时候仍然指大的AS号52

serial restart-delay 0

router ospf 1 router-id 2.2.2.2

log-adjacency-changes

network 2.2.2.0 0.0.0.255 area 0 network 23.1.1.0 0.0.0.255 area 0 network 34.1.1.0 0.0.0.255 area 0 !

router bgp 65512 no synchronization

bgp log-neighbor-changes

bgp confederation identifier 2 此时R2定义为AS65512 但是他要对他的

EBGP邻居通告的AS号是AS 2 这条语句的含义就是对他的EBGP邻居宣告自己是AS 2

neighbor 3.3.3.3 remote-as 65512

neighbor 3.3.3.3 update-source Loopback0 neighbor 3.3.3.3 next-hop-self neighbor 12.1.1.1 remote-as 1

R3:

interface Loopback0

ip address 3.3.3.3 255.255.255.0 !

interface FastEthernet0/0 no ip address shutdown duplex half !

interface Serial1/0

ip address 23.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 34.1.1.1 255.255.255.0 serial restart-delay 0

router ospf 1

log-adjacency-changes

network 3.3.3.0 0.0.0.255 area 0 network 23.1.1.0 0.0.0.255 area 0 network 34.1.1.0 0.0.0.255 area 0 !

router bgp 65512

53

no synchronization

bgp log-neighbor-changes

bgp confederation identifier 2 此时R3定义为AS65512 但是他要对他的EBGP邻居通告的AS号是AS 2 这条语句的含义就是对他的EBGP邻居宣告自己是AS 2

bgp confederation peers 65513 因为在这个拓扑里R3和R4是联盟的EBGP邻居,既然是EBGP邻居他们按照上面的命令都会对自己的EBGP邻居宣告自己是AS 2,这个时候R3和R4都说自己是AS 2他们之间的邻居关系是不能建立的,所以bgp confederation peers 65513这条命令的作用就是告诉自己的联盟EBGP,我们建立邻居关系的时候不需要通告大的AS号码,只需要通告联盟内部的AS就行。

neighbor 2.2.2.2 remote-as 65512

neighbor 2.2.2.2 update-source Loopback0 neighbor 4.4.4.4 remote-as 65513

neighbor 4.4.4.4 ebgp-multihop 2 虽然是联盟的EBGP但他们也是EBGP

邻居所以需要指定多跳。

neighbor 4.4.4.4 update-source Loopback0

R4:

router bgp 65513 no synchronization

bgp log-neighbor-changes

bgp confederation identifier 2 原因同上 bgp confederation peers 65512 原因同上 neighbor 3.3.3.3 remote-as 65512

neighbor 3.3.3.3 ebgp-multihop 2 原因同上 neighbor 3.3.3.3 update-source Loopback0 neighbor 3.3.3.3 next-hop-self neighbor 45.1.1.2 remote-as 3

R5:

router bgp 3

no synchronization

bgp log-neighbor-changes

network 5.5.5.0 mask 255.255.255.0 neighbor 45.1.1.1 remote-as 2 no auto-summary

这个时候查看R2的BGP表: Router# show ip bgp

BGP table version is 4, local router ID is 2.2.2.2

54

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 12.1.1.1 0 0 1 i

*>i5.5.5.0/24 4.4.4.4 0 100 0 (65513) 3 i 可以看到5.5.5.0 这个网段是可以学习到的,同时注意AS65513是被括号扩起来的,原因就是AS 65513是联盟AS号,是AS 2内部的AS,是不会传出本AS的。在边界路由器上会把这个AS号去掉。在R1上查看BGP表可以验证。 Router# show ip bgp

BGP table version is 18, local router ID is 172.16.3.1

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 0.0.0.0 0 32768 i *> 5.5.5.0/24 12.1.1.2 0 2 3 i

在R1上查看BGP表看到AS65513没有了,就是在边界路由器R2上去掉了。

实验完毕.

实验:AS-PATH属性决定路由选路

拓扑如上:R2和R5通过F0/0口相连,R2:S1/1—R3:S1/0 R3: S1/1---R4:S1/0 R4: S1/1---R5 S1/0

55

R2和R5在AS1 R3和R4 在AS 2

每台路由器的具体配置如下: R2:

interface Loopback0

ip address 1.1.1.1 255.255.255.0 !

interface Loopback1

ip address 172.16.1.1 255.255.255.0 !

interface Loopback2

ip address 172.16.3.1 255.255.255.0 !

interface FastEthernet0/0

ip address 25.1.1.1 255.255.255.0 duplex half !

interface Serial1/1

ip address 23.1.1.1 255.255.255.0 serial restart-delay 0

router bgp 1

network 23.1.1.0 mask 255.255.255.0 network 25.1.1.0 mask 255.255.255.0 network 172.16.1.0 mask 255.255.255.0 network 172.16.3.0 mask 255.255.255.0 neighbor 23.1.1.2 remote-as 2 neighbor 25.1.1.2 remote-as 1

R3:

interface Serial1/0

ip address 23.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 34.1.1.1 255.255.255.0 serial restart-delay 0

router bgp 2

no synchronization

bgp log-neighbor-changes

network 23.1.1.0 mask 255.255.255.0

通告接口地址 56

network 34.1.1.0 mask 255.255.255.0 neighbor 23.1.1.1 remote-as 1 neighbor 34.1.1.2 remote-as 2 neighbor 34.1.1.2 next-hop-self R4:

interface Serial1/0

ip address 34.1.1.2 255.255.255.0 serial restart-delay 0 !

interface Serial1/1

ip address 45.1.1.2 255.255.255.0 serial restart-delay 0 router bgp 2

no synchronization

bgp log-neighbor-changes

network 34.1.1.0 mask 255.255.255.0 network 45.1.1.0 mask 255.255.255.0 neighbor 34.1.1.1 remote-as 2 neighbor 45.1.1.1 remote-as 1

neighbor 45.1.1.1 ebgp-multihop 2 R5:

interface FastEthernet0/0

ip address 25.1.1.2 255.255.255.0 duplex half !

interface Serial1/0

ip address 45.1.1.1 255.255.255.0 serial restart-delay 0 router bgp 1

no synchronization

bgp log-neighbor-changes neighbor 25.1.1.1 remote-as 1 neighbor 45.1.1.2 remote-as 2

此时查看R4的BGP表: Router#SHOW ip bgp

BGP table version is 39, local router ID is 45.1.1.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path

57

* 23.1.1.0/24 45.1.1.1 0 1 i *>i 34.1.1.1 0 100 0 i *> 25.1.1.0/24 45.1.1.1 0 1 i * i 34.1.1.1 0 100 0 1 i *> 34.1.1.0/24 0.0.0.0 0 32768 i * i 34.1.1.1 0 100 0 i *> 45.1.1.0/24 0.0.0.0 0 32768 i * i172.16.1.0/24 34.1.1.1 0 100 0 1 i *> 45.1.1.1 0 1 i *> 172.16.3.0/24 45.1.1.1 0 1 i * i 34.1.1.1 0 100 0 1 i

发现去往172.16.1.0和172.16.3.0网段的路由都是经过R5到达的,现在的要求是这两个网段的路由要经过R3到达,此时除了采用本地优先属性和MED属性外,还可以采用AS-PATH属性。因为根据R4的BGP表可以看到172.16.1.0和172.16.3.0都是从AS 1学习到的,根据AS-PATH属性,BGP在选择最优路由的时候会选择所经过AS最少的路由,所以现在可以将通过R5学习到的路由的AS变多,此时这两个网段就会选择所经AS少的那条路径,既经R3到达R2.具体的配置在R5上实施。配置如下 在BGP进程中敲入下面的命令:

neighbor 45.1.1.2 route-map zhang out 在出口上对R4做策略。 在全局模式下:

ip prefix-list 1 seq 5 permit 172.16.1.0/24 !

route-map zhang permit 10 match ip address prefix-list 1 set as-path prepend 200 300 !

route-map zhang permit 20

此route-map的作用就是将由R5通告给R4的172.16.1.0这条路由的AS中加入200 300 让这条路由在R4中显示所经过的AS是1 200 300 I 此时由于R4从R5学习到的这条路由的AS变多了,所以R4就会选择途径R3到达这条网段。查看R4的BGP 表: Router#SHOW ip bgp

BGP table version is 40, local router ID is 45.1.1.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path * 23.1.1.0/24 45.1.1.1 0 1 i *>i 34.1.1.1 0 100 0 i *> 25.1.1.0/24 45.1.1.1 0 1 i

58

* i 34.1.1.1 0 100 0 1 i *> 34.1.1.0/24 0.0.0.0 0 32768 i * i 34.1.1.1 0 100 0 i *> 45.1.1.0/24 0.0.0.0 0 32768 i *>i172.16.1.0/24 34.1.1.1 0 100 0 1 i

* 45.1.1.1 0 1 200 300 i *> 172.16.3.0/24 45.1.1.1 0 1 i * i 34.1.1.1 0 100 0 1 i

符合要求,但是此时注意看由R5学习到这条路由的AS顺序, 0 1 200 300 I ,说明这条路由先经过则略定义的AS 然后在经过AS 1 。如 果将R5上的策略删除。将该策略在R4上做结果是什么样的呢?

先删除R5上的策略在R4上做相应的策略配置如下: 在R4的BGP进程中:

neighbor 45.1.1.1 route-map zhang in 注意方向

在全局模式下

ip prefix-list 1 seq 5 permit 172.16.1.0/24 !

route-map zhang permit 10 match ip address prefix-list 1 set as-path prepend 200 300 !

route-map zhang permit 20 此时再次查看R4的BGP表: Router#show ip bgp

BGP table version is 42, local router ID is 45.1.1.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path * 23.1.1.0/24 45.1.1.1 0 1 i *>i 34.1.1.1 0 100 0 i *> 25.1.1.0/24 45.1.1.1 0 1 i * i 34.1.1.1 0 100 0 1 i *> 34.1.1.0/24 0.0.0.0 0 32768 i * i 34.1.1.1 0 100 0 i *> 45.1.1.0/24 0.0.0.0 0 32768 i *>i172.16.1.0/24 34.1.1.1 0 100 0 1 i

* 45.1.1.1 0 200 300 1 i *> 172.16.3.0/24 45.1.1.1 0 1 i * i 34.1.1.1 0 100 0 1 i

可以看出经过R5学习到的路由的AS变成200 300 1 所以实际情况要求AS怎

59

么走,就要在不同的路由器上做策略。

但是这只是在试验,真是的网络中不允许胡乱添加AS的,如上面的例子,如果在现网中有AS 200 AS 300 ,当这条路由传到这两个AS中的时候,根据AS-PATH防环机制,这条路由将不会被放入BGP表,那这两个AS中的中端就不能到达172.16.1.0这个网段。所以在添加AS的时候一般情况下市添加自己的AS号码,比如现在在R4上不添加AS 200 AS 300 而是添加自己的AS 2 结果如下: ip prefix-list 1 seq 5 permit 172.16.1.0/24 !

route-map zhang permit 10 match ip address prefix-list 1 set as-path prepend 2 2 2 !

route-map zhang permit 20

此时再次查看R4的BGP表:

*>i172.16.1.0/24 34.1.1.1 0 100 0 1 i

* 45.1.1.1 0 2 2 2 1 i 这样就不会造成路由环路。

下面一个问题,此时还是将策略做在R5上,然后查看R4的BGP表: Router#show ip bgp

BGP table version is 44, local router ID is 45.1.1.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path * 23.1.1.0/24 45.1.1.1 0 1 i *>i 34.1.1.1 0 100 0 i *> 25.1.1.0/24 45.1.1.1 0 1 i * i 34.1.1.1 0 100 0 1 i *> 34.1.1.0/24 0.0.0.0 0 32768 i * i 34.1.1.1 0 100 0 i *> 45.1.1.0/24 0.0.0.0 0 32768 i *>i172.16.1.0/24 34.1.1.1 0 100 0 1 i

* 45.1.1.1 0 1 200 300 i *> 172.16.3.0/24 45.1.1.1 0 1 i * i 34.1.1.1 0 100 0 1 i

如果这个时候因为某种特殊的需要,在R4上到达172.16.1.0网段必须经过R5到达,这个时候应该怎么办?一种解决办法是在R4上面配置本地优先属性,将R4的本地优先值修改的大一些,R4具体配置如下: 在R4的BGP 进程中:

60

neighbor 45.1.1.1 route-map liang in 注意方向 在全局模式下:

ip prefix-list 1 seq 5 permit 172.16.1.0/24 !

ip prefix-list 2 seq 5 permit 0.0.0.0/0 le 32 !

route-map liang permit 10 match ip address prefix-list 1 set local-preference 200 !

route-map liang permit 20

此route-map的作用就是将前缀列表匹配的路由的本地优先值修改的大一些,这时再次查看R4的BGP表: Router# show ip bgp

BGP table version is 45, local router ID is 45.1.1.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path * 23.1.1.0/24 45.1.1.1 0 1 i *>i 34.1.1.1 0 100 0 i *> 25.1.1.0/24 45.1.1.1 0 1 i * i 34.1.1.1 0 100 0 1 i *> 34.1.1.0/24 0.0.0.0 0 32768 i * i 34.1.1.1 0 100 0 i *> 45.1.1.0/24 0.0.0.0 0 32768 i

*> 172.16.1.0/24 45.1.1.1 200 0 1 200 300 i *> 172.16.3.0/24 45.1.1.1 0 1 i * i 34.1.1.1 0 100 0 1 i 可以看到现在172。16.1。0这个网段是经过R5的。但这个时候又发现一个问题,为什么去往172.16.1.0这个网段只有一条路由了,好像R3并没有给R4通告经由R2到达的那条路由,现在在R3上查看都给R4通告了那些路由: Router#show ip bgp neighbors 34.1.1.2 advertised-routes BGP table version is 31, local router ID is 34.1.1.1

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path *> 23.1.1.0/24 0.0.0.0 0 32768 i *> 25.1.1.0/24 23.1.1.1 0 0 1 i *> 34.1.1.0/24 0.0.0.0 0 32768 i

61

*> 172.16.3.0/24 23.1.1.1 0 300 0 1 i

可以看到确实没有通告1.0这个网段为什么呢?这是再次查看R3的BGP表: Router#show ip bgp

BGP table version is 31, local router ID is 34.1.1.1

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path *> 23.1.1.0/24 0.0.0.0 0 32768 i * 23.1.1.1 0 0 1 i * i25.1.1.0/24 45.1.1.1 0 100 0 1 i *> 23.1.1.1 0 0 1 i * i34.1.1.0/24 34.1.1.2 0 100 0 i *> 0.0.0.0 0 32768 i *>i45.1.1.0/24 34.1.1.2 0 100 0 i

*>i172.16.1.0/24 45.1.1.1 0 200 0 1 200 300 i * 23.1.1.1 0 0 1 i *> 172.16.3.0/24 23.1.1.1 0 300 0 1 i

可以发现这时R3去往172.16.1.0这个网段的最优路由也是经过R5的,BGP在通告路由的时候都是通告最优路由,此时在R4上去往1.0网段的最优路由也是这个所以R3就没有通告了。当R4和R5之间的链路断掉后,此时去往1.0网段的最优路由是经过R2的,这时候就通告了,结果如下(将R4与R5之间的链路断掉):

这时查看R3向R4通告了那些路由:

Router#show ip bgp neighbors 34.1.1.2 advertised-routes BGP table version is 33, local router ID is 34.1.1.1

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path *> 23.1.1.0/24 0.0.0.0 0 32768 i *> 25.1.1.0/24 23.1.1.1 0 0 1 i *> 34.1.1.0/24 0.0.0.0 0 32768 i *> 172.16.1.0/24 23.1.1.1 0 0 1 i *> 172.16.3.0/24 23.1.1.1 0 300 0 1 i 这时他就通告了1.0这个网段,在R4上查看一下BGP表: Router#show ip bgp

BGP table version is 73, local router ID is 45.1.1.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

62

Network Next Hop Metric LocPrf Weight Path *>i23.1.1.0/24 34.1.1.1 0 100 0 i *>i25.1.1.0/24 34.1.1.1 0 100 0 1 i *> 34.1.1.0/24 0.0.0.0 0 32768 i * i 34.1.1.1 0 100 0 i *>i172.16.1.0/24 34.1.1.1 0 100 0 1 i *>i172.16.3.0/24 34.1.1.1 0 300 0 1 i 从而验证了BGP通告的都是最优路由。实验完毕。

实验:

拓扑结构和上面的一致,本实验将R1 R2放置在AS 1 将R3 R4 放置在AS 2 首先完成BGP的基本配置,现在查看R3的BGP表,发现去往130网段的路由的下一条是192.168.1.1,查看R4的BGP表发现去往130网段的路由下一跳是192.168.2.2。此时因为R3和R2之间的链路是2M而R4和R1之间的链路是100M以太网,现在希望R3去往130网段也走R4 R1这条链路,所以现在只需要在R4上将本地的优先值设置的比默认大就可以了。本地优先是决定离开本自制系统的最佳路由。 R4具体配置为: router bgp 2

no synchronization bgp router-id 4.4.4.4

bgp default local-preference 200 bgp log-neighbor-changes neighbor 10.1.1.1 remote-as 2 neighbor 192.168.2.2 remote-as 1 no auto-summary

此时再次查看R3的BGP表:

63

Router#show ip bgp

BGP table version is 20, local router ID is 3.3.3.3

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path *> 130.130.1.0/24 192.168.1.1 0 1 i * i 192.168.2.2 0 200 0 1 i * i172.16.1.0/24 192.168.2.2 0 200 0 1 i *> 192.168.1.1 0 1 i

发现实际情况并没有按照预先设计的,现在R3去往130网段的下一条仍然是192.168.1.1。原因是什么呢?此时查看R3的路由表 Router#show ip rou

Codes: C - connected, S - static, 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

i - IS-IS, su - IS-IS summary, 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

Gateway of last resort is not set

172.16.0.0/24 is subnetted, 1 subnets

B 172.16.1.0 [20/0] via 192.168.1.1, 00:06:20 10.0.0.0/24 is subnetted, 1 subnets

C 10.1.1.0 is directly connected, Serial1/1 130.130.0.0/24 is subnetted, 1 subnets

B 130.130.1.0 [20/0] via 192.168.1.1, 00:06:20 C 192.168.1.0/24 is directly connected, Serial1/0 发现要想通过R4到达130网段,他的下一条是192.168.2.2但是此时路由表里根本没有此路由。这就是BGP基本配置的问题也是很容易忽略的问题。在进行BGP基本配置的时候一定要将EBGP相连的接口地址也进行通告,否则其他AS的路由器不知道下一跳的路由,所以就不会选择该路由。在此图中因为比较简单,有两种方法可以实现,第一在R4上将R3的下一条设置为自己。neighbor 10.1.1.1 next-hop-self 这时再次查看R3的BGP表:

Network Next Hop Metric LocPrf Weight Path * 130.130.1.0/24 192.168.1.1 0 1 i

*>i 10.1.1.2 0 200 0 1 i此时去往130网段的路由是按照预想的走R4 到R1。第二种方法就是在每个边界路由器上宣告接口地址,这是很实用的方法。 router bgp 2

no synchronization

64

bgp router-id 4.4.4.4

bgp default local-preference 200 bgp log-neighbor-changes

network 10.1.1.0 mask 255.255.255.0 宣告与R4相连的接口地址给其他的

EBGP,同理在其他边界路由器上也要做相应的宣告。

network 192.168.2.0

neighbor 10.1.1.1 remote-as 2 neighbor 192.168.2.2 remote-as 1 这个时候再次查看R3的BGP表: Router#show ip bgp

Network Next Hop Metric LocPrf Weight Path r>i10.1.1.0/24 10.1.1.2 0 200 0 i * 130.130.1.0/24 192.168.1.1 0 1 i *>i 192.168.2.2 0 200 0 1 i *>i172.16.1.0/24 192.168.2.2 0 200 0 1 i * 192.168.1.1 0 1 i *>i192.168.2.0 10.1.1.2 0 200 0 i 此时R3去往130网段的路由的下一条是192.168.2.2 。实验完成。 2

采用route-map完成此项配置,首先将R4上的bgp default local-preference 200 掉,因为130这个网段是R4从R1学习到的,所以route-map的策略要对R1做。具体配置如下: router bgp 2

no synchronization bgp router-id 4.4.4.4

bgp log-neighbor-changes

network 10.1.1.0 mask 255.255.255.0 network 192.168.2.0

neighbor 10.1.1.1 remote-as 2 neighbor 192.168.2.2 remote-as 1

neighbor 192.168.2.2 route-map zhang in 在R4的IN口做route-map no auto-summary !

access-list 1 permit 130.130.1.0 0.0.0.255 !

route-map zhang permit 10 该route-map的作用就是如果匹配访

问列表1,将匹配的路由的本地优先属性设置为200

match ip address 1

set local-preference 200 !

route-map zhang permit 20

65

此时查看 R3的BGP表: Router#show ip bgp

BGP table version is 34, local router ID is 3.3.3.3

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path r>i10.1.1.0/24 10.1.1.2 0 100 0 i * 130.130.1.0/24 192.168.1.1 0 1 i *>i 192.168.2.2 0 200 0 1 i * i172.16.1.0/24 192.168.2.2 0 100 0 1 i *> 192.168.1.1 0 1 i *>i192.168.2.0 10.1.1.2 0 100 0 i 符合预先的设计。试验完成。

在用route-map的时候一定要注意方向问题,在次试验中因为130网段是从R1学习到的所以这个策略的作用就是把从R1学习到的130网段的本地属性设置为200,其他网段的路由是默认值。

66

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务