天天看點

03-6 route-map/預設路由

該文檔涉及的指令有:

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

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

<b>這個指令實際上就是我們常說的條件路由。</b><b></b>

<b>如果強制性翻譯成中文,比如下面的指令:</b><b></b>

<b>neighbor 172.17.1.2 advertise-map secondery non-exist-map primary</b>

<b>對于鄰居</b><b>172.17.1.2,</b><b>如果</b><b>route-map</b><b>通告的路由</b><b>primary</b><b>已經不存在于</b><b>BGP</b><b>表中了</b><b>,</b><b>那麼将會通告</b><b>secondery route-map</b><b>給</b><b>172.17.1.2</b>

<b>Advertise-map</b><b>的作用是</b><b>:</b><b>如果主要字首在</b><b>BGP</b><b>表中顯身</b><b>,</b><b>bgp</b><b>路由器便不得将次要字首通告給</b><b>bgp</b><b>對等體</b><b>,</b><b>要是主要字首從</b><b>bgp</b><b>表中消失</b><b>,</b><b>那麼便通告次要字首</b>。

<b>在這個拓撲中,</b><b>R1</b><b>的配置為</b>:

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

<b>R2</b><b>的配置為</b><b>:</b>

ip address 172.17.1.2 255.255.255.0

neighbor 172.17.1.1 remote-as 100

最後在R2上面看到的結果是2條路由都可以通告過來:

現在把需求稍加修改:

對于R2來說依然是簡單的設定對端鄰居的bgp配置,不做任何修改。對于R1來說需要在bgp 100下面設定一條條件通告:

最後我們可以一步一步來看:

在R1上面,show ip bgp,1.1.1.1和2.2.2.2這兩個路由都存在:

在R2上面,隻學到1.1.1.0/24的主要路由:

這裡可以看到,雖然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.

最後在R2上面,我們可以看到,1.1.1.0/24已經沒有了,現在學到的是2.2.2.0/24的路由資訊從R1上面:

這就是今天說明的條件路由通告的用法。

<b>3-6-2 neighbor [ip-address|peer-group-name] default-originate</b>

關于這個指令,很簡單。就是通告預設路由的東東。

但是這個指令會産生一個問題,輕易cisco是不推薦使用該指令的。

原因就是:

雖然使用default-originate形式的neighbor通告給指定鄰居預設路由,通過bgp來通告預設路由,但是,在預設路由所指的網關失效的情況下,路由器也會打腫臉充胖子,将預設路由通告過去,最後形成路由黑洞,資料包都不知道丢到哪裡去了。

因為這個概念很簡單,是以帶過就是.重點是和指令default-originate information 對比記憶。

R2的配置:(在R2上面我用null0作為下一跳來模拟一個預設路由)

<b>neighbor 172.17.1.1 default-originate</b>

ip route 0.0.0.0 0.0.0.0 Null0

那麼R1自然而然的就學到了這條路由了:

這裡我做一個清單來比較一下兩個指令的不同點:

指令

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是不會發送預設路由到對端的。

打腫臉沖胖子,隻要配置裡面有預設路由,不管是否寫到核心路由表中,那麼一定會通告給指定鄰居, 有可能造成路由黑洞.

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

<b>前面說過的指令</b><b>:</b><b>neighbor x.x.x.x default-originate</b>

<b>這個指令是隻要建立一條靜态路由</b><b>,</b><b>然後在</b><b>bgp</b><b>程序下面寫</b><b>neighbor x.x.x.x default-originate</b><b>就可以将預設路由通告給</b><b>BGP</b><b>鄰居。但是有一個問題這裡:</b><b></b>

<b>如果,在本地的出接口是出于</b><b>UP</b><b>的狀态,那麼那條預設路由就一定會寫在核心路由表中,如果核心路由表有這條路由,</b><b>bgp</b><b>就一定會通告給對端的鄰居。</b><b></b>

<b>但是如果那條預設路由已經不可達對端了呢?</b><b></b>

<b>這個時候路由器還是傻乎乎的通告預設路由給對端,最後形成了路由黑洞。資料包不知道甩到哪裡去了已經。</b><b></b>

<b>為了解決這個問題,那麼現在路由器要變得更加智能一些。</b><b></b>

<b>比如說有一條預設路由或者是靜态路由要達到網段</b><b>3.3.3.0/24</b><b>的時候,首先本地路由器會去見車</b><b>3.3.3.0</b><b>的網絡是否可達,如果可達,才會傳遞給鄰居去。如果不可達的時候,鄰居是不會從本地學到這條預設路由的,這,也就解決了路由黑洞的問題。</b>

首先把環境搭建起來.

<b>R2</b><b>的配置為:</b>

<b>neighbor 172.17.1.1 default-originate route-map tanzhen</b>

ip route 0.0.0.0 0.0.0.0 2.1.1.2

<b>access-list 1 permit 2.1.1.0 0.0.0.255</b>

<b>route-map tanzhen permit 10</b>

<b>match ip address 1</b>

在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的出口網關.

如果這個時候把R2的接口F0/1 給down掉。

最後在R1上面那條預設路由就沒有了。因為R2通告過來了。

這個就是有條件性的選擇通告與否的應用。

當目的網段可達的時候,就通告,當目的網段不可達的時候,馬上撤回以前通告出去的預設路由。

本文轉自 hny2000 51CTO部落格,原文連結:http://blog.51cto.com/361531/717240

繼續閱讀