黃宏志,路懿,劉娜
(1.渤海大學信息化建設與管理中心,錦州121000;2.渤海大學信息科學與技術學院,錦州121000)
校園網進行了升級改造,啟用了IPv6,IPv4 也由原來的靜態配置改成動態獲取,同時,也改變了原來的實名認證方式,由銳捷的SAM 認證改變為銳捷的SAM+認證,去掉了認證客戶端,變成WebPortal 認證,只要終端上有瀏覽器就可以進行實名認證,這樣,原來無法進行實名認證的移動終端也可以進行實名認證了,極大地方便了用戶的上網體驗。同時,又帶來了一個新的問題,原來的網絡流量監測只能獲取到IPv4 的流量信息,如何獲取實名用戶的IPv6 流量,如何把不固定的IP(IPv4+IPv6)的流量與某個實名用戶對應。在現有的網絡體系和技術條件下,已經無法解決這個問題了。結合渤海大學校園網的管理,本文提出了一個全新的解決思路,把某個時段的流量信息與實名用戶對應起來,很好地解決了實名用戶的網絡流量監測問題。
關于IP 的網絡流量的采集,目前比較常用的方法有:NetFlow 技術[1-2]、sFlow 技術[3-4]、IPFIX 技術[5]、Net?Stream 技術[6]等,這些技術都是基于硬件實現的,需要特定的設備支持,有很大的局限性。還有一些研究機構,研究出一些基于x86 平臺實現的軟件方式對流量進行采集,例如DPDK[7]、nProbe[8]、PF-RING[9]等。另外,一些研究工作者也對網絡數據包的捕獲及分析做過一些研究,例如王煜驄等人研究的NTCI-Flow 技術[10]、孟慶娟等人進行的網絡數據捕獲及分析的研究[11]、趙寧等人基于DPDK 進行的研究[12]、于躍等人進行的嗅探技術的研究[13]等。而武昊等人則研究出了網絡流量測量的研究裝置[14]。朱俚治等人進行了網絡流量檢測算法的研究[15]。網絡嗅探技術部署比較靈活,既可以在交換機上通過端口鏡像的方式進行監測,又可以在路由器或者網關設備上通過端口鏡像或者使用分光設備來進行監測。因此,本方案中的流量采集部分采用嗅探技術。
在現有設備和網絡狀態下,通過與核心交換機交互,獲取某個時段的IP(IPv4+IPv6)與MAC 的對應關系,然后再查找銳捷SAM+的用戶上網記錄和在線記錄,獲取某個時段IPv4+MAC 與實名用戶的對應關系,然后結合流量監測設備,把某個時段的流量信息與實名用戶對應。
解決方案的技術架構如圖1 所示。

圖1 網絡流量監測技術架構圖
IP 流量采集設備,使用普通的x86 架構的PC 服務器,安裝Debian 操作系統,流量采集軟件使用C 語言編寫,調用使用比較廣泛的數據抓包庫libpcap[16]捕獲數據報并分析。采集設備的部署位置比較靈活,既可以在核心交換機上配置一個上行端口的鏡像口,也可以在出口路由器的內網口配置一個鏡像口(注:如果內網訪問外網的時候存在NAT 情況,必須在內網和NAT設備之間做端口鏡像,否則無法有效獲取內網IP 地址)。
(1)以太網數據報結構
目前校園網只有以太網設備,在處理數據報的時候,只處理以太網數據報。參照RFC894[17]的描述,以太網幀格式如圖2 所示。

圖2 以太網幀格式
在結構圖中,Type 的值決定了數據報的類型:
當Type 的值為0x8100、0x9100、0x9200、0x88a8 之一時,表示該數據報包含VLAN 信息,需要剝離VLAN信息后再進行處理。
當Type 的值為0x0800 時,表示該數據報是IPv4數據報,數據報報頭格式如圖3(RFC791[18])所示。

圖3 IPv4數據報報頭格式
當Type 為0x86dd 時,表示該數據報為IPv6 數據報,數據報報頭格式如圖4(RFC2460[19])所示。

圖4 IPv6數據報報頭格式
為了提高數據報分析的效率,只采集數據報中的源IP、目的IP、版本(IPv4 或者IPv6)、協議(TCP[20]、UDP[21]、ICMP[22-23])對于TCP 和UDP,還需要提取源端口和目的端口,對于ICMP,需要提取TYPE 和CODE作為源端口和目的端口。
(2)以太網數據報處理
在流量采集過程中,以數據報的關鍵信息:源IP、目的IP、源端口、目的端口、版本、協議作為流量聚合的鍵值,為了方便后面的查詢處理,以60 秒為一個聚合周期;為了平衡采集性能和內存占用,以5 分鐘為一個周期,把采集到的流量數據保存到本地數據庫中。
(1)MAC 信息采集
IP+MAC 的對應關系需要通過定時到核心交換機或者網關設備里面采集,并把采集到的信息記錄到中心數據庫中。以銳捷的核心交換機N18000 作為MAC的采集設備,不同廠家的設備有不同的命令形式,以下所有命令皆以N18000 為準[24]。
查看IPv4+MAC 的對應關系可以使用“show arp”這條命令,結果如圖5 所示。

