1. 程式人生 > 其它 >交換機在江湖】路由策略專題-第3期-地址字首列表

交換機在江湖】路由策略專題-第3期-地址字首列表

交換機在江湖】路由策略專題-第3期-地址字首列表

交換機在江湖官方號2016-11-21 10:27:17最新回覆:2020-08-07 16:54:37 1.6W351115

第3期地址字首列表

想對接收的路由/釋出的路由/引入的路由進行過濾,或者設定相關的路由屬性?第一步當然要先篩選出想要的路由,通過ACL或者地址字首列表(ip ip-prefix)都可以實現。在上一期route-policy的介紹中我們就是採用ACL來篩選路由的,ACL大家平時接觸的也比較多,但地址字首列表是什麼、怎麼用?地址字首列表和ACL有什麼區別?這一期的路由策略專題我們將會詳細介紹這些內容。

1地址字首列表與ACL的區別

讓我們先來看兩個具體的例子。

示例1-通過ACL對引入的路由進行過濾

如圖1所示,通過ACL實現將RIP中的2條路由引入到OSPF中,並設定路由的開銷值。

圖1通過ACL對引入的路由進行過濾

檢視SwitchB上的路由表,有2條RIP路由192.168.2.0/24和192.168.3.0/24,想將這2條路由重發布到OSPF中,並將192.168.2.0/24這條路由的開銷值設定為10,192.168.3.0/24這條路由的開銷值設定為20。

[SwitchB] display ip routing-table

Route Flags: R - relay, D - download to fib

-----------------------------------------------------------------------------

Routing Tables: Public

Destinations : 8 Routes : 8

Destination/Mask Proto Pre Cost Flags NextHop Interface

10.1.1.0/24 Direct 0 0 D 10.1.1.1 Vlanif20

10.1.1.1/32 Direct 0 0 D 127.0.0.1 Vlanif20

127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0

127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0

192.168.1.0/24 Direct 0 0 D 192.168.1.2 Vlanif10

192.168.1.2/32 Direct 0 0 D 127.0.0.1 Vlanif10

192.168.2.0/24 RIP 100 1 D 192.168.1.1 Vlanif10

192.168.3.0/24 RIP 100 1 D 192.168.1.1 Vlanif10

1.配置ACL,過濾出想要的路由

#配置基本ACL 2001,匹配路由網路號192.168.2.0。

[SwitchB] acl 2001

[SwitchB-acl-basic-2001] rule permit source 192.168.2.0 0

[SwitchB-acl-basic-2001] quit

#配置基本ACL 2002,匹配路由網路號192.168.3.0。

[SwitchB] acl 2002

[SwitchB-acl-basic-2002] rule permit source 192.168.3.0 0

[SwitchB-acl-basic-2002] quit

2.配置route-policy,並對引入的路由應用route-policy

#配置route-policy RP的節點10,如果匹配基本ACL 2001,則設定路由開銷值為10。

[SwitchB] route-policy RP permit node 10

[SwitchB-route-policy] if-match acl 2001

[SwitchB-route-policy] apply cost 10

[SwitchB-route-policy] quit

#配置route-policy RP的節點20,如果匹配基本ACL 2002,則設定路由開銷值為20。

[SwitchB] route-policy RP permit node 20

[SwitchB-route-policy] if-match acl 2002

[SwitchB-route-policy] apply cost 20

[SwitchB-route-policy] quit

#配置在OSPF路由中引入通過route-policy RP過濾的RIP路由。

[SwitchB] OSPF

[SwitchB-ospf-1] import-route rip 1 route-policy RP

[SwitchB-ospf-1] quit

配置完成後,在SwitchC上檢視路由表,發現已經成功引入了2條RIP路由,並且路由開銷值已進行了相應的設定。

<SwitchC> display ip routing-table

Route Flags: R - relay, D - download to fib

-----------------------------------------------------------------------------

Routing Tables: Public

Destinations : 6 Routes : 6

Destination/Mask Proto Pre Cost Flags NextHop Interface

10.1.1.0/24 Direct 0 0 D 10.1.1.2 Vlanif20

