该文档涉及的命令有:

neighbor [ip-address|peer-group-name] advertise-map [route-map-name1] non-exist-map [route-map-name2]

neighbor [ip-address|peer-group-name] default-originate

neighbor [ip-address|peer-group-name] default-originate route-map xxx

3-6-1 neighbor [ip-address|peer-group-name] advertise-map [route-map-name1] non-exist-map [route-map-name2]

这个命令实际上就是我们常说的条件路由。

如果强制性翻译成中文,比如下面的命令:

neighbor 172.17.1.2 advertise-map secondery non-exist-map primary

对于邻居172.17.1.2,如果route-map通告的路由primary已经不存在于BGP表中了那么将会通告secondery route-map172.17.1.2

Advertise-map的作用是如果主要前缀在BGP表中显身bgp路由器便不得将次要前缀通告给bgp对等体要是主要前缀从bgp表中消失那么便通告次要前缀

03-6 route-map/默认路由_target

在这个拓扑中,R1的配置为

interface Loopback0

ip address 1.1.1.1 255.255.255.0

!

interface Loopback1

ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet0/0

ip address 172.17.1.1 255.255.255.0

duplex full

speed auto

!

router bgp 100

no synchronization

bgp log-neighbor-changes

network 1.1.1.0 mask 255.255.255.0

network 2.2.2.0 mask 255.255.255.0

neighbor 172.17.1.2 remote-as 100

no auto-summary

!

no ip http server

no ip http secure-server

!

R2的配置为

interface FastEthernet0/0

ip address 172.17.1.2 255.255.255.0

duplex full

speed auto

!

router bgp 100

no synchronization

bgp log-neighbor-changes

neighbor 172.17.1.1 remote-as 100

no auto-summary

!

最后在R2上面看到的结果是2条路由都可以通告过来:

03-6 route-map/默认路由_style_02

现在把需求稍加修改:

03-6 route-map/默认路由_style_03

对于R2来说依然是简单的设置对端邻居的bgp配置,不做任何修改。对于R1来说需要在bgp 100下面设置一条条件通告:

03-6 route-map/默认路由_style_04

最后我们可以一步一步来看:

在R1上面,show ip bgp,1.1.1.1和2.2.2.2这两个路由都存在:

03-6 route-map/默认路由_blank_05

在R2上面,只学到1.1.1.0/24的主要路由:

03-6 route-map/默认路由_blank_06

这里可以看到,虽然R1上面两个路由都存在,但是因为1.1.1.0/24这个主用前缀是在R1的bgp表中的,所以R1将只会通告1.1.1.0/24的路由给R2.

R2也只能学到1.1.1.0这个路由,并且对于R2来说,2.2.2.0/24是不可知的。

所以不能ping通。

下面将在R1上面将interface loopback 0 : 1.1.1.1/24 shutdown.

那么R1因为1.1.1.0/24在bgp表中消失了,所以应该立即将2.2.2.0/24通告给R2.

03-6 route-map/默认路由_路由_07

最后在R2上面,我们可以看到,1.1.1.0/24已经没有了,现在学到的是2.2.2.0/24的路由信息从R1上面:

03-6 route-map/默认路由_路由_08

这就是今天说明的条件路由通告的用法。

3-6-2 neighbor [ip-address|peer-group-name] default-originate

关于这个命令,很简单。就是通告默认路由的东东。

但是这个命令会产生一个问题,轻易cisco是不推荐使用该命令的。

原因就是:

虽然使用default-originate形式的neighbor通告给指定邻居默认路由,通过bgp来通告默认路由,但是,在默认路由所指的网关失效的情况下,路由器也会打肿脸充胖子,将默认路由通告过去,最后形成路由黑洞,数据包都不知道丢到哪里去了。

03-6 route-map/默认路由_style_09

因为这个概念很简单,所以带过就是.重点是和命令default-originate information 对比记忆。

R2的配置:(在R2上面我用null0作为下一跳来模拟一个默认路由)

router bgp 100

no synchronization

bgp log-neighbor-changes

neighbor 172.17.1.1 remote-as 100

neighbor 172.17.1.1 default-originate

no auto-summary

!

ip route 0.0.0.0 0.0.0.0 Null0

那么R1自然而然的就学到了这条路由了:

03-6 route-map/默认路由_style_10

这里我做一个列表来比较一下两个命令的不同点:

命令

default-orginate information

neighbor x.x.x.x default-originate

配置模式

配置在BGP进程下面,针对于所有邻居

配置于BGP进程下面,针对于某一个邻居

产生条件

1,创建静态默认路由

2,将静态默认路由重分发进bgp进程

3,设置BGP命令default-information originate

1,创建静态路由 2, 在BGP进程下面配置命令neighbor x.x.x.x default-originate 3, 不需要重分发静态默认路由

弊端/好处

该命令的好处就是,如果默认的静态路由因为接口down了,或者因为对端不可达接口被keepalive down下去,那么本地bgp是不会发送默认路由到对端的。

打肿脸冲胖子,只要配置里面有默认路由,不管是否写到核心路由表中,那么一定会通告给指定邻居, 有可能造成路由黑洞.

3-6-3 neighbor [ip-address|peer-group-name] default-originate route-map [name]

前面说过的命令neighbor x.x.x.x default-originate

这个命令是只要创建一条静态路由然后在bgp进程下面写neighbor x.x.x.x default-originate就可以将默认路由通告给BGP邻居。但是有一个问题这里:

如果,在本地的出接口是出于UP的状态,那么那条默认路由就一定会写在核心路由表中,如果核心路由表有这条路由,bgp就一定会通告给对端的邻居。

但是如果那条默认路由已经不可达对端了呢?

这个时候路由器还是傻乎乎的通告默认路由给对端,最后形成了路由黑洞。数据包不知道甩到哪里去了已经。

为了解决这个问题,那么现在路由器要变得更加智能一些。

比如说有一条默认路由或者是静态路由要达到网段3.3.3.0/24的时候,首先本地路由器会去见车3.3.3.0的网络是否可达,如果可达,才会传递给邻居去。如果不可达的时候,邻居是不会从本地学到这条默认路由的,这,也就解决了路由黑洞的问题。

03-6 route-map/默认路由_路由_11

首先把环境搭建起来.

R2的配置为:

router bgp 100

no synchronization

bgp log-neighbor-changes

neighbor 172.17.1.1 remote-as 100

neighbor 172.17.1.1 default-originate route-map tanzhen

no auto-summary

!

ip route 0.0.0.0 0.0.0.0 2.1.1.2

!

access-list 1 permit 2.1.1.0 0.0.0.255

!

route-map tanzhen permit 10

match ip address 1

在R3上面直接就是一个默认路由指向R2. ip route 0.0.0.0 0.0.0.0 2.1.1.1

好了,现在来验证一下:

当bgp邻居已经建立好以后,并且R2的接口F0/1是up的情况,而且对端也是可达的情况,那么这个时候,R1应该可以学到一条从R2通告过来的默认路由,下一跳是指向R2的172.17.1.2作为出口的,意思是R2才是整个AS的出口网关.

03-6 route-map/默认路由_标签_12

如果这个时候把R2的接口F0/1 给down掉。

03-6 route-map/默认路由_路由_13

最后在R1上面那条默认路由就没有了。因为R2通告过来了。

03-6 route-map/默认路由_style_14

这个就是有条件性的选择通告与否的应用。

当目的网段可达的时候,就通告,当目的网段不可达的时候,马上撤回以前通告出去的默认路由。