路由技术 -- 路由策略(Routing Policy)与策略路由(PBR,Policy-based Routing)技术
目錄
路由策略的實現
路由策略定義
作用于路由,路由過濾和設置路由屬性
通過改變路由屬性(包括可達性)來改變網絡流量所經過的路徑
路由策略功能
控制路由的發布
控制路由的接收
過濾和控制引入的路由
設置特定路由的屬性
路由策略價值
控制設備的路由表規模,節約系統資源
控制路由的接收和發送,提高網絡安全性
修改路由屬性,對網絡數據流量進行合理規劃,提高網絡性能
路由策略實現步驟
定義規則
實施規則
路由策略使用限制
過濾器
Prefix Lists前綴列表
作用:專業抓取路由工具,不涉及數據層面。匹配路由的掩碼、掩碼范圍。
匹配依據
掩碼長度
掩碼長度范圍
地址前綴匹配規則:順序匹配、唯一匹配、默認拒絕
通配掩碼匹配路由原則
ip prefix-list配置舉例
route-map
route-map類似于腳本語言。默認動作是拒絕所有 需要有一條放行所有
Route-Policy的組成
Route-Policy由節點號(node)
匹配模式(mode)
Route-Policy子句
Route-Policy的匹配結果
節點的匹配模式(permit或deny)
if-match子句(如引用的地址前綴列表或者訪問控制列表)中包含的匹配條件(permit或deny)
route-map配置
定義
匹配
動作
match匹配規則
set動作
Route-Policy的注意事項
BGP路由策略
BGP路由策略 - route-policy路由過濾
BGP可匹配的屬性
BGP可設置的屬性
BGP路由策略-正則表達式 Regular expression
字符匹配公式
as-path-filter(隱含拒絕)
BGP路由策略 - Community屬性
基于Community屬性匹配路由進行路由策略(過濾、設置屬性)
BGP路由策略 - ip-prefix路由過濾
使用ip-prefix匹配拒絕路由,在BGP視圖下進行策略引用
BGP路由策略 - filter-policy路由過濾
調用ACL (peer指定鄰居生效)
調用前綴列表 (全局生效)
針對重分發類型過濾 例:直連路由重分發同時進行過濾
BGP路由策略 - Outbound Route Filtering (ORF)BGP出站路由過濾
ORF前提條件
distribute-list(分發列表)
作用:過濾路由,控制接受、拒絕哪些路由條目,即控制層面的控制
配置邏輯:使用ACL抓取,使用分發列表調用ACL
分發列表支持過濾方向
特殊場景
Policy-Based Routing(PBR)策略路由
匹配策略 match
基于源IP(結合ACL)
基于源接口
匹配tag
匹配數據報文長度
PBR動作
PBR調用
PBR debug
Offset-list 偏移列表
僅支持 EIGRP和RIP,累加進入或者發出的metric值
Metric 值
路由出站開銷決定了這條路由的Metric大小
RIP:hop條數
EIGRP:FD 可行性距離
OSPF:COST開銷
管理距離
華為
BGP
思科
環回口/本地接口 0
OSPF
BGP
不可達/不可用 255
通過數據流控制數據走向
路由匹配原則
最長掩碼匹配原則
AD值
Metric
重分發
將某路由協議的路由表引入到另一個協議的數據庫中
注意
BGP 到 OSPF
OSPF重分布
EIGRP重分布
修改某路由的AD
Seed Metric種子度量值--初始度量值
RIP和EIGRP重分布入時不帶seed metric,路由不加表
RIP、eigrp需要指定度量
passive-interface
協議分類
用途
ACL(Access Control List)
使用ACL匹配路由時不要使用反掩碼
使用對象
過濾流量,默認解決
匹配感興趣流
ACL用途
ACL類型
基于接口的ACL(Interface-based ACL)
基本ACL(Basic ACL)
高級ACL(Advanced ACL)
匹配規則
根據報文的入接口、源或目的地址、協議類型、源或目的端口號等屬性
filter-Policy
鏈路狀態協議中,filter-policy import命令用于過濾從協議路由表加入本地核心路由表的路由
路由協議下的filter-Policy策略過濾路由
ACL規則的動作是permit時,則該路由被系統接收或發布
路由不被系統接收或發布
路由過濾可分為黑名單和白名單方式
路由策略的實現
路由策略定義
作用于路由,路由過濾和設置路由屬性
通過改變路由屬性(包括可達性)來改變網絡流量所經過的路徑
路由策略功能
控制路由的發布
- 只發布滿足條件的路由信息
控制路由的接收
- 只接收必要、合法的路由信息,以控制路由表的容量,提高網絡的安全性
過濾和控制引入的路由
- 過濾:引入其它協議路由時,只引入滿足條件的路由信息
- 控制:引入路由同時設置路由屬性,使其滿足要求
設置特定路由的屬性
- 修改通過路由策略過濾的路由的屬性,滿足自身需要
路由策略價值
控制設備的路由表規模,節約系統資源
控制路由的接收和發送,提高網絡安全性
修改路由屬性,對網絡數據流量進行合理規劃,提高網絡性能
路由策略實現步驟
定義規則
- 定義將要實施路由策略的路由信息的特征,即定義匹配規則
- 用路由信息中屬性作為匹配依據,如目的地址、發布路由的設備IP
實施規則
- 將匹配規則應用于路由發布、接收和引入等過程
路由策略使用限制
node過多會引起過策略業務處理性能較慢,影響客戶體驗
route-policy和過濾器定義了一個以上的節點,則各節點中至少應該有一個節點的匹配模式是permit,否則會導致所有路由被deny掉
應用路由策略時,需先配置路由策略,再應用,不允許引用不存在的路由策略
過濾器
通過過濾器,定義一組匹配規則
除了Route-Policy,其它只能對路由進行過濾,不能修改過濾路由屬性
常見過濾器
- VPN :RD屬性過濾器(Route Distinguisher-Filter)
? RD屬性
- BGP專用過濾器
? AS路徑過濾器(AS-Path-Filter)
? AS路徑屬性
? 團體屬性過濾器(Community-Filter)
? 團體屬性
? 擴展團體屬性過濾器(Large-Community-Filter)
? Large-community屬性
? BGP協議專用路由策略調用關系
? 應用到BGP的peer對等體上
? 綁定Route-Policy,可以應用到BGP network分發路由,peer對等體和dampening震蕩功能,且同時修改過濾路由屬性
- 動態路由協議
? 訪問控制列表(ACL)
? 入接口、源或目的地址、協議類型、源或目的端口號
? 地址前綴列表(IP-Prefix List)
? 源地址、目的地址、下一跳
? Route-Policy
? 目的地址、下一跳、度量值、接口信息、路由類型、ACL、地址前綴列表、AS路徑過濾器、團體屬性過濾器、MAC地址列表和RD屬性過濾器等
? Route-Policy
? 所有路由協議都可以直接使用ACL訪問控制列表和IP-Prefix List地址前綴列表對路由進行過濾
? filter-policy調用規則分散在各路由協議分冊中,其詳細調用過程可參考各路由協議分冊
Prefix Lists前綴列表
作用:專業抓取路由工具,不涉及數據層面。匹配路由的掩碼、掩碼范圍。
匹配依據
掩碼長度
- 由IP地址和掩碼長度共同定義
掩碼長度范圍
- 精確匹配或一定范圍掩碼匹配的,前綴相同掩碼不同的路由
地址前綴匹配規則:順序匹配、唯一匹配、默認拒絕
前綴列表可以創建多個索引,每個索引對應一條過濾規則。按索引號從小到大順序匹配
匹配到一條語句,則停止匹配
默認所有未與任何一個表項匹配的路由都視為未通過地址前綴列表的過濾,末尾隱含“deny all”,建議創建一條允許所有其他路由通過
- 范圍
? 不配greater-equal 和less-equal,精確匹配
? 同時配greater-equal 和less-equal,則匹配掩碼范圍
? 只配greater-equal,則匹配掩碼長度范圍為[greater-equal-value,32]
? 只配less-equal,則匹配掩碼長度范圍為[mask-length,less-equal-value]
- 全0為通配地址。當前綴為全0時,可以在其后指定掩碼長度以及掩碼長度范圍。
? 指定掩碼長度,則具有該長度所有路由都被允許通過(Permit)或拒絕通過(Deny)
? 指定掩碼長度范圍,則表示掩碼長度范圍內所有路由都被允許通過(Permit)或拒絕通過(Deny)
通配掩碼匹配路由原則
不包含greater-equal和less-equal
- 只匹配缺省路由
- 匹配碼長度為X的所有路由
包含greater-equal參數,不包含less-equal參數
- 匹配原則:掩碼長度為16~32的路由被permit
- 匹配原則:掩碼長度為20~32的路由被permit
不包含greater-equal參數,包含less-equal
- 匹配碼長度為0~less-equal的所有路由
- 匹配碼長度為X~less-equal的所有路由
包含greater-equal參數和less-equal
- 匹配原則:掩碼長度為5~30的路由被permit
- 匹配原則:掩碼長度為20~30的路由被permit
ip prefix-list配置舉例
ip prefix-list CCNP permit 0.0.0.0/0:只允許默認路由
ip prefix-list CCNP permit 0.0.0.0/0 le 32: 允許所有路由ip prefix-list CCNP permit 0.0.0.0 0 less-equal 32
- 相當于訪問列表中的“permit any”
- 前綴0.0.0.0/0表示沒有前綴位必須匹配
- “Le 32” 表示子網掩碼必須小于或等于32。
- 該語句將匹配任何網絡
- 如果定義了一個以上的前綴列表表項,則至少應該有一個表項的匹配模式為permit模式
ip prefix-list CCNP permit 0.0.0.0/0 ge 32: 只允許主機路由
- 前綴0.0.0.0/0表示沒有前綴位必須匹配
- “Ge 32” 表示子網掩碼必須為32bit。
- 該語句只匹配主機路由
ip prefix-list CCNP permit 10.0.0.0/8 ge 24 le 24
- 允許其第一個8位等于10的任何路由,子網掩碼長度為24位
ip prefix-list 1 deny 11.11.11.0/24 不匹配所有,沒用的條目
route-map
route-map類似于腳本語言。默認動作是拒絕所有 需要有一條放行所有
Route-Policy的組成
Route-Policy由節點號(node)
- 順序匹配
? 從小到大的順序依次檢查各個表項,因此在指定節點號時,要注意符合期望的匹配順序
- 唯一匹配
? 節點之間“或”關系,只一個節點命中就認為通過該過濾器,不再進行其它節點的匹配
匹配模式(mode)
- permit
? 路由通過該節點過濾后執行該節點apply子句,不進入下個節點
? 如果路由項沒有通過該節點過濾,將進入下一個節點繼續匹配
- deny
? apply子句不會被執行。當路由滿足該節點所有if-match子句,將被拒絕通過該節點,不進入下一個節點
? 如果路由項不滿足該節點的if-match子句,將進入下一個節點繼續匹配
- 多個deny節點后設置一個不含if-match子句和apply子句的permit模式的Route-Policy,以允許其它路由通過
Route-Policy子句
- If-match子句
? 匹配對象是路由信息的某些屬性
? If-match子句匹配條件
? permit節點沒有任何if-match子句,則匹配所有IPv4和IPv6路由
? permit節點只配置IPv4 if-match子句,則只會匹配if-match子句的IPv4路由,同時匹配所有IPv6路由
? permit節點只配置IPv6 if-match子句,則只會匹配if-match子句的IPv6路由,同時匹配所有IPv4路由
? 不推薦使用同一個路由策略同時過濾IPv4路由和IPv6路由
? 同route-policy,有些節點匹配IPv4路由,有些節點匹配IPv6路由
? route-policy中只匹配了IPv4路由,但是該route-policy被IPv6協議引用
? route-policy中只匹配了IPv6路由,但是該route-policy被IPv4協議引用
- Apply子句
? 執行配置命令,對路由屬性修改
- goto next-node子句
? 當前節點匹配后,跳轉到指定節點繼續匹配
Route-Policy的匹配結果
節點的匹配模式(permit或deny)
if-match子句(如引用的地址前綴列表或者訪問控制列表)中包含的匹配條件(permit或deny)
route-map配置
定義
- route-map dzh permit 10
- route-map dzh permit 20 ?//放行所有,不配match和set即可
匹配
- match ip address prefix-list 1
動作
- set metric type-1
match匹配規則
match的同一行是或關系(同一個match調用多個ACL),match的上下行是與關系
匹配可以使用前綴列表也可以使用ACL
set動作
Route-Policy的注意事項
默認所有未匹配的路由將被拒絕通過Route-Policy
如果Route-Policy中定義了一個以上的節點,應保證各節點中至少有一個節點的匹配模式是permit
如果某路由信息沒有通過任一節點,則認為該路由信息沒有通過該Route-Policy
如果Route-Policy的所有節點都是deny模式,則沒有路由信息能通過該Route-Policy
BGP路由策略
BGP路由策略 - route-policy路由過濾
BGP可匹配的屬性
BGP可設置的屬性
- 設置community屬性
- 針對peer進行過濾
- 設置AS_PATH屬性
BGP路由策略-正則表達式 Regular expression
字符匹配公式
- 常規字符
- 控制字符(或有特殊意義的元字符)
? 原子字符
? 位于常規字符之前或之后用來限制或擴充常規字符的控制字符或占位符
? 乘號字符
? 跟在原子字符或常規字符之后,用來描述它前面的字符的重復方式
? 范圍字符
? 限定了一個范圍
- 常見的正則表達式
? 驗證數字:^[0-9]*$
? 驗證n位的數字:^\d{n}$
? 驗證至少n位數字:^\d{n,}$
? 驗證m-n位的數字:^\d{m,n}$
? 驗證零和非零開頭的數字:^(0|[1-9][0-9]*)$
? 驗證有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$
? 驗證有1-3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$
? 驗證非零的正整數:^\+?[1-9][0-9]*$
? 驗證非零的負整數:^\-[1-9][0-9]*$
? 驗證非負整數(正整數 + 0) ?^\d+$
? 驗證非正整數(負整數 + 0) ?^((-\d+)|(0+))$
? 驗證長度為3的字符:^.{3}$
? 驗證由26個英文字母組成的字符串:^[A-Za-z]+$
? 驗證由26個大寫英文字母組成的字符串:^[A-Z]+$
? 驗證由26個小寫英文字母組成的字符串:^[a-z]+$
? 驗證由數字和26個英文字母組成的字符串:^[A-Za-z0-9]+$
? 驗證由數字、26個英文字母或者下劃線組成的字符串:^\w+$
? 驗證用戶密碼:^[a-zA-Z]\w{5,17}$ 正確格式為:以字母開頭,長度在6-18之間,只能包含字符、數字和下劃線。
? 驗證是否含有 ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+
? 驗證漢字:^[\u4e00-\u9fa5],{0,}$
? 驗證Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
? 驗證InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
? 驗證電話號碼:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:--正確格式為:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
? 驗證身份證號(15位或18位數字):^\d{15}|\d{}18$
? 驗證一年的12個月:^(0?[1-9]|1[0-2])$ 正確格式為:“01”-“09”和“1”“12”
? 驗證一個月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ ???正確格式為:01、09和1、31。
? 整數:^-?\d+$
? 非負浮點數(正浮點數 + 0):^\d+(\.\d+)?$
? 正浮點數 ??^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
? 非正浮點數(負浮點數 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
? 負浮點數 ?^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
? 浮點數 ?^(-?\d+)(\.\d+)?
as-path-filter(隱含拒絕)
- 使用正則表達式匹配AS_PATH
? ip as-path-filter 1 permit 443
? permit允許匹配路由,deny拒絕匹配路由
? 跟隨表達式
? 檢查匹配路由
- as-path-filter與前綴列表類似,抓取路由后支持過濾和定義屬性
BGP路由策略 - Community屬性
基于Community屬性匹配路由進行路由策略(過濾、設置屬性)
BGP路由策略 - ip-prefix路由過濾
使用ip-prefix匹配拒絕路由,在BGP視圖下進行策略引用
BGP路由策略 - filter-policy路由過濾
調用ACL (peer指定鄰居生效)
調用前綴列表 (全局生效)
針對重分發類型過濾 例:直連路由重分發同時進行過濾
BGP路由策略 - Outbound Route Filtering (ORF)BGP出站路由過濾
最大限度地減少對等路由器之間發送的BGP更新的數量,濾掉無效的路由更新以及源路由更新,減少生成和處理路由的資源
ORF前提條件
- 路由器支持發送或接收ORF
? ORF 功能通過公告 ORF capabilityes 到對等路由器
? ORF啟用后,BGP speaker 安裝入站前綴過濾器到BGP peer ,peer將其作為出站列表,以此減少不必要的路由更新,減少雙方資源消耗
? 基于BGP的前綴出站路由過濾功能,可以配置為發送、接收、發送和接收三種ORF能力
? 本地對等體公告 ORF capability 于 send 模式下。遠程對等體接收到ORFcapability 于 receive模式,并且應用過濾器當做自己的出站策略本地和遠程的對等體交換更新,以保持每個路由器的ORF
- BGP出口路由過濾功能啟用
- BGP對等會話必須建立和運行
- 基于前綴的BGP出站路由過濾功能,不支持IP組播路由
distribute-list(分發列表)
作用:過濾路由,控制接受、拒絕哪些路由條目,即控制層面的控制
配置邏輯:使用ACL抓取,使用分發列表調用ACL
分發列表支持過濾方向
OUT方向,不影響本地路由,控制鄰居的路由條目
IN方向,控制本地路由條目
特殊場景
OSPF場景由于同區域使用T1 T2 LSA傳遞路由,分發列表無法攔截,只會影響設備本地路由表,LSA還是會繼續傳遞
RIP、EIGRP由于傳遞的是路由表,鏈路中任意設備過濾路由后端設備均無法收到上級已經被過濾掉的路由條目
Policy-Based Routing(PBR)策略路由
匹配策略 match
基于源IP(結合ACL)
基于源接口
匹配tag
匹配數據報文長度
PBR動作
set ip next-hop
PBR調用
Router(config-if)# ip policy route-map map-tag
- 接口下進行調用 ip police route-map,僅用于入站方向的數據包
Router(config)# ip local policy route-map map-tag
- 將route-map做的PBR運用到 路由器本地產生的所有報文上
PBR debug
show ip policy
debug ip policy
Offset-list 偏移列表
僅支持 EIGRP和RIP,累加進入或者發出的metric值
Metric 值
路由出站開銷決定了這條路由的Metric大小
路由的入站方向接口屬性決定了路由的metric
路由的出站方向接口不會改變路由的開銷
RIP:hop條數
EIGRP:FD 可行性距離
OSPF:COST開銷
管理距離
華為
BGP
- iBGP 255
- eBGP 255
思科
環回口/本地接口 0
OSPF
- 內部 110
- O ASE 150 AS的外部路由
BGP
- eBGP 20
- iBGP 200
不可達/不可用 255
通過數據流控制數據走向
路由匹配原則
最長掩碼匹配原則
AD值
Metric
重分發
將某路由協議的路由表引入到另一個協議的數據庫中
注意
小AD值注入大AD值會產生次優路徑
設計時候應避免雙點雙向重分布,調整路由AD值不能有效解決這類問題(將小AD協議改大)。如一定要雙點雙向重分布,應針對路由協議重發布本身做策略,避免路由倒灌,用route-map抓取外部路由,且不進行重分布。也可以根據路由來源打上tag,針對tag進行重分布策略,避免路由多次重分布。
BGP 到 OSPF
redistribute bgp ?【asnumber】 subnets //注意加入subnets參數
默認情況下只能把eBGP路由進入IGP中,iBGP路由不能引入IGP,內部路由引入內部協議
- bgp redistribute-internal
- 【hw】import-route bgp permit-ibgp
- 高風險,iBGP條目過多
OSPF重分布
redistribute eigrp 100 subnets metric-type 1
- 默認metric是20.
- 默認metric類型是type2.
- 子網(非主類)默認情況不進行充分布,必須加上subnets參數才會正常重分布.
EIGRP重分布
5個K 值 10000 100 255 1 1500
- Bandwidth in kbits = 10000
- Delay in tens of microseconds = 100
- Reliability = 255 (maximum)----表示100%可靠
- Load = 1 (minimum)
- MTU = 1500 bytes
修改某路由的AD
distance AD ip-src wildmask acls
- 建議在ASBR/ABR上進行配置
- AD:針對本地生效的OSPF優先級
- ip-src:更新源,對OSPF來說就是route-id
- wildmask:更新源的反掩碼
- acls:指定ACL編碼,針對匹配的ACL路由進行優先級調整
Seed Metric種子度量值--初始度量值
RIP和EIGRP重分布入時不帶seed metric,路由不加表
RIP、eigrp需要指定度量
passive-interface
協議分類
- RIP/IGRP——指定接口不向外發送路由更新,但接收路由更新
- EIGRP
? 指定接口不向外發送Hello消息,而且通過這個接口不與其他路由器建立鄰接關系,不發送其他EIGRP的數據流
? 單播使用直接指定nei ip即可
- OSPF——指定接口不向外發送Hello消息,而且通過這個接口不與其他路由器建立鄰接關系,不發送和接收路由信息。(有些IOS版本中,OSPF在被動接口上發送Hello和DBD分組,但是不發送LSU)
用途
- 宣告網段時將指定接口配置為被動
ACL(Access Control List)
使用ACL匹配路由時不要使用反掩碼
使用對象
過濾流量,默認解決
匹配感興趣流
ACL用途
限制網絡流量和提高網絡性能
控制訪問特定網絡資源,特定時間段內允許對網絡的訪問
防止針對IP報文、TCP報文、ICMP(Internet Control Message Protocol)報文的攻擊
ACL類型
基于接口的ACL(Interface-based ACL)
基本ACL(Basic ACL)
高級ACL(Advanced ACL)
匹配規則
根據報文的入接口、源或目的地址、協議類型、源或目的端口號等屬性
filter-Policy
鏈路狀態協議中,filter-policy import命令用于過濾從協議路由表加入本地核心路由表的路由
filter-policy ip-prefix in import
filter-policy ip-prefix xxx export static
路由協議下的filter-Policy策略過濾路由
ACL規則的動作是permit時,則該路由被系統接收或發布
路由不被系統接收或發布
- ACL規則的動作是deny時,則該路由不會被系統接收或發布
- 路由的網段不在ACL規則指定的范圍內,則該路由默認不被系統接收或發布
- ACL中不存在規則,那么引用該ACL的路由策略中涉及的所有路由不被系統接收或發布
路由過濾可分為黑名單和白名單方式
- 黑名單方式可以在同一個ACL中先配置動作是deny的編號較小的規則,用于過濾掉不希望被系統接收或發布的路由,然后再配置動作是permit的編號較大的規則,用于接收或發布其他路由
- 白名單方式可以在同一個ACL中先配置動作是permit的編號較小的規則,用于允許希望被系統接收或發布的路由,然后再配置動作是deny的編號較大的規則,用于過濾掉其他不希望被系統接收或發布的路由
總結
以上是生活随笔為你收集整理的路由技术 -- 路由策略(Routing Policy)与策略路由(PBR,Policy-based Routing)技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【TL学习笔记】1:领域自适应(Doma
- 下一篇: PCB板材组成详解