10.1.1.2/32 Direct 0 0 D 127.0.0.1 Vlanif20

127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0

127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0

192.168.2.0/24 O_ASE 150 10 D 10.1.1.1 Vlanif20

192.168.3.0/24 O_ASE 150 20 D 10.1.1.1 Vlanif20

示例2-通過地址字首列表對引入的路由進行過濾

如圖2所示,SwitchB上有2條靜態路由,如果只想將192.168.0.0/16這1條路由引入OSPF中,該怎麼配置呢?

圖2通過地址字首列表對引入的路由進行過濾

檢視SwitchB上的路由表,有2條靜態路由192.168.0.0/16和192.168.0.0/24,只想將192.168.0.0/16這1條路由重發布到OSPF中。

[SwitchB] display ip routing-table

Route Flags: R - relay, D - download to fib

-----------------------------------------------------------------------------

Routing Tables: Public Destinations : 6 Routes : 6

Destination/Mask Proto Pre Cost Flags NextHop Interface

10.10.12.0/24 Direct 0 0 D 10.10.12.1 Vlanif10

10.10.12.1/32 Direct 0 0 D 127.0.0.1 Vlanif10

127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0

127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0

192.168.0.0/16 Static 60 0 D 0.0.0.0 NULL0

192.168.0.0/24 Static 60 0 D 0.0.0.0 NULL0

首先我們嘗試用ACL來實現。

1.配置基本ACL 2001

[SwitchB] acl 2001

[SwitchB-acl-basic-2001] rule permit source 192.168.0.0 0.0.255.255

[SwitchB-acl-basic-2001] quit

2.配置route-policy,並對引入的路由應用route-policy

#配置route-policy RP的節點10,如果匹配基本ACL 2001,則允許通過。其他所有未匹配成功的路由都被拒絕通過。

[SwitchB] route-policy RP permit node 10

[SwitchB-route-policy] if-match acl 2001

[SwitchB-route-policy] quit

#配置在OSPF路由中引入通過route-policy RP過濾的靜態路由。

[SwitchB] OSPF

[SwitchB-ospf-1] import-route static route-policy RP

[SwitchB-ospf-1] quit

配置完成後,在SwitchC上檢視路由表,發現有2條192.168.0.0網段的路由,2條路由都被引入了。這是由於ACL2001規則rule permit source 192.168.0.0 0.0.255.255中,0.0.255.255實際上是萬用字元,而不是掩碼長度。

所謂萬用字元,就是指換算成二進位制後,“0”表示需要匹配,“1”表示不需要匹配。例如192.168.0.0 0.0.255.255表示匹配網路號192.168.0.0~192.168.255.255,192.168.0.0/16和192.168.0.0/24都能匹配成功ACL2001,因此這2條路由匹配了route-policy RP的節點10,都被引入了。ACL無法實現只匹配192.168.0.0/16或者只匹配192.168.0.0/24,ACL只能匹配網路號,無法匹配掩碼

<SwitchC> display ip routing-table

Route Flags: R - relay, D - download to fib

-----------------------------------------------------------------------------

Routing Tables: Public

Destinations : 6 Routes : 6

Destination/Mask Proto Pre Cost Flags NextHop Interface

10.10.12.0/24 Direct 0 0 D 10.10.12.2 Vlanif10

10.10.12.2/32 Direct 0 0 D 127.0.0.1 Vlanif10

127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0

127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0

192.168.0.0/16 O_ASE 150 1 D 10.10.12.1 Vlanif10

192.168.0.0/24 O_ASE 150 1 D 10.10.12.1 Vlanif10

接下來,我們試試看用地址字首列表對引入的路由進行過濾,看是否能實現引入192.168.0.0/16這1條路由,過濾掉192.168.0.0/24。

1.配置地址字首列表,過濾出想要的路由

#地址字首列表為huawei,節點號10,允許192.168.0.0/16的路由通過。

[SwitchB] ip ip-prefix huawei index 10 permit 192.168.0.0 16

2.配置route-policy,並對引入的路由應用route-policy

