CCNP路由實驗之十六 策略路由(PBR)html
策略路由(PBR)是一種比基於目標網絡進行路由更加靈活的數據包路由轉發機制。路由器將經過路由圖決定怎樣對需要路由的數據包進行處理。路由圖決定了一個數據包的下一跳轉發路由器。在路由器轉發一個數據報文時,首先依據配置的規則對報文進行過濾,匹配成功則依照必定的轉發策略進行報文轉發。這樣的規則可以是基於標準和擴展訪問控制列表,也可以基於報文的長度;而轉發策略則是控制報文依照指定的策略路由表進行轉發。也可以改動報文的IP優先字段,策略路由也可以在必定程度上實現流量project,使不一樣服務質量的流或者不一樣性質的數據(語音、FTP)走不一樣的路徑,所以,策略路由是對傳統IP路由機制的有效加強。小程序
策略路由的幾種運做模式:緩存
Process switching PBR在Cisco IOS Release 12.0以前,策略路由僅僅能經過「進程轉發」來轉發數據包,這樣數據包的轉發效率是很是低的。在不一樣的平臺上,基本在每秒1000到10,000個數據包。網絡
在進行「進程轉發」時,系統會先查詢路由條目查,也就是逐包模式 ,即每個包都進行查表後才進行轉發。session
Fast-Switched PBR 隨着緩存技術的出現,Cisco實現了Fast-Switched PBR,提高了數據包的轉發速度。啓用方法即在接口中使用iproute-cache policy命令。注意:Fast-switchedPBR支持所有的match語句及多數的set語句,但其有如下的兩個限制:不支持setip default next-hop 與set default interface命令。架構
假設在route-cache中不存在set中指定的接口相關的項,那麼僅在point-to-point時set interface命令才幹夠Fast-switched PBR。並且,在進行「進程轉發」時,系統還會先查詢路由條目查看該interface是否是一個合理的路徑。而在fast switching時,系統不會對此進行檢查。注:ip route-cachepolicy僅僅適用於Fast-SwitchedPBR,no ip route-cache policy 關閉該功能就是Process switching PBR。事實上Fast-Switched PBR就是流模式的策略,即第一個包查路由轉發表,假設存在路由,將該路由項以source、dest、tos、入接口等索引放置到cache中。之後一樣的流就可以直接查cache 。對於低端路由器,所有操做由CPU+內存處理 對於中高端設備,通常由NP 和Asic芯片完畢處理。對於低端路由器,所有操做由CPU+內存處理 對於中高端設備,通常由NP 和Asic芯片完畢處理app
Local PBR默認狀況下,路由器自身所產生的數據包不會被策略路由限制。假設想對路由器自身產生的數據包也進行策略路由。那麼需要在全局模式下使用例如如下命令來啓用:iplocal policy route-map map-tag負載均衡
CEF-Switched PBR在Cisco支持CEF的平臺上。系統可以使用CEF-Switched PBR來提升PBR的轉發速度,其轉發速度比Fast-Switched PBR更快。僅僅要你在啓用PBR的路由器上啓用了CEF,那麼CEF-Switched PBR會本身主動啓用。分佈式
它也是基於流模式的ide
策略路由的特色:
策略路由比所有路由的級別都高。當中包括直連路由。
策略路由是轉發層面的行爲,操做的對象是數據包,匹配的是數據流,詳細是指數據包中的各個字段:源IP、目標IP、協議、源port、目標port、802.1p優先級 、VLANID 源/目的MAC地址、IP優先級 、DSCP的優先級 、IP的協議類型字段
爲QoS服務。使用route-map及策略路由可以依據數據包的特徵改動其相關QoS項。進行爲QoS服務。
負載平衡。使用策略路由可以設置數據包的行爲,比方下一跳、下一接口等。這樣在存在多條鏈路的狀況下,可以依據數據包的應用不一樣而使用不一樣的鏈路,進而提供高效的負載平衡能力。策略路由影響的僅僅是本地的行爲,因此可能會引發「不正確稱路由」形式的流量。比方一個單位有兩條上行鏈路A與B。該單位想把所有HTTP流量分擔到A鏈路。FTP流量分擔到B鏈路。這是沒有問題的,但在其上行設備上,沒法保證下行的HTTP流量分擔到A鏈路,FTP流量分擔到B鏈路。
策略路由通常針對的是接口入(in)方向的數據包,但也可在啓用相關配置的狀況下對本地所發出的數據包也進行策略路由。
策略路由的種類:
一種是依據路由的目的地址來進行的策略稱爲:目的地址路由;
另外一種是依據路由源地址來進行策略實施的稱爲:源地址路由。
隨着策略路由的發展現在有了第三種路由方式:智能均衡的策略方式!
就是多條線路不管是光纖仍是ADSL,都能本身主動的識別。並且本身主動的採取對應的策略方式,是策略路由的發展趨勢
注意:CEF的兩種負載均衡方式:
基於每個會話的負載均衡(per-session load sharing):基於每個會話的負載均衡贊成路由器使用多條路徑分發流量。
對於一個給定的源—目的主機對。即便有多條路徑可用。路由器也會保證該會話的數據包走一樣的路徑。不一樣的會話採用不一樣的路徑。使用負載均衡,基於每個會話的負載均衡再激活CEF的時候缺省的也被激活。因爲基於每個會話的負載均衡依賴於流量的統計分發。於是在會話數添加的狀況下更有效率。基於每個會話的負載均衡可以確保導向給定的源—目的對的數據包按序到達。因爲導向一樣主機對的所有數據包都被路由到一樣的鏈路上。
基於每個數據包的負載均衡基於每個數據包的負載均衡使得路由器可以把連續的數據包發送到不一樣的路徑上。而沒必要關心個別的主機或用戶會話,使用輪轉的方法來肯定每個數據包選擇哪條路徑到達目的地。當大量數據經過單個會話的多條並行鏈路時。基於每個數據包的負載均衡顯得更加有效。在這樣的狀況下,基於每個會話的負載均衡將會過載當中一條鏈路,而其它鏈路差點兒沒有什麼流量。
但基於每個數據包的負載均衡會致使針對某一個會話來講。數據包可能走不一樣的路徑,這會引發數據包的又一次排序,對於某些數據流量類型來講是不合適的,必須對於IP語音流量來講。
當啓用基於數據包的負載均衡功能時,必須先禁用基於目的地的負載均衡功能。
爲了禁用基於目的地的負載均衡功能,可以在接口配置模式下,no ip load-sharing per-destination。使用基於數據包的負載均衡。路由器可以在路徑上連續發送數據包。而不用考慮詳細的主機或用戶狀況。這樣的負載均衡機制採用輪轉辦法來肯定每個數據包採用哪條路徑到達目的地。基於數據包的負載均衡可以保證在多條鏈路上進行負載均衡。要啓用基於數據包的負載均衡功能。可以在接口配置模式下,ip load-sharing per-packet;爲CEF配置網絡記帳功能,啓用收集被高速轉發到某個目的地的數據包個數和字節數ip cef accounting per-prefix啓用收集經過某個目的地被高速轉發的數據包的個數ip cef accounting non-recursive在全局配置模式中爲CEF啓用網絡記帳功能後,對應的路由處理器會收集記帳信息。
當用戶爲CEF啓用網絡記帳功能後,線路卡上會收集記賬信息。查看網絡記賬信息 show ipcef。
建議使用每會話的負載均衡。因爲假設每包的負載均衡會出現包的順序出錯,致使應用沒法打開。同一時候會出現不一樣IP同一時候登錄同一個應用而遭受拒絕好比:加密、HTTPS。網銀。QQ等
策略路由中的概念:
應用策略路由。必需要指定策略路由使用的路由映射,並且要建立路由映射。一個路由映射由很是多條策略組成,每個策略都定義了1個或多個的匹配規則和對應操做。一個接口應用策略路由後。將對該接口接收到的所有包進行檢查,不符合路由映射不論什麼策略的數據包將依照一般的路由轉發進行處理,符合路由映射中某個策略的數據包就依照該策略中定義的操做進行處理。策略路由對報文的發送接口、下一跳的配置是基於多轉發表實現的。routemap和ACL很是類似,它可以用於路由的再公佈和策略路由,還經常使用在BGP中.策略路由(policyroute)其實是複雜的靜態路由,靜態路由是基於數據包的目標地址並轉發到指定的下一跳路由器,策略路由還利用和擴展IPACL連接,這樣就可以提供不少其它功能的過濾和分類 。
與路由重公佈相關命令
match interface {type number} […type number]:匹配指定的下一跳路由器的接口的路由
match ip address {ACL number|name} […ACL number|name]:匹配ACL所指定的目標IP地址或網段的路由
match ip next-hop {ACL number|name} […ACL number|name]:匹配ACL所指定的下一跳路由器地址的路由
match ip route-source {ACL number|name} […ACL number|name]:匹配ACL所指定的路由器所宣告的路由
match metric {metric-value}://匹配指定metric大小的路由
match route-type {internal|external[type-1|type-2]|level-1|level-2}:匹配指定的OSPF,EIGRP或IS-IS的路由類型的路由
match tag {tag-value} […tag-value]:匹配帶有標籤(tag)的路由
set level {level-1|level-2|level-1-2|stub-area|backbone}:設置IS-IS的Level,或OSPF的區域,匹配成功的路由將被再公佈到該區域
Set metric {metric-value|bandwidth delay RELY load MTU}:爲匹配成功的路由設置metric大小
set metric-type {internal|external|type-1|type-2}:爲匹配成功的路由設置metric的類型,該路由將被再公佈到OSPF或IS-IS 1
set next-hop {next-hop}:爲匹配成功的路由指定下一跳地址
set tag {tag-value}:爲匹配成功的路由設置標籤
與策略路由相關的命令
match ip address {ACL number|name} […ACL number|name]:匹配ACL所指定的目標IP地址或網段的路由
match length {min} {max}://匹配第3層的數據包的長度
set default interface {type number} […type number]://先查詢路由表,在找不到精確匹配的路由條目時。才轉發數據包到default語句指定的下一跳接口
set interface {type number} […type number]://首先檢查策略路由。不符合策略後使用路由表進行數據包轉發處理
set ip default next-hop {ip-address} […ip-address]://先查詢路由表,在找不到精確匹配的路由條目時,就轉發數據包到下一跳IP
set ip next-hop ip-address {ip-address}://首先檢查策略路由。不符合策略後使用路由表進行數據包轉發處理
set ip precedence {precedence}:爲匹配成功的IP數據包設置服務類型(Type of Service,ToS)的優先級
set ip tos {tos}:爲匹配成功的數據包設置服務類型的字段的TOS位
route map是經過名字來標識的,每個route map都包括許可或拒絕操做。
關於拒絕操做,是依賴於route map是使用在路由的重公佈環境仍是策略路由環境中, 假設是在策略路由中匹配失敗(拒絕),那麼數據包將按正常方式轉發; 假設是用於路由再公佈,並且匹配失敗(拒絕),那麼路由將不會被再公佈 假設數據包沒有找到不論什麼匹配,和ACL同樣,route map末尾也有個默認的隱含拒絕所有的操做, 假設route map的陳述中沒有match語句,那麼默認的操做是匹配所有的數據包和路由;每個 route map另外一個序列號,序列號在沒有給出的狀況下默認是10,序列號用於區分每個route map statement,經過這個序列號參數你可以在一個route map的特定位置插入或刪除一條route map statement,並且可以單獨的編輯它。一個route map可以包括多個route map statement。序列號參數決定了進行條件匹配的順序。僅僅有序列號爲10的語句沒有匹配。纔會檢查序列號爲20的語句才被檢查。route map贊成有多個match和set陳述,一個match語句可以包括多個條件。在匹配的時候,從上到下,假設匹配成功,將再也不和後面的陳述進行匹配,指定操做將被運行。假設一個條件爲真。則以爲這個條件匹配。然而,必須所有的條件都匹配,才以爲這個route mapstatement匹配。
Set可以定義當匹配語句知足時。數據包怎樣經過路由器進行轉發
配置路由策略要注意:
配置一個路由圖,在同一個接口上屢次配置路由圖會相互覆蓋。
在使用策略路由時,每個子路由圖建議僅僅配置一個ACL。
假設配置的子路由圖中僅僅有nexthop而沒有配置ACL,則等價於所有報文都匹配;
假設子路由圖中僅僅有ACL而沒有nexthop則匹配的報文普通轉發。
假設子路由圖中即沒有ACL也沒有nexthop,則等價所有報文普通轉發。
假設配置了ACL號但是該ACL不存在。等價所有報文都匹配
實驗1、策略路由看成ACL使用
PC1配置:
PC1#conf t
PC1(config)#no ip routing
PC1(config)#ip default-gateway 192.168.0.1
PC1(config)#int fa0/0
PC1(config-if)#ip add 192.168.0.101 255.255.255.0
PC1(config-if)#no sh
PC1(config-if)#exit
PC2配置:
PC2#conf t
PC2(config)#no ip routing
PC2(config)#ip default-gateway 192.168.0.1
PC2(config)#int fa0/0
PC2(config-if)#ip add 192.168.0.102 255.255.255.0
PC2(config-if)#no sh
PC2(config-if)#exit
Internet配置:
Internet#conf t
Internet(config)#int fa0/0
Internet(config-if)#ip add 202.100.100.100 255.255.255.0
Internet(config-if)#no sh
Internet(config-if)#exit
Internet(config)#ip route 192.168.0.0 255.255.255.0202.100.100.1
R1配置:
R1#conf t
R1(config)#int fa0/0
R1(config-if)#ip add 192.168.0.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip add 202.100.100.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#access-list 1 permit host 192.168.0.101 //ACL標記流量
R1(config)#route-map internet permit 10 //建立路由圖
R1(config-route-map)#match ip address 1 //設置匹配ACL流量
R1(config-route-map)#set interface null0 //對符合的流量設置下一跳接口爲null0,即掉棄
R1(config-route-map)#exit
R1(config)#int fa0/0
R1(config-if)#ip policy route-map internet //將路由圖應用到接口
R1(config-if)#exit
測試檢查:
PC1#ping 202.100.100.100
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
PC2#ping 202.100.100.100
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max= 20/40/108 ms
R1#debug ip policy
Policy routing debugging is on
*Mar 100:15:57.371: IP: s=192.168.0.101 (FastEthernet0/0), d=202.100.100.100, len100, FIB policy match
*Mar 100:15:57.371: IP: s=192.168.0.101 (FastEthernet0/0), d=202.100.100.100 (Null0),len 100, FIB policy routed(drop)
*Mar 100:15:57.527: IP: s=192.168.0.102 (FastEthernet0/0), d=202.100.100.100, len100, FIB policy rejected(no match) - n ormal forwarding
*Mar 100:15:57.619: IP: s=192.168.0.102 (FastEthernet0/0), d=202.100.100.100, len100, FIB policy rejected(no match) - normal forwarding
實驗2、基於源地址的路由策略
S1配置:
S1#conf t
S1(config)#int fa0/0
S1(config-if)#ip add 192.168.11.11 255.255.255.0
S1(config-if)#no sh
S1(config-if)#exit
S1(config)#router ospf 1
S1(config-router)#net 192.168.11.0 0.0.0.255 area 0
S1(config-router)#exit
S2配置:
S2#conf t
S2(config)#int fa0/1
S2(config-if)#ip add 192.168.22.22 255.255.255.0
S2(config-if)#no sh
S2(config-if)#exit
S2(config)#router ospf 1
S2(config-router)#net 192.168.22.0 0.0.0.255 area 0
S2(config-router)#exit
ISP1配置:
ISP1#conf t
ISP1(config)#int fa0/0
ISP1(config-if)#ip add 100.100.100.100 255.255.255.0
ISP1(config-if)#no sh
ISP1(config-if)#exit
ISP1(config)#int fa0/1
ISP1(config-if)#ip add 12.12.12.1 255.255.255.0
ISP1(config-if)#no sh
ISP1(config-if)#exit
ISP1(config)#router ospf 1
ISP1(config-router)#net 100.100.100.0 0.0.0.255 area 0
ISP1(config-router)#net 12.12.12.0 0.0.0.255 area 0
ISP1(config-router)#exit
ISP2配置:
ISP2#conf t
ISP2(config)#int fa0/0
ISP2(config-if)#ip add 200.200.200.200 255.255.255.0
ISP2(config-if)#no sh
ISP2(config-if)#exit
ISP2(config)#int fa0/1
ISP2(config-if)#ip add 12.12.12.2 255.255.255.0
ISP2(config-if)#no sh
ISP2(config-if)#exit
ISP2(config)#router ospf 1
ISP2(config-router)#net 200.200.200.0 0.0.0.255 area 0
ISP2(config-router)#net 12.12.12.0 0.0.0.255 area 0
ISP2(config-router)#exit
R1配置:
R1#conf t
R1(config)#int fa0/0
R1(config-if)#ip add 192.168.11.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip add 192.168.22.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa1/0
R1(config-if)#ip add 100.100.100.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa2/0
R1(config-if)#ip add 200.200.200.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#router ospf 1
R1(config-router)#net 0.0.0.0 255.255.255.255 area 0
R1(config-router)#exit
R1(config)#access-list 11 permit 192.168.11.0 0.0.0.255//用ACL11標記192.168.11.0的流量
R1(config)#access-list 22 permit 192.168.22.0 0.0.0.255//用ACL22標記192.168.22.0的流量
R1(config)#route-map s1 permit 10 //建立路由圖s1,贊成流量
R1(config-route-map)#match ip address 11 //匹配ACL11的流量
R1(config-route-map)#set ip next-hop 100.100.100.100//對匹配ACL11的流量直接轉發到ISP1
R1(config-route-map)#exit
R1(config)#route-map s1 deny 20 //路由圖S1拒絕其它所有流量
R1(config-route-map)#exit
R1(config)#route-map s2 permit 10//建立路由圖S2。贊成流量
R1(config-route-map)#match ip address 22//匹配ACL22的流量
R1(config-route-map)#set ip next-hop 200.200.200.200//對ACL22的流量直接轉發到ISP2
R1(config-route-map)#exit
R1(config)#route-map s2 deny 20//路由圖S2拒絕其它所有流量
R1(config-route-map)#exit
R1(config)#int fa0/0
R1(config-if)#ip policy route-map s1 //在接口下應用路由圖S1
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip policy route-map s2//在接口下應用路由圖S2
R1(config-if)#exit
檢查測試:
S1#traceroute 200.200.200.200 //S1所有流量直接從ISP1走。不依照路由表路由
Type escape sequence to abort.
Tracing the route to 200.200.200.200
1 192.168.11.1 52msec 68 msec 24 msec
2 100.100.100.10076 msec 68 msec 60 msec
3 100.100.100.180 msec 52 msec 92 msec
4 200.200.200.20092 msec 84 msec 120 msec
S2#traceroute 100.100.100.100//S1所有流量直接從ISP2走,不依照路由表路由
Type escape sequence to abort.
Tracing the route to 100.100.100.100
1 192.168.22.1 64msec 40 msec 28 msec
2 200.200.200.20064 msec 20 msec 36 msec
3 200.200.200.1104 msec 64 msec 60 msec
4 100.100.100.10076 msec 104 msec 128 msec
R1#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B- BGP
D - EIGRP,EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPFNSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPFexternal 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-ISinter area, * - candidate default, U - per-user static route
o - ODR, P -periodic downloaded static route
Gateway of last resort is not set
C 200.200.200.0/24 is directly connected, FastEthernet2/0
100.0.0.0/24is subnetted, 1 subnets
C 100.100.100.0is directly connected, FastEthernet1/0
C 192.168.11.0/24 is directly connected, FastEthernet0/0
C 192.168.22.0/24 is directly connected, FastEthernet0/1
12.0.0.0/24 issubnetted, 1 subnets
O 12.12.12.0[110/11] via 200.200.200.200, 00:15:41, FastEthernet2/0
[110/11] via 100.100.100.100, 00:15:41, FastEthernet1/0
R1#debug ip policy
*Mar 100:27:52.919: IP: s=192.168.11.11 (FastEthernet0/0), d=200.200.200.200, len 28,FIB policy match
*Mar 100:27:52.919: IP: s=192.168.11.11 (FastEthernet0/0), d=200.200.200.200,g=100.100.100.100, len 28, FIB policy routed
*Mar 100:30:10.347: IP: s=192.168.22.22 (FastEthernet0/1), d=100.100.100.100, len 28,FIB policy match
*Mar 100:30:10.347: IP: s=192.168.22.22 (FastEthernet0/1), d=100.100.100.100,g=200.200.200.200, len 28, FIB policy routed
R1#sh route-map
route-map s2, permit, sequence 10
Match clauses:
ip address(access-lists): 22
Set clauses:
ip next-hop200.200.200.200
Policy routingmatches: 9 packets, 540 bytes
route-map s2, deny, sequence 20
Match clauses:
Set clauses:
Policy routingmatches: 0 packets, 0 bytes
route-map s1, permit, sequence 10
Match clauses:
ip address(access-lists): 11
Set clauses:
ip next-hop100.100.100.100
Policy routingmatches: 12 packets, 720 bytes
route-map s1, deny, sequence 20
Match clauses:
Set clauses:
Policy routingmatches: 0 packets, 0 bytes
實驗3、基於目的地址的策略路由
PC#conf t
PC(config)#no ip routing
PC(config)#ip default-gateway 192.168.0.1
PC(config)#int fa0/0
PC(config-if)#ip add 192.168.0.101 255.255.255.0
PC(config-if)#no sh
PC(config-if)#exit
ISP1配置:
ISP1#conf t
ISP1(config)#int lo 1
ISP1(config-if)#ip add 1.1.1.1 255.255.255.0
ISP1(config-if)#exit
ISP1(config)#int fa0/0
ISP1(config-if)#ip add 100.100.100.100 255.255.255.0
ISP1(config-if)#no sh
ISP1(config-if)#exit
ISP1(config)#int fa0/1
ISP1(config-if)#ip add 12.12.12.1 255.255.255.0
ISP1(config-if)#no sh
ISP1(config-if)#exit
ISP1(config)#router ospf 1
ISP1(config-router)#net 0.0.0.0 255.255.255.255 area 0
ISP1(config-router)#exit
ISP2配置:
ISP2#conf t
ISP2(config)#int lo 1
ISP2(config-if)#ip add 2.2.2.2 255.255.255.0
ISP2(config-if)#exit
ISP2(config)#int fa0/0
ISP2(config-if)#ip add 200.200.200.200 255.255.255.0
ISP2(config-if)#no sh
ISP2(config-if)#exit
ISP2(config)#int fa0/1
ISP2(config-if)#ip add 12.12.12.2 255.255.255.0
ISP2(config-if)#no sh
ISP2(config-if)#exit
ISP2(config)#router ospf 1
ISP2(config-router)#net 0.0.0.0 255.255.255.255 area 0
ISP2(config-router)#exit
R1配置:
R1#conf t
R1(config)#int fa0/0
R1(config-if)#ip add 192.168.0.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip add 100.100.100.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa1/0
R1(config-if)#ip add 200.200.200.200 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#router ospf 1
R1(config-router)#net 0.0.0.0 255.255.255.255 area 0
R1(config-router)#exit
R1(config)#ip access-list extended s1
R1(config-ext-nacl)#10 permit ip any host 1.1.1.1
R1(config-ext-nacl)#20 deny ip any any
R1(config-ext-nacl)#exit
R1(config)#ip access-list extended s2
R1(config-ext-nacl)#10 permit ip any host 2.2.2.2
R1(config-ext-nacl)#20 deny ip any any
R1(config-ext-nacl)#exit
R1(config)#route-map target permit 10
R1(config-route-map)#match ip address s1
R1(config-route-map)# set ip next-hop 200.200.200.200
R1(config-route-map)#exit
R1(config)#route-map target permit 20
R1(config-route-map)#match ip address s2
R1(config-route-map)# set ipnext-hop 100.100.100.100
R1(config-route-map)#exit
R1(config)#int fa0/0
R1(config-if)#ip policy route-map target
R1(config-if)#exit
檢查測試:
PC#traceroute 1.1.1.1
Type escape sequence to abort.
Tracing the route to 1.1.1.1
1 192.168.0.1 76msec 84 msec 24 msec
2 200.200.200.20072 msec 36 msec 36 msec
3 12.12.12.1 84msec 48 msec 68 msec
PC#traceroute 2.2.2.2
Type escape sequence to abort.
Tracing the route to 2.2.2.2
1 192.168.0.1 80msec 60 msec 24 msec
2 100.100.100.10072 msec 48 msec 60 msec
3 12.12.12.2 84msec 60 msec 48 msec
PC#traceroute 200.200.200.200
Type escape sequence to abort.
Tracing the route to 200.200.200.200
1 192.168.0.1 92msec 60 msec 24 msec
2 200.200.200.20072 msec 48 msec 36 msec
R1(config)#debug ip policy
*Mar 100:34:30.063: IP: s=192.168.0.101 (FastEthernet0/0), d=1.1.1.1, len 28, FIBpolicy match
*Mar 100:34:30.063: IP: s=192.168.0.101 (FastEthernet0/0), d=1.1.1.1,g=200.200.200.200, len 28, FIB policy routed
*Mar 1 00:34:30.143:IP: s=192.168.0.101 (FastEthernet0/0), d=1.1.1.1, len 28, FIB policy match
*Mar 100:34:30.143: IP: s=192.168.0.101 (FastEthernet0/0), d=1.1.1.1,g=200.200.200.200, len 28, FIB policy routed
*Mar 100:34:30.203: IP: s=192.168.0.101 (FastEthernet0/0), d=1.1.1.1, len 28, FIBpolicy match
*Mar 100:34:30.203: IP: s=192.168.0.101 (FastEthernet0/0), d=1.1.1.1, g=200.200.200.200,len 28, FIB policy routed
*Mar 100:34:50.207: IP: s=192.168.0.101 (FastEthernet0/0), d=2.2.2.2, len 28, FIBpolicy match
*Mar 100:34:50.207: IP: s=192.168.0.101 (FastEthernet0/0), d=2.2.2.2,g=100.100.100.100, len 28, FIB policy routed
*Mar 100:34:50.279: IP: s=192.168.0.101 (FastEthernet0/0), d=2.2.2.2, len 28, FIBpolicy match
*Mar 100:34:50.279: IP: s=192.168.0.101 (FastEthernet0/0), d=2.2.2.2,g=100.100.100.100, len 28, FIB policy routed
*Mar 100:34:50.339: IP: s=192.168.0.101 (FastEthernet0/0), d=2.2.2.2, len 28, FIBpolicy match
*Mar 100:34:50.339: IP: s=192.168.0.101 (FastEthernet0/0), d=2.2.2.2, g=100.100.100.100,len 28, FIB policy routed
*Mar 100:36:43.351: IP: s=192.168.0.101 (FastEthernet0/0), d=200.200.200.200, len 28,FIB policy rejected(no match) - normal forwarding
*Mar 100:36:43.427: IP: s=192.168.0.101 (FastEthernet0/0), d=200.200.200.200, len 28,FIB policy rejected(no match) - normal forwarding
*Mar 100:36:43.471: IP: s=192.168.0.101 (FastEthernet0/0), d=200.200.200.200, len 28,FIB policy rejected(no match) - normal forwarding
實驗4、基於報文長度的策略路由
PC配置:
PC#conf t
PC(config)#no ip routing
PC(config)#ip default-gateway 192.168.0.1
PC(config)#int fa0/0
PC(config-if)#ip add 192.168.0.101 255.255.255.0
PC(config-if)#no sh
PC(config-if)#exit
ISP1配置:
ISP1#conf t
ISP1(config)#int fa0/1
ISP1(config-if)#ip add 12.12.12.1 255.255.255.0
ISP1(config-if)#no sh
ISP1(config-if)#exit
ISP1(config)#int s1/0
ISP1(config-if)#ip add 100.100.100.100 255.255.255.0
ISP1(config-if)#no sh
ISP1(config-if)#exit
ISP1(config)#router ospf 1
ISP1(config-router)#net 0.0.0.0 255.255.255.255 area 0
ISP1(config-router)#exit
ISP2配置:
ISP2(config)#int fa0/0
ISP2(config-if)#ip add 200.200.200.200 255.255.255.0
ISP2(config-if)#no sh
ISP2(config-if)#exit
ISP2(config)#int fa0/1
ISP2(config-if)#ip add 12.12.12.2 255.255.255.0
ISP2(config-if)#no sh
ISP2(config-if)#exit
ISP2(config)#router ospf 1
ISP2(config-router)#net 0.0.0.0 255.255.255.255 area 0
ISP2(config-router)#exit
R1配置:
R1#conf t
R1(config)#int fa0/0
R1(config-if)#ip add 192.168.0.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip add 200.200.200.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int s1/0
R1(config-if)#ip add 100.100.100.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config-if)#router ospf 1
R1(config-router)#net 0.0.0.0 255.255.255.255 area 0
R1(config-router)#exit
R1(config)#route-map smallsize permit 10 //定義報文長度的路由圖
R1(config-route-map)#match length 0 1000 //匹配報文長度爲最小1 最大1000
R1(config-route-map)#set interface s1/0 //從符合條件的報文所有走s1/0接口
R1(config-route-map)#exit
R1(config)#route-map smallsize permit 20//在路由圖中設置其它報文的流量所有走fa0/1
R1(config-route-map)#set interface fa0/1
R1(config-route-map)#exit
R1(config)#int fa0/0
R1(config-if)#ip policy route-map smallsize
R1(config-if)#exit
檢查測試:
PC#ping 12.12.12.1 size 1400
Type escape sequence to abort.
Sending 5, 1400-byte ICMP Echos to 12.12.12.1, timeout is2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max= 92/108/128 ms
PC#ping 12.12.12.1 size 1000
Type escape sequence to abort.
Sending 5, 1000-byte ICMP Echos to 12.12.12.1, timeout is2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max= 76/88/108 ms
R1#debug ip policy
*Mar 100:23:58.611: IP: s=192.168.0.101 (FastEthernet0/0), d=12.12.12.1, len 1400,FIB policy match
*Mar 100:23:58.611: IP: s=192.168.0.101 (FastEthernet0/0), d=12.12.12.1(FastEthernet0/1), len 1400, FIB policy routed
*Mar 100:23:58.767: IP: s=192.168.0.101 (FastEthernet0/0), d=12.12.12.1, len 1400,FIB policy match
*Mar 100:23:58.767: IP: s=192.168.0.101 (FastEthernet0/0), d=12.12.12.1(FastEthernet0/1), len 1400, FIB policy routed
*Mar 100:25:19.135: IP: s=192.168.0.101 (FastEthernet0/0), d=12.12.12.1 (Serial1/0),len 1000, FIB policy routed
*Mar 100:25:19.211: IP: s=192.168.0.101 (FastEthernet0/0), d=12.12.12.1, len 1000, FIBpolicy match
*Mar 100:25:19.211: fibidb->namestring: Serial1/0
*Mar 100:25:19.211: ipfib_policy_set_interface_lookup: tag_ptr: 0x0
*Mar 100:25:19.211: adj 0x0, NULL
實驗5、策略路由結合SLA與NAT,實現單路由雙ISP基於目的地址負載冗餘
IP SLA是 Internet Protocol Service-Level Agreement的縮寫,意思是互聯網協議服務等級協議。服務等級協議既可以用於關於網絡服務供應商和客戶間的一份合同。當中定義了服務類型、服務質量和客戶付款等術語。IP SLA仍是一個網絡效能測量與診斷工具。它經過主動在多個端點之間或者多條路徑之間發送封包來實現對網絡效能的測量。IP SLA用於服務協議等級(SLA)監測、網絡效能監測、網絡服務評估、終端點到終端點的可用性監測、網絡故障診斷、MPLS網絡監測、VoIP網絡監測 。
常見的場合就是:
EEM是Cisco IOS的嵌入式事件管理器(Embeded Event Manager)的縮寫,它提供了一種分佈式的、可擴展的、可依據用戶需求而靈活定製的,用於進行事件監控和故障恢復的機制。利用這樣的機制,當被監控的事件發生。或者是達到某個門限值時。EEM提供了進行消息報告以及採取對應動做的能力。
一個完整的EEM的操做被稱做 EEM Policy (EEM 策略),EEM Policy包括:定義監控的事件以及當被監控事件發生時所要運行的動做。EEM的整個架構由:EEM Server、Event Publisher(也稱做:Event Detector)和Event Subscribers (EEM Policy)三個部分組成。當中,Event Publisher 負責監控和分析事件,並且在事件發生時,負責向EEM Server 通告事件的發生。然後,EEM Server觸發EEM Policy 基於當前的系統狀態以及所配置的詳細動做,好比:運行IOS的命令行、發送SNMP Trap、發起主備引擎切換、產生Syslog信息等等。實施對應的恢復措施。當中Event Detector是核心和基礎,正是因爲Event Detector可以靈活地監控各類事件,才使得EEM具備強大的功能。
做爲事件使用者的EEM Policy可以經過兩種方式來進行定義:一種是編寫Applet小程序,這樣的基於Applet編寫的EEM Policy可以經過命令行方式來配置,適合於比較簡單的EEM操做。而第二種是經過編寫TCL腳本程序來實現。這樣的方式更適合於需要複雜邏輯推斷、功能需求比較靈活的EEM操做。
PC1配置:
PC1#conf t
PC1(config)#no ip routing
PC1(config)#ip default-gateway 192.168.0.1
PC1(config)#int fa0/0
PC1(config-if)#ip add 192.168.0.101 255.255.255.0
PC1(config-if)#no sh
PC1(config-if)#exit
ISP1配置:
ISP1#conf t
ISP1(config)#int lo 1
ISP1(config-if)#ip add 1.1.1.1 255.255.255.0
ISP1(config-if)#exit
ISP1(config)#int lo 2
ISP1(config-if)#ip add 11.11.11.11 255.255.255.0
ISP1(config-if)#exit
ISP1(config)#int lo 3
ISP1(config-if)#ip add 111.111.111.111 255.255.255.0
ISP1(config-if)#exit
ISP1(config)#int fa0/0
ISP1(config-if)#ip add 100.100.100.1 255.255.255.0
ISP1(config-if)#no sh
ISP1(config-if)#exit
ISP1(config)#int fa1/0
ISP1(config-if)#ip add 12.12.12.1 255.255.255.0
ISP1(config-if)#no sh
ISP1(config-if)#exit
ISP1(config)#int fa2/0
ISP1(config-if)#ip add 13.13.13.1 255.255.255.0
ISP1(config-if)#no sh
ISP1(config-if)#exit
ISP1(config)#router bgp 1
ISP1(config-router)#bgp router-id 1.1.1.1
ISP1(config-router)#network 1.1.1.0 mask 255.255.255.0
ISP1(config-router)#network 11.11.11.0 mask 255.255.255.0
ISP1(config-router)#network 111.111.111.0 mask255.255.255.0
ISP1(config-router)#net 100.100.100.0 mask 255.255.255.0
ISP1(config-router)#network 12.12.12.0 mask 255.255.255.0
ISP1(config-router)#network 13.13.13.0 mask 255.255.255.0
ISP1(config-router)#neighbor 12.12.12.2 remote-as 2
ISP1(config-router)#neighbor 13.13.13.3 remote-as 3
ISP1(config-router)#exit
ISP2配置:
ISP2#conf t
ISP2(config)#int lo 1
ISP2(config-if)#ip add 2.2.2.2 255.255.255.0
ISP2(config-if)#exit
ISP2(config)#int lo 2
ISP2(config-if)#ip add 22.22.22.22 255.255.255.0
ISP2(config-if)#no sh
ISP2(config-if)#exit
ISP2(config)#int lo 3
ISP2(config-if)#ip add 222.222.222.222 255.255.255.0
ISP2(config-if)#exit
ISP2(config)#int fa0/0
ISP2(config-if)#ip add 200.200.200.2 255.255.255.0
ISP2(config-if)#no sh
ISP2(config-if)#exit
ISP2(config)#int fa1/0
ISP2(config-if)#ip add 12.12.12.2 255.255.255.0
ISP2(config-if)#no sh
ISP2(config-if)#exit
ISP2(config)#int fa2/0
ISP2(config-if)#ip add 23.23.23.2 255.255.255.0
ISP2(config-if)#no sh
ISP2(config-if)#exit
ISP2(config)#router bgp 2
ISP2(config-router)#bgp router-id 2.2.2.2
ISP2(config-router)#network 2.2.2.0 mask 255.255.255.0
ISP2(config-router)#network 22.22.22.0 mask 255.255.255.0
ISP2(config-router)#network 222.222.222.0 mask255.255.255.0
ISP2(config-router)#network 200.200.200.0 mask255.255.255.0
ISP2(config-router)#network 12.12.12.0 mask 255.255.255.0
ISP2(config-router)#network 23.23.23.0 mask 255.255.255.0
ISP2(config-router)#neighbor 12.12.12.1 remote-as 1
ISP2(config-router)#neighbor 23.23.23.3 remote-as 3
ISP2(config-router)#exit
Foreign配置:
Foreign#conf t
Foreign(config)#int fa0/0
Foreign(config-if)#ip add 13.13.13.3 255.255.255.0
Foreign(config)#no sh
Foreign(config)#exit
Foreign(config)#int fa0/1
Foreign(config-if)#ip add 23.23.23.3 255.255.255.0
Foreign(config-if)#no sh
Foreign(config-if)#exit
Foreign(config)#int lo 1
Foreign(config-if)#ip add 3.3.3.3 255.255.255.0
Foreign(config-if)#exit
Foreign(config)#int lo 2
Foreign(config-if)#ip add 33.33.33.33 255.255.255.0
Foreign(config-if)#exit
Foreign(config)#router bgp 3
Foreign(config-router)#bgp router-id 3.3.3.3
Foreign(config-router)#network 3.3.3.0 mask 255.255.255.0
Foreign(config-router)#network 33.33.33.0 mask255.255.255.0
Foreign(config-router)#network 12.12.12.0 mask255.255.255.0
Foreign(config-router)#network 23.23.23.0 mask 255.255.255.0
Foreign(config-router)#neighbor 13.13.13.1 remote-as 1
Foreign(config-router)#neighbor 23.23.23.2 remote-as 2
Foreign(config-router)#exit
R1配置:
R1#conf t
R1(config)#int fa0/0
R1(config-if)#ip add 192.168.0.1 255.255.255.0
R1(config-if)#ip nat inside
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip add 100.100.100.100 255.255.255.0
R1(config-if)#ip nat outside
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa1/0
R1(config-if)#ip add 200.200.200.200 255.255.255.0
R1(config-if)#ip nat outside
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#ip access-list extended isp1//用ACL抓取去往ISP1的目的地址
R1(config-ext-nacl)#permit ip any 100.100.100.0 0.0.0.255
R1(config-ext-nacl)#permit ip any 1.1.1.0 0.0.0.255
R1(config-ext-nacl)#permit ip any 11.11.11.0 0.0.0.255
R1(config-ext-nacl)#permit ip any 111.111.111.0 0.0.0.255
R1(config-ext-nacl)#permit ip any 12.12.12.0 0.0.0.255
R1(config-ext-nacl)#permit ip any 13.13.13.0 0.0.0.255
R1(config-ext-nacl)#exit
R1(config)#ip access-list extended isp2 //用ACL抓取去往ISP2的目的地址
R1(config-ext-nacl)#permit ip any 200.200.200.0 0.0.0.255
R1(config-ext-nacl)#permit ip any 2.2.2.0 0.0.0.255
R1(config-ext-nacl)#permit ip any 22.22.22.0 0.0.0.255
R1(config-ext-nacl)#permit ip any 222.222.222.0 0.0.0.255
R1(config-ext-nacl)#permit ip any 23.23.23.0 0.0.0.255
R1(config-ext-nacl)#exit
R1(config)#ip access-list extended foreign //抓取非ISP1和ISP2的網絡
R1(config-ext-nacl)#permit ip any any
R1(config-ext-nacl)#exit
R1(config)#ip sla 1 //建立SLA 任務1
R1(config-ip-sla)#icmp-echo 100.100.100.1 source-ip100.100.100.100//設置任務SLA1,用100.100.100.100去ping ISP1
R1(config-ip-sla-echo)#timeout 1200//每個包發出去多長時間還沒收到就表明失敗,單位毫秒
R1(config-ip-sla-echo)#frequency 5//設置任務SLA1每隔5s運行一次
R1(config-ip-sla-echo)#exit
R1(config)#ip sla schedule 1 life forever start-time now//設置任務SLA1當即運行
R1(config)#track 1 rtr 1 reachability//使用track 追蹤SLA1,檢查線路的可達性
R1(config-track)#exit
R1(config)#ip sla 2//建立SLA 任務2
R1(config-ip-sla)#icmp-echo 200.200.200.2 source-ip200.200.200.200//設置任務SLA2。用200.200.200.200去ping ISP2
R1(config-ip-sla-echo)#timeout 1200//每個包發出去多長時間還沒收到就表明失敗,單位毫秒
R1(config-ip-sla-echo)#frequency 5//設置任務SLA2每隔5s運行一次
R1(config-ip-sla-echo)#exit
R1(config)#ip sla schedule 2 life forever start-time now//設置任務SLA2當即運行
R1(config)#track 2 rtr 2 reachability//使用track追蹤SLA2,檢查線路的可達性
R1(config-track)#exit
R1(config)#route-map isp-working permit 10//建立路由圖isp-working,用於不一樣線路分配流量
R1(config-route-map)#match ip address isp1//匹配去往isp1網段的流量
R1(config-route-map)#set ip next verify-availability100.100.100.1 1 track 1//追蹤ISP1的可達性,假設可達,則設置匹配的流量走ISP1線路,不然這條語句不生效,並運行下一語句。
R1(config-route-map)#set ip next verify-availability200.200.200.2 2 track 2//追蹤ISP2的可達性,假設可達。則設置匹配的流量走ISP2線路,不然這條語句不生效,並運行下一語句。
R1(config-route-map)#exit
R1(config)#route-map isp-working permit 20
R1(config-route-map)#match ip address isp2 //匹配去往ISP2網段的流量
R1(config-route-map)#set ip next verify-availability200.200.200.2 1 track 2//追蹤ISP2的可達性,假設可達,則設置匹配的流量走ISP2線路,不然這條語句不生效。並運行下一語句。
R1(config-route-map)#set ip next verify-availability100.100.100.1 2 track 1//追蹤ISP1的可達性,假設可達。則設置匹配的流量走ISP1線路,不然這條語句不生效,並運行下一語句。
R1(config-route-map)#exit
R1(config)#route-map isp-working permit 30//處理其它既不是去往ISP1也不是去往ISP2的流量。
R1(config-route-map)#match ip address foreign
R1(config-route-map)#set ip next verify-availability100.100.100.1 1 track 1//追蹤ISP1的可達性,假設可達,則設置匹配的流量走ISP1線路,不然這條語句不生效,並運行下一語句。
R1(config-route-map)#set ip next verify-availability200.200.200.2 2 track 2//追蹤ISP2的可達性,假設可達。則設置匹配的流量走ISP2線路,不然這條語句不生效,並運行下一語句。
R1(config-route-map)#exit
R1(config)#route-map nat-isp1 permit 110//建立NAT條件路由圖nat-isp1,匹配當ISP1線路正常,去往ISP1網段且從fa0/1出去的流量
R1(config-route-map)#match ip address isp1
R1(config-route-map)#match interface fa0/1
R1(config-route-map)#exit
R1(config)#route-map nat-isp11 permit 110//建立NAT條件路由圖nat-isp11,匹配當ISP1線路斷掉,去往ISP1網段且從fa1/0出去的流量
R1(config-route-map)#match ip address isp1
R1(config-route-map)#match interface fa1/0
R1(config-route-map)#exit
R1(config)#route-map nat-isp2 permit 110//建立NAT條件路由圖nat-isp2。匹配當ISP2線路正常。去往ISP2網段且從fa1/0出去的流量
R1(config-route-map)#match ip address isp2
R1(config-route-map)#match interface fa1/0
R1(config-route-map)#exit
R1(config)#route-map nat-isp22 permit 110//建立NAT條件路由圖nat-isp22,匹配當ISP2線路斷掉。去往ISP2網段且從fa0/1出去的流量
R1(config-route-map)#match ip address isp2
R1(config-route-map)#match interface fa0/1
R1(config-route-map)#exit
R1(config)#route-map nat-foreign1 permit 220//建立NAT條件路由圖nat-foreign1,匹配選擇ISP1爲出口。且既不是ISP1也不是ISP2的流量
R1(config-route-map)#match ip address foreign
R1(config-route-map)#match interface fa0/1
R1(config-route-map)#exit
R1(config)#route-map nat-foreign2 permit 220//建立NAT條件路由圖nat-foreign2。匹配選擇ISP2爲出口,且既不是ISP1也不是ISP2的流量
R1(config-route-map)#match ip address foreign
R1(config-route-map)#match interface fa1/0
R1(config-route-map)#exit
R1(config)#ip nat inside source route-map nat-isp1interface fa0/1 overload//當ISP1線路正常,且去往ISP1網段時就轉換
R1(config)#ip nat inside source route-map nat-isp11interface fa1/0 overload//當ISP1線路斷掉,而ISP2線路正常,且又是去往ISP1網段時就轉換,備用
R1(config)#ip nat inside source route-map nat-isp2interface fa1/0 overload//當ISP2線路正常,且去往ISP2網段時就轉換
R1(config)#ip nat inside source route-map nat-isp22interface fa0/1 overload////當ISP2線路斷掉,而ISP1線路正常,且又是去往ISP2網段時就轉換。備用
R1(config)#ip nat inside source route-map nat-foreign1interface fa0/1 overload//假設ISP1線路正常。其它非去往ISP1或ISP2的流量,且從fa0/1出去的流量就轉換
R1(config)#ip nat inside source route-map nat-foreign2interface fa1/0 overload/假設ISP1線路線路斷掉。而ISP2線路正常。此時其它既不是去往ISP1也不是去往ISP2網段,且從fa1/0出去的流量就轉換
R1(config)#int fa0/0
R1(config-if)#ip policy route-map isp-working//將策略路由應用到接口fa0/0
R1(config-if)#exit
R1(config)#event manager applet ISP1-NAT-Status//建立EEM事件管理器ISP1-NAT-Status。用於清空NAT轉換表。避免線路切換時致使NAT轉換不能更新
R1(config-applet)#event track 1 state any //檢測追蹤ISP1線路的狀態是否變化,假設變化運行下一步,不然不運行
R1(config-applet)#action 1 cli command "enable"//運行Cisoc IOS命令enable進入特權模式
R1(config-applet)#action 2 cli command "clear ip 。nattranslation *"//再運行clear ip nat translation *清除NAT轉換表
R1(config-applet)#action 3 syslog msg "WAN failover,cleared NAT"//將事件寫入日誌記錄
R1(config-applet)#exit
R1(config)#event manager applet ISP2-NAT-Status//建立EEM事件管理器ISP2-NAT-Status,用於清空NAT轉換表,避免線路切換時致使NAT不能更新
R1(config-applet)#event track 2 state any//檢測追蹤ISP2線路的狀態是否變化,假設變化運行下一步,不然不運行
R1(config-applet)#action 1 cli command "enable" //運行Cisoc IOS命令enable進入特權模式
R1(config-applet)#action 2 cli command "clear ip nattranslation *"//再運行clear ip nat translation *清除NAT轉換表
R1(config-applet)#action 3 syslog msg "WAN failover,cleared NAT"//將事件寫入日誌記錄
R1(config-applet)#exit
檢查測試:
PC1#ping 1.1.1.1 r 500 //用PC1去ping 1.1.1.1,而後關閉ISP1的fa0/0接口,線路本身主動切換
Type escape sequence to abort.
Sending 500, 100-byte ICMP Echos to 1.1.1.1, timeout is 2seconds:
!!!!!!!!!!!!!!!!!!!!!!.....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!
Success rate is 99 percent (495/500), round-tripmin/avg/max = 36/45/132 m
PC1#ping 2.2.2.2 r500 //用PC1去ping 2.2.2.2,而後關閉ISP2的fa0/0接口,線路本身主動切換
Type escape sequence to abort.
Sending 500, 100-byte ICMP Echos to 2.2.2.2, timeout is 2seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!.....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!
Success rate is 99 percent (495/500), round-tripmin/avg/max = 28/54/148 ms
PC1#ping 3.3.3.3 r500//用PC1去ping 3.3.3.3,而後關閉ISP1的fa0/0接口,線路本身主動切換
Type escape sequence to abort.
Sending 500, 100-byte ICMP Echos to 3.3.3.3, timeout is 2seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!.....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!
Success rate is 99 percent (495/500), round-tripmin/avg/max = 24/39/148 ms
R1#debug ip nat //R1調試NAT
R1#debug ip policy //R1調試策略路由
Mar 1 00:03:20.059: IP: s=192.168.0.100(FastEthernet0/0), d=1.1.1.1, len 100, FIB policy match
*Mar 1 00:03:20.063: IP: s=192.168.0.100(FastEthernet0/0), d=1.1.1.1, g=100.100.100.1, len 100, FIB policy routed
*Mar 1 00:03:20.067: NAT*: ICMP id=0->1
*Mar 1 00:03:20.067: NAT*:s=192.168.0.100->100.100.100.100, d=1.1.1.1 [4]
*Mar 1 00:03:20.587: %TRACKING-5-STATE: 1 rtr 1reachability Up->Down
*Mar 1 00:03:22.059: IP: s=192.168.0.100(FastEthernet0/0), d=1.1.1.1, len 100, FIB policy match
*Mar 1 00:03:22.063: IP: s=192.168.0.100(FastEthernet0/0), d=1.1.1.1, g=200.200.200.2, len 100, FIB policy routed
*Mar 1 00:03:22.071: NAT*:s=192.168.0.100->200.200.200.200, d=1.1.1.1 [5]
*Mar 1 00:11:44.787: IP: s=192.168.0.100(FastEthernet0/0), d=2.2.2.2, len 100, FIB policy match
*Mar 1 00:11:44.791: IP: s=192.168.0.100(FastEthernet0/0), d=2.2.2.2, g=200.200.200.2, len 100, FIB policy routed
*Mar 1 00:11:44.799: NAT*:s=192.168.0.100->200.200.200.200, d=2.2.2.2 [1029]
*Mar 1 00:11:45.667: %TRACKING-5-STATE: 2 rtr 2reachability Up->Down
*Mar 1 00:11:46.759: IP: s=192.168.0.100(FastEthernet0/0), d=2.2.2.2, len 100, FIB policy match
*Mar 1 00:11:46.763: IP: s=192.168.0.100(FastEthernet0/0), d=2.2.2.2, g=100.100.100.1, len 100, FIB policy routed
*Mar 1 00:11:46.771: NAT*:s=192.168.0.100->100.100.100.100, d=2.2.2.2 [1030]
*Mar 1 00:20:00.607: IP: s=192.168.0.100(FastEthernet0/0), d=3.3.3.3, len 100, FIB policy match
*Mar 1 00:20:00.611: IP: s=192.168.0.100(FastEthernet0/0), d=3.3.3.3, g=100.100.100.1, len 100, FIB policy routed
*Mar 1 00:20:00.615: NAT*:s=192.168.0.100->100.100.100.100, d=3.3.3.3 [1530]
*Mar 1 00:20:00.675: %TRACKING-5-STATE: 1 rtr 1reachability Up->Down
*Mar 1 00:20:02.591: IP: s=192.168.0.100(FastEthernet0/0), d=3.3.3.3, len 100, FIB policy match
*Mar 1 00:20:02.591: IP: s=192.168.0.100(FastEthernet0/0), d=3.3.3.3, g=200.200.200.2, len 100, FIB policy routed
*Mar 1 00:20:02.599: NAT*:s=192.168.0.100->200.200.200.200, d=3.3.3.3 [1531]
實驗6、策略路由結合SLA與NAT,實現單路由雙ISP基於源地址負載冗餘
S1配置:
S1#conf t
S1(config)#int fa0/0
S1(config-if)#ip add 192.168.1.100 255.255.255.0
S1(config-if)#no sh
S1(config-if)#exit
S1(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.1
S2配置:
S2#conf t
S2(config)#int fa0/0
S2(config-if)#ip add 172.168.2.200 255.255.255.0
S2(config-if)#no sh
S2(config-if)#exit
S2(config)#ip route 0.0.0.0 0.0.0.0 172.168.200.1
ISP1配置:
ISP1#conf t
ISP1(config)#int fa0/0
ISP1(config-if)#ip add 100.100.100.1 255.255.255.0
ISP1(config-if)#no sh
ISP1(config-if)#exit
ISP1(config)#int fa0/1
ISP1(config-if)#ip add 12.12.12.1 255.255.255.0
ISP1(config-if)#no sh
ISP1(config-if)#exit
ISP1(config)#int lo 1
ISP1(config-if)#ip add 1.1.1.1 255.255.255.0
ISP1(config-if)#exit
ISP1(config)#int lo 2
ISP1(config-if)#ip add 11.11.11.11 255.255.255.0
ISP1(config-if)#exit
ISP1(config)#router bgp 1
ISP1(config-router)#bgp router-id 1.1.1.1
ISP1(config-router)#network 1.1.1.0 mask 255.255.255.0
ISP1(config-router)#network 11.11.11.0 mask 255.255.255.0
ISP1(config-router)#network 100.100.100.0 mask255.255.255.0
ISP1(config-router)#network 12.12.12.0 mask 255.255.255.0
ISP1(config-router)#neighbor 12.12.12.2 remote-as 2
ISP1(config-router)#exit
ISP2配置:
ISP2#conf t
ISP2(config)#int fa0/0
ISP2(config-if)#ip add 200.200.200.2 255.255.255.0
ISP2(config-if)#no sh
ISP2(config-if)#exit
ISP2(config)#int fa0/1
ISP2(config-if)#ip add 12.12.12.2 255.255.255.0
ISP2(config-if)#no sh
ISP2(config-if)#exit
ISP2(config)#int lo 1
ISP2(config-if)#ip add 2.2.2.2 255.255.255.0
ISP2(config-if)#exit
ISP2(config)#int lo 2
ISP2(config-if)#ip add 22.22.22.22 255.255.255.0
ISP2(config-if)#exit
ISP2(config)#router bgp 2
ISP2(config-router)#bgp router-id 2.2.2.2
ISP2(config-router)#network 2.2.2.0 mask 255.255.255.0
ISP2(config-router)#network 22.22.22.0 mask 255.255.255.0
ISP2(config-router)#network 200.200.200.0 mask255.255.255.0
ISP2(config-router)#network 12.12.12.0 mask 255.255.255.0
ISP2(config-router)#neighbor 12.12.12.1 remote-as 1
ISP2(config-router)#exit
GW配置:
GW#conf t
GW(config)#int fa0/0
GW(config-if)#ip add 192.168.1.1 255.255.255.0
GW(config-if)#ip nat inside
GW(config-if)#no sh
GW(config-if)#exit
GW(config)#int fa0/1
GW(config-if)#ip add 172.168.2.1 255.255.255.0
GW(config-if)#ip nat inside
GW(config-if)#no sh
GW(config-if)#exit
GW(config)#int fa1/0
GW(config-if)#ip add 100.100.100.100 255.255.255.0
GW(config-if)#ip nat outside
GW(config-if)#no sh
GW(config-if)#exit
GW(config)#int fa2/0
GW(config-if)#ip add 200.200.200.200 255.255.255.0
GW(config-if)#ip nat outside
GW(config-if)#no sh
GW(config-if)#exit
GW(config)#ip access-list standard s1
GW(config-std-nacl)#permit 192.168.1.0 0.0.0.255
GW(config-std-nacl)#exit
GW(config)#ip access-list standard s2
GW(config-std-nacl)#permit 172.168.2.0 0.0.0.255
GW(config-std-nacl)#exit
GW(config)#ip sla 1
GW(config-ip-sla)#icmp-echo 100.100.100.1 source-ip100.100.100.100
GW(config-ip-sla-echo)#timeout 300
GW(config-ip-sla-echo)#frequency 5
GW(config-ip-sla-echo)#exit
GW(config)#ip sla 2
GW(config-ip-sla)#icmp-echo 200.200.200.2 source-ip200.200.200.200
GW(config-ip-sla-echo)#timeout 300
GW(config-ip-sla-echo)#frequency 5
GW(config-ip-sla-echo)#exit
GW(config)#track 1 rtr 1 reachability
GW(config-track)#exit
GW(config)#track 2 rtr 2 reachability
GW(config-track)#exit
GW(config)#ip sla schedule 1 life forever start-time now
GW(config)#ip sla schedule 2 life forever start-time now
GW(config)#route-map s1-s2-road permit 10
GW(config-route-map)#match ip address s1
GW(config-route-map)#set ip next-hop verify-availability100.100.100.1 1 track 1
GW(config-route-map)#set ip next-hop verify-availability200.200.200.2 2 track 2
GW(config-route-map)#exit
GW(config)#route-map s1-s2-road permit 20
GW(config-route-map)#match ip address s2
GW(config-route-map)#set ip next-hop verify-availability200.200.200.2 1 track 2
GW(config-route-map)#set ip next-hop verify-availability100.100.100.1 2 track 1
GW(config-route-map)#exit
GW(config)#int fa0/0
GW(config-if)#ip policy route-map s1-s2-road
GW(config-if)#exit
GW(config)#int fa0/1
GW(config-if)#ip policy route-map s1-s2-road
GW(config-if)#exit
GW(config)#route-map s1-nat1 permit 10
GW(config-route-map)#match ip address s1
GW(config-route-map)#match interface fa1/0
GW(config-route-map)#exit
GW(config)#route-map s1-nat2 permit 10
GW(config-route-map)#match ip address s1
GW(config-route-map)#match interface fa2/0
GW(config-route-map)#exit
GW(config)#route-map s2-nat1 permit 10
GW(config-route-map)#match ip address s2
GW(config-route-map)#match interface fa2/0
GW(config-route-map)#exit
GW(config)#route-map s2-nat2 permit 10
GW(config-route-map)#match ip address s2
GW(config-route-map)#match interface fa1/0
GW(config-route-map)#exit
GW(config)#ip nat inside source route-map s1-nat1interface fa1/0 overload
GW(config)#ip nat inside source route-map s1-nat2interface fa2/0 overload
GW(config)#ip nat inside source route-map s2-nat1interface fa2/0 overload
GW(config)#ip nat inside source route-map s2-nat2interface fa1/0 overload
GW(config)#event manager applet s1-nat-status
GW(config-applet)#event track 1 state any
GW(config-applet)#action 1 cli command "enable"
GW(config-applet)#action 2 cli command "clear ip nattranslation *"
GW(config-applet)#exit
GW(config)#event manager applet s2-nat-status
GW(config-applet)#event track 2 state any
GW(config-applet)#action 1 cli command "enable"
GW(config-applet)#action 2 cli command "clear ip nattranslation *"
GW(config-applet)#exit
檢查測試:
S1#ping 1.1.1.1 r600 //S1去ping1.1.1.1,在ping的期間將ISP1的fa0/0接口關閉。線路本身主動進行切換ISP2
Type escape sequence to abort.
Sending 600, 100-byte ICMP Echos to 1.1.1.1, timeout is 2seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.....!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 99 percent (595/600), round-tripmin/avg/max = 36/66/188 ms
S2#ping 2.2.2.2 r 600//S2去ping 2.2.2.2,在ping的期間將ISP2的fa0/0接口關閉。線路進行切換到ISP1
Type escape sequence to abort.
Sending 600, 100-byte ICMP Echos to 2.2.2.2, timeout is 2seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 99 percent (596/600), round-tripmin/avg/max = 40/67/140 ms
GW#debug ip nat
IP NAT debugging is on
GW#debug ip policy
Policy routing debugging is on
*Mar 1 00:04:30.883: NAT*:s=192.168.1.100->100.100.100.100, d=1.1.1.1 [720]
*Mar 1 00:04:32.875: IP: s=192.168.1.100(FastEthernet0/0), d=1.1.1.1, len 100, FIB policy match
*Mar 1 00:04:32.879: IP: s=192.168.1.100(FastEthernet0/0), d=1.1.1.1, g=100.100.100.1, len 100, FIB policy routed
*Mar 1 00:04:32.883: NAT*:s=192.168.1.100->100.100.100.100, d=1.1.1.1 [721]
*Mar 1 00:04:33.447: %TRACKING-5-STATE: 1 rtr 1reachability Up->Down
*Mar 1 00:04:34.899: IP: s=192.168.1.100(FastEthernet0/0), d=1.1.1.1, len 100, FIB policy match
*Mar 1 00:04:34.903: IP: s=192.168.1.100(FastEthernet0/0), d=1.1.1.1, g=200.200.200.2, len 100, FIB policy routed
*Mar 1 00:04:34.907: NAT*:s=192.168.1.100->200.200.200.200, d=1.1.1.1 [722]
*Mar 1 00:04:34.999: NAT*: s=1.1.1.1,d=200.200.200.200->192.168.1.100 [722]
*Mar 1 00:25:25.243: NAT*: s=172.168.2.200->200.200.200.200, d=2.2.2.2[686]
*Mar 1 00:25:27.239: IP: s=172.168.2.200 (FastEthernet0/1), d=2.2.2.2, len100, FIB policy match
*Mar 1 00:25:27.243: IP: s=172.168.2.200 (FastEthernet0/1), d=2.2.2.2,g=200.200.200.2, len 100, FIB policy routed
*Mar 1 00:25:27.247: NAT*: s=172.168.2.200->200.200.200.200, d=2.2.2.2[687]
*Mar 1 00:25:28.579: %TRACKING-5-STATE: 2 rtr 2 reachability Up->Down
*Mar 1 00:25:29.227: IP: s=172.168.2.200 (FastEthernet0/1), d=2.2.2.2, len100, FIB policy match
*Mar 1 00:25:29.231: IP: s=172.168.2.200 (FastEthernet0/1), d=2.2.2.2,g=100.100.100.1, len 100, FIB policy routed
*Mar1 00:25:29.239: NAT*: s=172.168.2.200->100.100.100.100, d=2.2.2.2[688]