圖5 show arp輸出示例
可以使用如下的方式提取出有效的IPv4+MAC 對應關系(代碼為PHP 腳本):

查看IPv6+MAC 的對應關系可以使用“show ipv6 neighbors”這條命令,結果如圖6 所示。

圖6 show ipv6 neighbors 輸出示例
可以使用如下的代碼提取出有效的IPv6+MAC 的對應關系(代碼為PHP 腳本):

(2)SAM 實名認證用戶信息的采集
校園網使用的是銳捷的SAM+實名認證系統,可以通過SAM+的認證日志,提取出某個時段的IPv4+MAC+用戶的對應關系。分析SAM+的數據庫結構,發現在線用戶的信息保存在ONLINE_USER 數據表中,有效的數據字段是:USER_ID、USER_MAC、USER_IPV4、USER_IPV6、USER_NAME、CREATE_TIME,分別表示:用戶賬號、MAC、IPv4、IPv6、用戶姓名、認證時間。如果是使用WebPortal 認證方式,那么IPv6 字段是空值,只有使用客戶端認證的時候,IPv6 才顯示為有效值。對于已經離線的用戶,可以通過ONLINE_DE?TAIL 這個數據表來獲取認證記錄,但是,這個表中并沒有用戶姓名的記錄,因此,在提取信息的時候,需要關聯數據表USERINFO 來獲取用戶姓名,相關的SQL語句如下:

因為登錄日志很多,不可能實時得到SAM+的數據庫中獲取信息,否則會對生產服務器產生過大的壓力,因此,本方法采用定時同步的方法(同步時間間隔5 分鐘,這樣既保證了有效的時間粒度,又對SAM+的數據庫沒有影響),把SAM+數據庫的有效信息同步到中心數據庫中,這樣在后面的流量分析模塊處理用戶信息的時候,不會影響到SAM+的正常運轉。
(1)流量整合
通過分析流量探針的數據庫里面的流量記錄和中心數據庫里面的IP+MAC 的記錄和IP+MAC+用戶的記錄,整合成完成的流量日志,保存到中心數據庫中,以供流量展示模塊進行展示。
具體方法是通過一個后臺腳本,定時把流量信息從流量探針數據庫同步到中心數據庫,為了平衡性能和時間,腳本每5 分鐘同步一次,在同步的時候,首先到流量探針數據庫獲取最新的流量信息,這個流量信息具有如下關鍵字段:源IP、目的IP、源端口、目的端口、版本、協議、開始時間、結束時間等,通過用戶設置的內網IP 范圍,修正流量信息的入流量和出流量,然后再到中心數據庫中查找對應的時間段該IP 所對應的用戶信息,如果沒有有效的實名認證用戶,就用MAC 作為流量的用戶信息。然后把整合后的具有完整信息的流量記錄保存到中心數據庫的流量表中。
(2)流量聚合
為了方便流量展示模塊的展示效率,還需要對歷史流量進行聚合。為了展示的方便,在中心數據庫中生成如下數據表:T_FLOW_M5、T_FLOW_TOTAL_M5、
T_FLOW_H1、 T_FLOW_TOTAL_H1、 T_FLOW_D1、T_FLOW_TOTAL_D1 分別保存5 分鐘的流量聚合、1小時的流量聚合、1 天的流量聚合。
以5 分鐘的流量聚合為例,可以使用如下的SQL語句來實現(數據庫使用MySQL),代碼中的'2020-08-12 23:55:00'表示聚合時刻,'2020-08-12 23:50:00'表示最后一次聚合時刻,'2020-08-12 23:45:00'表示5 分鐘總流量的最后聚合時刻:


通過查詢中心數據庫的流量記錄,以直觀而友好的圖表展示用戶的流量記錄。
在銳捷SAM+DHCP 環境下,先通過核心交換機獲取某個時段的IP 與MAC 的對應關系,再通過銳捷SAM+的用戶上網記錄和在線記錄獲取某個時段IPv4與實名用戶的對應關系,然后結合流量監測設備獲取的流量信息,把IP(IPv4+IPv6)的流量信息與實名用戶對應,是能夠準確獲取實名用戶的實時流量的。

圖7 24 小時所有用戶總流量

圖8 24 小時用戶總流量TOP10

圖9 某個用戶24 小時總流量

圖10 某個用戶24 小時目的IP 流量TOP10