#配置route-policy RP的節點10,如果匹配地址字首列表huawei,則允許通過;其他所有未匹配上的路由都將預設拒絕。

[SwitchB] route-policy RP permit node 10

[SwitchB-route-policy] if-match ip-prefix huawei

[SwitchB-route-policy] quit

#配置在OSPF路由中引入通過route-policy RP過濾的靜態路由。

[SwitchB] OSPF

[SwitchB-ospf-1] import-route static route-policy RP

[SwitchB-ospf-1] quit

配置完成後,在SwitchC上檢視路由表,成功實現了只引入192.168.0.0/16這1條路由。

<SwitchC> display ip routing-table

Route Flags: R - relay, D - download to fib

-----------------------------------------------------------------------------

Routing Tables: Public

Destinations : 5 Routes : 5

Destination/Mask Proto Pre Cost Flags NextHop Interface

10.10.12.0/24 Direct 0 0 D 10.10.12.2 Vlanif10

10.10.12.2/32 Direct 0 0 D 127.0.0.1 Vlanif10

127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0

127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0

192.168.0.0/16 O_ASE 150 1 D 10.10.12.1 Vlanif10

總結一下上面的兩個示例,ACL和地址字首列表都可以對路由進行篩選,ACL匹配路由時只能匹配路由的網路號,但無法匹配掩碼,也就是字首長度;而地址字首列表比ACL更為靈活,可以匹配路由的網路號及掩碼,增強了路由匹配的精確度。

2地址字首列表原理及應用

2.1地址字首列表的過濾規則

一個地址字首列表中可以建立多個索引項,每個索引對應一條過濾規則。如圖3所示,待過濾路由按照索引號從小到大的順序進行匹配:

²當匹配上某一索引項時,如果該索引項是permit,則這條路由被允許通過;如果該索引項是deny,則這條路由被拒絕通過。

²當遍歷了地址字首列表中的所有索引項,都沒有匹配上,那麼這條路由就被拒絕通過。

圖3地址字首列表原理

地址字首列表過濾路由的原則可以總結為:順序匹配、唯一匹配、預設拒絕。

順序匹配按索引號從小到大順序進行匹配。同一個地址字首列表中的多條表項設定不同的索引號,可能會有不同的過濾結果,實際配置時需要注意。

唯一匹配:待過濾路由只要與一個表項匹配,就不會再去嘗試匹配其他表項。

預設拒絕:預設所有未與任何一個表項匹配的路由都視為未通過地址字首列表的過濾。因此在一個地址字首列表中建立了一個或多個deny模式的表項後,需要建立一個表項來允許所有其他路由通過。

2.2地址字首列表中掩碼的匹配

地址字首列表與ACL相比的一大優勢就是可以對路由的掩碼進行匹配,在前面的示例中我們已經用到了精確匹配路由中的掩碼。不僅如此,地址字首列表還可以匹配一個掩碼範圍。

地址字首列表通過ip ip-prefix命令進行配置,常用格式如下:

ip ip-prefixip-prefix-name[indexindex-number] {permit|deny}ipv4-address mask-length[greater-equalgreater-equal-value] [less-equalless-equal-value]

其中ipv4-address mask-length[greater-equalgreater-equal-value] [less-equalless-equal-value]用於限定過濾路由的網路號及掩碼範圍,引數含義如表1所示。

引數

含義

ipv4-address

用於指定網路號

mask-length

用於限定網路號的前多少位需嚴格匹配

greater-equalgreater-equal-value

可以理解為掩碼≥greater-equal-value

less-equalless-equal-value

可以理解為掩碼≤less-equal-value

表1地址字首列表中地址範圍的表示

當待過濾的路由已匹配當前表項的網路號時,掩碼長度可以進行精確匹配或者在一定掩碼長度範圍內匹配。

Ø若不配置greater-equalless-equal,則進行精確匹配,即只匹配掩碼長度為mask-length的路由。

Ø若只配置greater-equal,則匹配的掩碼長度範圍為[greater-equal-value,32]。

Ø若只配置less-equal,則匹配的掩碼長度範圍為[mask-lengthless-equal-value]。

