簡介
本文件說明如何設定使用動態路由通訊協定的 redistribute 命令所套用的路由對應。
必要條件
需求
本文件沒有特定需求。
採用元件
本檔案中的資訊是根據Cisco IOS®軟體版本12.3。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
本節概述在Cisco IOS軟體中使用的路由對應。
路由對映基礎知識
路由對映有許多與眾所周知的訪問控制清單(ACL)相同的功能。 以下是兩種機制共有的一些特點:
- 它們是單個語句的有序序列;每個都具有permit或deny結果。ACL或路由對映的評估包括按預定順序的清單掃描和每個匹配語句的標準的評估。一旦找到第一個語句匹配,就會中止清單掃描,並執行與語句匹配關聯的操作。
- 它們是通用機制 — 條件匹配,並且匹配解釋由它們的應用方式決定。應用於不同任務的同一路由對映可以有不同的解釋。
路由對映和ACL之間可能存在以下差異:
- 路由對映經常使用ACL作為匹配的標準。
- 評估訪問清單的主要結果為「是」或「否」答案。ACL會允許或拒絕輸入資料。應用於重分發時,ACL將確定特定路由是可以(路由匹配ACL的permit語句)還是不能(匹配deny語句)重分發。典型的路由對映不僅允許(某些)重分發路由,而且還可以在路由重分發到另一個協定時修改與路由相關的資訊。
- 路由對映比ACL更靈活,可以根據ACL無法檢驗的條件來檢驗路由。例如,路由對映可以驗證路由型別是內部路由還是具有特定標籤。
- 按照設計慣例,每個ACL以隱式拒絕語句結尾;路由對映沒有類似的約定。如果在嘗試進行匹配時達到路由對映的結尾,則結果取決於路由對映的特定應用。幸運的是,應用於重分配的路由對映的行為方式與ACL相同:如果路由與路由對映中的任何子句都不匹配,則路由重分佈會遭到拒絕,就像路由對映在末尾包含deny語句一樣。
dynamic protocol redistribute配置命令允許您應用ACL或路由對映。本節介紹的差異標識了在重分發過程中何時使用路由對映。如果要在重分發期間修改路由資訊,或者需要比ACL更強大的功能來匹配功能,則首選路由對映。反之,如果您只是需要根據路由的字首或掩碼選擇性地允許某些路由,Cisco建議您直接在redistribute命令中使用ACL(或等效字首清單)。如果使用路由對映根據路由的字首或掩碼選擇性地允許某些路由,則通常使用更多配置命令來實現相同的目標。路由對映始終應用於入站流量,並且路由對映對出站流量沒有任何影響。
開放最短路徑優先
這是典型的開放最短路徑優先到增強型內部網關路由協定(OSPF-to-EIGRP)路由對映,使用redistribute命令應用:
!
router eigrp 1
redistribute ospf 1 route-map ospf-to-eigrp
default-metric 20000 2000 255 1 1500
!--- Output suppressed.
!
route-map ospf-to-eigrp deny 10
match tag 6
match route-type external type-2
!
route-map ospf-to-eigrp permit 20
match ip address prefix-list pfx
set metric 40000 1000 255 1 1500
!
route-map ospf-to-eigrp permit 30
set tag 8
!
以下是此範例的重要觀察結果:
- 對路由對映子句進行編號。在本例中,子句的序列號為10、20和30。序列號允許您執行以下操作:
- 輕鬆刪除一個特定的子句,但不影響路由對映的其他部分。
- 在兩個當前子句之間插入新子句。
如果需要,思科建議以10為間隔對子句進行編號,以保留編號空間以便在將來插入子句。
- 路由對映可以包含permit和deny子句。route-map ospf-to-eigrp中有一個deny子句(序列號為10)和兩個permit子句。deny子句拒絕來自重分配的路由匹配。因此,以下規則適用:
- 如果在route-map permit子句中使用ACL,則會重新分發ACL允許的路由。
- 如果您在路由對映deny子句中使用ACL,則不會重新分發ACL允許的路由。
- 如果您在路由對映permit或deny子句中使用ACL,且ACL拒絕路由,則找不到路由對映子句匹配,並評估下一個路由對映子句。
- 每個route-map子句具有兩種型別的命令:
- match — 選擇必須應用此子句的路由。
- set — 修改要重新分發到目標協定中的資訊。
對於每個重分發的路由,路由器首先評估route-map中子句的match命令。如果匹配的條件成功,則根據permit或deny子句的要求重新分發或拒絕路由,並且其某些屬性由set命令修改。如果匹配的條件失敗,則此子句不適用於路由,並且Cisco IOS軟體會繼續根據路由對映中的下一子句評估路由。繼續掃描路由對映,直到找到其match命令與路由匹配的子句,或者直到到達路由對映的結尾。
- 如果存在以下條件之一,則每個子句中的match或set命令可能會丟失或重複多次:
- 如果子句中存在多個match命令,則所有命令都必須成功用於給定路由,以便該路由與子句匹配(換句話說,對多個match命令應用邏輯AND演算法)。
- 如果match命令在一個命令中引用多個對象,則選擇match(應用邏輯OR演算法)。 例如,在match ip address 101 121命令中,如果訪問清單101或訪問清單121允許路由,則允許該路由。
- 如果沒有match命令,則所有路由都匹配該子句。在上一個範例中,到達子句30的所有路由都相符;因此,永遠不會到達路由對映的結尾。
- 如果route-map permit子句中沒有set命令,則重新分發路由,而不修改其當前屬性。
請勿在deny route-map子句中配置set命令,因為deny子句禁止路由重分發。沒有要修改的資訊。
沒有matchset命令的route-map子句會執行操作。空的permit子句允許在未經修改的情況下重新分佈其餘路由。空deny子句不允許重新分發其他路由(如果路由對映已完全掃描但找不到顯式匹配,則這是預設操作)。
根據本節中的資訊,前面的OSPF到EIGRP路由對映示例執行以下操作:
- 禁止重分發所有已設定標籤6的2類外部OSPF路由。
- 將與pfx字首清單匹配、具有五個度量值(40000、1000、255、1和1500)的所有路由重新分發到EIGRP。
- 重新分發所有其他路由並將其標籤設定為8(預設值)。
應用於重分發的路由對映中使用的命令
本節包含以下主題:
在路由對映中配置不支援的匹配和Set命令
路由對映是可以在許多配置中使用的通用機制,其中包括前面介紹的redistribute 命令。例如,您可以在PBR的路由對映中配置match length命令,以指定在轉發特定長度的資料包時執行特殊操作。但是,在應用於重分發的路由對映中,不會使用match length命令。
可以在路由對映中配置match和set命令,這些命令在應用路由對映(或打算在以後應用)的上下文中不受支援(或不生效)。 這種情形的一個例子是在應用於重分配的路由對映中使用的match length命令。在重分發中,路由對映通過redistribute命令中指定的協定應用於安裝到路由表中的每個路由。因此,當路由器執行路由對映時,路由器只解釋在路由對映應用環境中有意義的命令。在本例中,redistribution route-map中提到的match length命令對重分發沒有影響。它保留在路由對映的配置中,並且可以在路由器的運行配置中看到。但是,無論該命令是否存在於路由對映中,路由重分佈都不會受到影響。
因此,路由器允許設定所有型別的match和set命令,但必須在邏輯上應用於這種情況。否則,配置可能會非常混亂,或執行不正確的任務。
不要在路由對映上下文中使用沒有效果的命令(即使它們看起來無害),因為存在以下問題:
-
沒有效果的命令可能會遮蔽您要完成的任務。可能會造成混淆。
-
未來版本的Cisco IOS軟體可能支援目前不支援的命令。未來軟體升級後,路由對映行為可能會發生不需要的變更。
-
並非所有命令都是完全無害的;例如,set metric +/- 命令,它指定度量的相對變化並用於BGP路由通告。它可以採用路由的當前度量,並在傳播它之前按指定值增加或減少該度量。
某些協定不支援此命令的 +/-形式,請參閱EIGRP路由對映支援,在其他情況下,此命令實際上被解釋為set metric 命令,省略符號。例如,請考慮以下路由對映:
!--- This redistribution route-map is very dangerous!
route-map ospf-to-ospf permit 10
set metric +2
!
此配置似乎將所有路由從一個OSPF進程重新分發到另一個,同時將所有路由的度量增加兩個。但是,它實際上將所有路由的度量設定為相同,等於2。這在路由器配置中是意料之外的。
此路由對映提供更加反直觀的影響:
!--- This redistribution route-map is very dangerous!
route-map ospf-to-ospf permit 10
set metric +2
!
此配置不是減少重分發路由的度量,而是將度量實際設定為367(正值,因為當不使用符號解釋設定的度量時,不可能使用負度量)。
路由對映重分配的雙協定性質
應用於重分發的路由對映使用兩種路由協定:
-
提供原始路由資訊的協定
-
將路由資訊重新分發到的協定
每個路由協定可以支援自己的一組路由屬性。
在重分發路由對映配置中:
本文檔的命令支援表部分列出了命令。它們通過match和set命令進行分類,以突出重分發路由對映的雙協定性質。
命令支援表
本節介紹redistribute命令中附加的路由對映支援的命令。有七種路由協定可用於重分發路由;但是,只有五個再分配可以發生。相連路由和靜態路由不是動態路由協定,只能提供要重分發到其他協定中的資訊。
本節不包括match 和set 命令,這些命令在Cisco IOS軟體版本12.3路由對映中受支援,但在重分發上下文中不適用。
中間系統到中間系統(IS-IS)和BGP可以傳播有關無連線網路服務(CLNS)路由的資訊以及IP路由。為了更加全面,本節中的表還提到與CLNS相關的命令,這些命令可用於這些協定的重分發路由對映。
可以使用路由資訊協定(RIP)、OSPF、IS-IS和BGP傳播IPv6路由;這些協定的重分發路由對映可以包含IPv6特定的命令。match ip和set ip命令專門用於重新分配IPv4字首。match ipv6 和set ipv6 命令專門用於重分發IPv6字首。僅當使用路由對映向路由協定或從路由協定重分發CLNS路由時,才能使用match clns和set clns命令。
表1和表2使用以下約定:
表1 — 用於匹配按協定安裝到路由表中的路由的路由對映命令
指令 |
重分發支援 |
已連線 |
靜態 |
RIP |
EIGRP |
OSPF |
IS |
BGP |
match clns address |
— |
是 |
— |
— |
— |
是 |
是 |
match clns next-hop |
— |
是 |
— |
— |
— |
是 |
— |
match interface |
是 |
是 |
是 |
是 |
是 |
是 |
— |
match ip address |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
match ip address prefix-list |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
match ip next-hop |
— |
是 |
是 |
是 |
是 |
是 |
是 |
match ip next-hop prefix-list |
— |
否 |
否 |
否 |
否 |
否 |
否 |
match ip route-source |
— |
— |
是 |
是 |
是 |
— |
是 |
match ip route-source prefix-list |
— |
— |
否 |
否 |
否 |
— |
否 |
match ipv6 address [prefix-list] |
是 |
是 |
是 |
— |
是 |
是 |
是 |
match ipv6 next-hop [prefix-list] |
— |
是 |
是 |
— |
— |
— |
是 |
match ipv6 route-source [prefix-list] |
— |
— |
是 |
— |
— |
— |
是 |
匹配度量 |
— |
— |
是 |
是 |
是 |
是 |
是 |
match policy-list |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
match route-type external |
— |
— |
— |
是 |
是 |
是 |
是 |
match route-type inside |
— |
— |
— |
是 |
是 |
— |
是 |
match route-type local |
— |
— |
— |
— |
— |
— |
是 |
match route-type nssa-external |
— |
— |
— |
— |
是 |
— |
— |
match route-type {level-1|level-2} |
— |
— |
— |
— |
— |
是 |
— |
match標籤 |
— |
是 |
是 |
是 |
是 |
是 |
是 |
表2 — 在將路由屬性重新分發到目標協定期間修改路由屬性的命令
指令 |
重分發支援 |
RIP |
EIGRP |
OSPF |
IS |
BGP |
set as-path tag |
— |
— |
— |
— |
是 |
set community |
— |
— |
— |
— |
是 |
set ip next-hop |
— |
— |
— |
— |
是 |
set ip next-hop peer-address |
— |
— |
— |
— |
否 |
set ipv6 next-hop |
— |
— |
— |
— |
是 |
set level {backbone|stub-area} |
— |
— |
否 |
— |
— |
set level {level-1|level-2|level-1-2} |
— |
— |
— |
是 |
— |
set local-preference |
— |
— |
— |
— |
是 |
set metric |
是 |
— |
是 |
是 |
是 |
set metric +/- |
否 |
— |
否 |
否 |
否 |
set metric eigrp-metric |
— |
是 |
— |
— |
— |
set metric +/- eigrp-metric |
— |
否 |
— |
— |
— |
set metric-type internal |
— |
— |
— |
是 |
— |
set metric-type external |
— |
— |
— |
是 |
— |
set metric-type {type-1|type-2} |
— |
— |
是 |
— |
— |
set nlri |
— |
— |
— |
— |
是 |
設定原點 |
— |
— |
— |
— |
是 |
set tag |
是 |
是 |
是 |
— |
— |
設定權重 |
— |
— |
— |
— |
是 |
結論
路由對映是非常強大但複雜的路由重分配工具。當路由資訊在協定之間重新分發時,它們允許對路由資訊進行非常精細的操作。但是,它們可能很危險,並可能在網路中造成黑洞,或造成次優通訊流。如果要在多個路由協定之間使用複雜的重分發功能,必須非常小心地設計網路。
相關資訊