前言
NetFlow 讓網管人員可以收集 Packet 的 Header 資訊,從而分析網絡的狀況,包括網絡流量的類型及使用量等。收集和分析這些數據對網絡的監控及持續發展有極大幫助,本文以 Router 上的設定為主,即關於 Packet Header 收集的設定,並未包含使用軟件分析數據的教學。
基本原理
NetFlow 基本分為 Exporter 和 Collector 兩個角色,Exporter 即負責收集 Packet Header 資訊的設備,通常是 Router。Router 會在 Interface 上收集、整合和篩選 Packet Header,然後傳送至 Collector。Collector 則可以是普通 Windows 或 Linux Server,也可以是專門用作收集的 Appliance、VM 等,在 Server 上安裝了軟體便可以把數據作分析、繪圖及產生一些老闆最愛看的流量報告之類,較具名氣的品牌有 Solarwind,如果預算較緊也有 Opensource 的選擇,例如 NfSen。
以上圖為例子,我們想用 R2 收集 R1 和 R3 之間的流量。假設 R4 是一台 Collector,其 e1/0 的 IP Address 為 192.168.24.4。我們可用以下指令把 R2 設定成 Exporter:
R2(config)#ip flow-export version 9 R2(config)#ip flow-export destination 192.168.24.4 2055
然後在 Interface e1/0 啟動 NetFlow。
R2(config)#interface Ethernet1/0 R2(config-if)#ip flow ingress R2(config-if)#ip flow egress
Version 可選 1、5 或 9,v1 太舊,一般不用。v5 和 v9 的分別是,v5 送出來的 NetFlow 資訊包中,每筆資料的欄名 (Field Name) 都是預設不可改,而 v9 的欄名則比較 Dynamic,由 NetFlow Template 去定義,所以比較有彈性,Exporter 會定期送一份 NetFlow Template 給 Collector 說明每個欄位的意思。如果 NetFlow Collector 支緩 v9 的話,就選 v9 吧。2055 是 NetFlow 慣用的 UDP Port,也可自行選擇其他 Port,當然 Collector 的接收 Port 設定要相同。完成設定後可以跑 Wireshark Capture R2 的 e1/2 ,然後在 R1 產生一些 Traffic 去 R3 例如 Ping,就會看到 Exporter 把 Traffic Flow 的資訊傳給 Collector。
Wireshark 會捕捉到類似以下這些資訊。
然後在 Collector 上 (例如:NfSen),大概會看到類似下圖的 Traffic Flow 資訊。
Flow Cache
但流經 Router 的 Packet 成千上萬,Router 如何判斷那些 Packet 是同一條 Flow?其實 Router 會基於 Packet Header 裡面的 7 個值來判斷,如果全部相同則判斷為同一條 Flow。
- Ingress Interface
- Source IP
- Destination IP
- IP Protocol Number
- TCP 或 UDP Source Port
- TCP 或 UDP Destination Port
- IP Type of Service (ToS)
所以 Router 會把收集到的 Packet Header 資訊貯在自己的 Flow Cache 中,並作出統計,到「時機到了」才把資訊傳給 Collector。用指令 show ip cache flow 可以看到這些資訊。
R2#show ip cache flow IP packet size distribution (3861 total packets): 1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480 .000 .221 .001 .259 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 512 544 576 1024 1536 2048 2560 3072 3584 4096 4608 .000 .000 .000 .517 .000 .000 .000 .000 .000 .000 .000 IP Flow Switching Cache, 4456704 bytes 3 active, 65533 inactive, 9 added 1623 ager polls, 0 flow alloc failures Active flows timeout in 30 minutes Inactive flows timeout in 15 seconds IP Sub Flow Cache, 533256 bytes 3 active, 16381 inactive, 9 added, 9 added to flow 0 alloc failures, 0 force free 1 chunk, 1 chunk added last clearing of statistics never Protocol Total Flows Packets Bytes Packets Active(Sec) Idle(Sec) -------- Flows /Sec /Flow /Pkt /Sec /Flow /Flow TCP-Telnet 2 0.0 8 45 0.0 2.1 1.0 ICMP 3 0.0 999 700 2.0 25.9 15.5 IP-other 1 0.0 3 40 0.0 5.0 15.1 SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts Total: 6 0.0 502 695 2.0 14.5 10.6 SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts Et1/1 3.3.3.10 Et1/0* 1.1.1.10 01 0000 0000 265 Et1/0 1.1.1.10 Et1/1 3.3.3.30 01 0000 0800 265
何時才是所謂的「時機到了」?看 Active Flow Timeout 和 Inactive Flow Timeout。即是說,一些還在傳輸的 Flow,Router 會每隔 30 分鐘才更新 Collector 一次,而已經完成的 Traffic Flow,在完成後 15 秒,Router 就會告知 Collector。更改 Timeout 指令如下,留意時間單位不同。
R2(config)#ip flow-cache timeout active ? Timeout in minutes R2(config)#ip flow-cache timeout inactive ? Timeout in seconds R2(config)#ip flow-cache timeout active 5 R2(config)#ip flow-cache timeout inactive 10
Aggregation
在 Router 把 Flow Cache 的資訊送給 Collector 之前,可以先做 Aggregation 把資料進一步整合。例如,如果我們不需要 Collector 知道 Flow 來自那個獨立 Source Address,而只希望 Collector 知道 Flow 來自那個 Network Prefix 便足夠了,可以把 Flow 按 Source Prefix 組合起來。
R2(config)#ip flow-aggregation cache source-prefix R2(config-flow-cache)#export version 9 R2(config-flow-cache)#export destination 192.168.24.4 2055 R2(config-flow-cache)#cache timeout active 5 R2(config-flow-cache)#cache timeout inactive 10 R2(config-flow-cache)#enabled
參數跟上一部份類似,注意要設 enabled 才能把此 Aggregation 生效。然後便可透過 show ip cache flow aggregation source-prefix 指令查看 Aggregation Cache 裡面的資訊,格式跟 Cache Flow 類似。
R2#show ip cache flow aggregation source-prefix IP Flow Switching Cache, 278544 bytes 2 active, 4094 inactive, 13 added 191 ager polls, 0 flow alloc failures Active flows timeout in 30 minutes Inactive flows timeout in 15 seconds IP Sub Flow Cache, 34056 bytes 2 active, 1022 inactive, 13 added, 13 added to flow 0 alloc failures, 0 force free 1 chunk, 1 chunk added Src If Src Prefix Msk AS Flows Pkts B/Pk Active Et1/0 1.1.1.0 /24 0 2 198 100 9.9 Et1/1 3.3.3.0 /24 0 2 198 100 9.9
除了 Source-prefix,還有其他 Aggregation 方法包括:Port、ToS 等。
R2(config)#ip flow-aggregation cache ? as AS aggregation as-tos AS-TOS aggregation bgp-nexthop-tos BGP nexthop TOS aggregation destination-prefix Destination Prefix aggregation destination-prefix-tos Destination Prefix TOS aggregation prefix Prefix aggregation prefix-port Prefix-port aggregation prefix-tos Prefix-TOS aggregation protocol-port Protocol and port aggregation protocol-port-tos Protocol, port and TOS aggregation source-prefix Source Prefix aggregation source-prefix-tos Source Prefix TOS aggregation
Sampler
如果訊息量極多,處理大量的 Packet Header 會消耗 Router 資源,我們可以設定 Sampler,即不處理所有 Packet Header,只抽查部份 Packet Header 來放進 Flow Cache 之中。例如以下設定在 Interface 上每 50 個 Packet 只隨機抽樣 1 個放進 Flow Cache。
R2(config)#flow-sampler-map MAP_NETFLOW_SAMPLER R2(config-sampler)#mode random one-out-of 50 R2(config-sampler)#exit
把原本的 ip flow 設定拿掉,換成 flow-sampler,預設只有 ingress,如想 egress 也做 Sampler 則需多下一條指令指明 egress。
R2(config)#int ethernet 1/0 R2(config-if)#no ip flow egress R2(config-if)#no ip flow ingress R2(config-if)#flow-sampler MAP_NETFLOW_SAMPLER R2(config-if)#flow-sampler MAP_NETFLOW_SAMPLER egress
使用 Sampler 要注意的是 Sampling Rate 越低 (即 one-out-of 參數越大) 則數據失真越嚴重,Packet 量少的 Traffic Flow 有機會被忽略。另外,Collector 必需設定相同的 Sampling Rate 以便估算實際 Bandwidth 使用量。
Filter
最後,我們還可以用 Filter 決定監察範圍,方法是用 Policy Map 決定把那些 Traffic 打進那一個 Sampler。例如:我們只希望監察由 1.1.1.10 到 3.3.3.10 的 Traffic Flow。
R2(config)#ip access-list extended TRAFFIC R2(config-ext-nacl)#permit ip host 1.1.1.10 host 3.3.3.10 R2(config-ext-nacl)#exit R2(config)#class-map CLASS_FLOW R2(config-cmap)#match access-group name TRAFFIC R2(config-cmap)#exit R2(config)#policy-map POLICY_NETFLOW_FILTER R2(config-pmap)#class CLASS_FLOW R2(config-pmap-c)#netflow-sampler MAP_NETFLOW_SAMPLER
在 Interface 上把原有的 Sampler 拿掉,然後使用 Policy。
R2(config)#int ethernet 1/0 R2(config-if)#no flow-sampler MAP_NETFLOW_SAMPLER R2(config-if)#no flow-sampler MAP_NETFLOW_SAMPLER egress R2(config-if)#service-policy input POLICY_NETFLOW_FILTER
由於 Policy 通過 Class 來宣告應用那條 Sampler,這意味著我們可以為不同的 Traffic 類型使用不同的 Sampling Rate。
R2#show policy-map POLICY_NETFLOW_FILTER Policy Map POLICY_NETFLOW_FILTER Class CLASS_1 netflow-sampler: SAMPLER_1 Class CLASS_2 netflow-sampler: SAMPLER_2 Class CLASS_3 netflow-sampler: SAMPLER_3 Class class-default netflow-sampler: SAMPLER_DEFAULT
NetFlow 處理流程
最後總結一下整個 NetFlow 處理流程如下圖。
相關主題
Jan Ho 2018-11-18
Posted In: 網絡服務 Services
發佈留言