Ø若同時配置greater-equalless-equal,則匹配的掩碼長度範圍為[greater-equal-valueless-equal-value]。

2.3地址字首列表匹配示例

好啦,學了這麼多的理論,接下來讓我們實際操練一下試試。假設有這麼幾條路由10.1.1.0/24、10.1.1.0/26、10.1.1.1/32、10.2.2.0/24和10.1.0.0/16,你們有沒有辦法用地址字首列表篩選出想要的路由呢?

1.只想permit某1條路由?例如只permit 10.1.1.0/24這1條路由。

2.只想permit網路號相同,掩碼不同的某幾條路由,其他路由都deny?例如只permit 10.1.1.0/24、10.1.1.0/26、10.1.1.1/32這3條路由。

3.只想deny某1條路由,其他路由都permit?例如只deny10.1.1.0/24這1條路由。

答案請在下面示例中找~

------------------------------------示例1為單節點精確匹配示例---------------------------------------------

ü示例1:

ip ip-prefix test index 10 permit 10.1.1.0 24

匹配結果:只有路由10.1.1.0/24被permit,其他路由都被deny

說明:只有網路號、掩碼完全相同的路由才會匹配成功。

------------------------------------示例2-4為指定掩碼匹配範圍示例---------------------------------------

ü示例2:

ip ip-prefix test index 10 permit 10.1.1.0 24 less-equal 32

匹配結果:路由10.1.1.0/24、10.1.1.0/26、10.1.1.1/32被permit,其他路由被deny。

說明:網路號為10.1.1.0,掩碼長度在24-32之間的路由會被permit。

ü示例3:

ip ip-prefix test index 10 permit 10.1.1.0 24 greater-equal 26

匹配結果:路由10.1.1.0/26、10.1.1.1/32被permit,其他路由被deny。

說明:網路號為10.1.1.0,掩碼長度在26-32之間的路由會被permit。

ü示例4:

ip ip-prefix test index 10 permit 10.1.1.0 24 greater-equal 26 less-equal 32

匹配結果:路由10.1.1.0/26、10.1.1.1/32被permit,其他路由被deny。

說明:網路號為10.1.1.0,掩碼長度在26-32之間的路由會被permit。此示例效果與示例3相同。

--------------------------------示例5-6為通配地址(0.0.0.0)匹配示例--------------------------------------

通配地址0.0.0.0表示不限定網路號,只需要匹配掩碼範圍即可。表2中列出了幾種特殊的通配地址。

特殊的通配地址

含義

0.0.0.0 0

表示只匹配預設路由

0.0.0.0 0 less-equal 32

表示匹配所有路由

0.0.0.0 0 greater-equal 32

表示匹配所有主機路由

表2特殊的通配地址

說明:地址字首列表採用預設拒絕的匹配原則,在建立了一個或多個deny模式的表項後,需要建立一個permit 0.0.0.0 0 less-equal 32表項,允許所有其他路由通過。

ü示例5:

ip ip-prefix test index 10 permit 0.0.0.0 8 less-equal 32

匹配結果:5條路由均被permit。

說明:所有掩碼長度在8-32之間的路由都被permit

ü示例6:

ip ip-prefix test index 10 deny 10.1.1.0 24

ip ip-prefix test index 20 permit 0.0.0.0 0less-equal 32

匹配結果:只有路由10.1.1.0/24被deny,其他路由都被permit。

說明:路由10.1.1.0/24匹配字首列表test中索引10節點,但匹配模式是deny,因此結果是deny;索引20節點permit 0.0.0.0 0 less-equal 32表示允許所有路由通過,因此未匹配上索引節點10的路由都匹配上了索引20節點,均被permit。

叨叨了這麼多,能看到這裡的都是學霸喲,是不是已經信心滿滿,掌握了地址字首列表啦!地址字首列表(ip ip-prefix)能過濾出想要的路由,但是要實現對路由的控制,例如控制路由資訊的接收、釋出、引入等,還需要在filter-policy或者route-policy中呼叫地址字首列表才能實現。下一期我們將介紹如何通過filter-policy實現路由過濾,敬請期待~