使用nProbe监控移动网络(2G,3G和LTE)
以前,电信行业一直认为监控移动网络流量是复杂,昂贵且专有的。不幸的是,这是开源运动未能广泛传播的少数领域之一,而供应商锁定仍然是标准。去年,我们参观了巴塞罗那的世界移动通信大会,以了解更多有关的信息,结论是,借助Android,移动终端已经相当开放,但是网络仍然很封闭。这一直是向nProbe添加分析移动流量能力的驱动力。
我们的目标一直是监视移动网络流量,类似于在标准IP网络上发生的事情,以便提供更多附加功能。在移动网络中,存在一种称为GTP(GPRS隧道协议)的协议,该协议可分解为两个单独的协议:
GTP-U:用于承载用户数据流量,即你用手持设备上网时的网络流量(如电子邮件、网上冲浪、游戏)。
GTP-C:用于承载GPRS核心网络内的信令。每当您用手持设备连接/断开、跳入网络内部时,网络都会产生一条信息。监控GTP-C是保持和关联用户(即IMSI)和移动网络内与用户相关的动态IP地址的关键。GTP-C中的内容远不止这些,比如用户的电话号码、用户所连接的小区(因而也是它的物理位置)、APN和手持设备的型号。GTP-C用于协商隧道ID,然后用来承载用户流量,所以GTP-C的流量状态必须保存在数据库的某个地方,以保持用户和其IP地址之间的关联。
GTP-C由两个插件(gtpv1和gtpv2插件)以及radius协议处理。相反,nProbe核心已更新为支持移动网络上使用的许多协议和封装,例如:
- PPP /多链路PPP
- 移动IP
- L2TP
- GTP v1(2G / 3G网络)和v2(4G / LTE网络)
- GRE
- 在移动网络上使用具有3GPP扩展的Radius。
所有现有的nProbe插件均已更新,因此GTP-C的优先级是最高的。这意味着当nProbe检测一些GTP封装的HTTP流量时,还会返回有关生成该流量的用户的常规信息(URL,Cookie,User-Agent…。)信息(即IMSI)。使用微云示例在nProbe中透明地实现了这种信息关联。
每当nProbe检测某些GTP-C消息时,它都会动态(自动)将用户状态更新到redis数据库中,以便用户可以将此信息绑定到用户。
微型云体系结构的另一个优势是,它允许跨各种探针关联流量。实际上,移动网络是自然分布的,通常不可能将所有流量聚合到一个位置。微型云允许所有探测器共享数据(当然,在示例nProbe实例上实现了数据缓存,以避免过多的通信),因此支持所有组合。
PF_RING群集也已更新,因此无论何时运行nProbe的服务器,传入的流量都可以在所有正在运行的nProbe实例之间共享。这是通过尊重GTP隧道来实现的,因为PF_RING不会在外部数据包包络上保持平衡,而是在隧道流量上保持平衡。使用此方法,PF_RING允许在多个实例之间平衡传入网络流量(也在多个传入接口上),从而监视单个服务器上的多千兆位流量。
当然,nDPI能够解析GTP封装的流量,因此您可以配置nProbe(通过指定的模板-T)以在应用程序级别分析流量,从而了解第7层协议。
nProbe可以使用以下信息元素通过NetFlow v9 / IPFIX导出信息:
Plugin GTPv1 Signaling Protocol templates:
[NFv9 57692][IPFIX 35632.220] %GTPV1_REQ_MSG_TYPE GTPv1 Request Msg Type
[NFv9 57693][IPFIX 35632.221] %GTPV1_RSP_MSG_TYPE GTPv1 Response Msg Type
[NFv9 57694][IPFIX 35632.222] %GTPV1_C2S_TEID_DATA GTPv1 Client->Server TunnelId Data
[NFv9 57695][IPFIX 35632.223] %GTPV1_C2S_TEID_CTRL GTPv1 Client->Server TunnelId Control
[NFv9 57696][IPFIX 35632.224] %GTPV1_S2C_TEID_DATA GTPv1 Server->Client TunnelId Data
[NFv9 57697][IPFIX 35632.225] %GTPV1_S2C_TEID_CTRL GTPv1 Server->Client TunnelId Control
[NFv9 57698][IPFIX 35632.226] %GTPV1_END_USER_IP GTPv1 End User IP Address
[NFv9 57699][IPFIX 35632.227] %GTPV1_END_USER_IMSI GTPv1 End User IMSI
[NFv9 57700][IPFIX 35632.228] %GTPV1_END_USER_MSISDN GTPv1 End User MSISDN
[NFv9 57701][IPFIX 35632.229] %GTPV1_END_USER_IMEI GTPv1 End User IMEI
[NFv9 57702][IPFIX 35632.230] %GTPV1_APN_NAME GTPv1 APN Name
[NFv9 57703][IPFIX 35632.231] %GTPV1_MCC GTPv1 Mobile Country Code
[NFv9 57704][IPFIX 35632.232] %GTPV1_MNC GTPv1 Mobile Network Code
[NFv9 57705][IPFIX 35632.233] %GTPV1_CELL_LAC GTPv1 Cell Location Area Code
[NFv9 57706][IPFIX 35632.234] %GTPV1_CELL_CI GTPv1 Cell CI
[NFv9 57707][IPFIX 35632.235] %GTPV1_SAC GTPv1 SAC
Plugin GTPv2 Signaling Protocol templates:
[NFv9 57742][IPFIX 35632.270] %GTPV2_REQ_MSG_TYPE GTPv2 Request Msg Type
[NFv9 57743][IPFIX 35632.271] %GTPV2_RSP_MSG_TYPE GTPv2 Response Msg Type
[NFv9 57744][IPFIX 35632.272] %GTPV2_C2S_S1U_GTPU_TEID GTPv2 Client->Svr S1U GTPU TEID
[NFv9 57745][IPFIX 35632.273] %GTPV2_C2S_S1U_GTPU_IP GTPv2 Client->Svr S1U GTPU IP
[NFv9 57746][IPFIX 35632.274] %GTPV2_S2C_S1U_GTPU_TEID GTPv2 Srv->Client S1U GTPU TEID
[NFv9 57747][IPFIX 35632.275] %GTPV2_S2C_S1U_GTPU_IP GTPv2 Srv->Client S1U GTPU IP
[NFv9 57748][IPFIX 35632.276] %GTPV2_END_USER_IMSI GTPv2 End User IMSI
[NFv9 57749][IPFIX 35632.277] %GTPV2_END_USER_MSISDN GTPv2 End User MSISDN
[NFv9 57750][IPFIX 35632.278] %GTPV2_APN_NAME GTPv2 APN Name
[NFv9 57751][IPFIX 35632.279] %GTPV2_MCC GTPv2 Mobile Country Code
[NFv9 57752][IPFIX 35632.280] %GTPV2_MNC GTPv2 Mobile Network Code
[NFv9 57753][IPFIX 35632.281] %GTPV2_CELL_TAC GTPv2 Tracking Area Code
[NFv9 57754][IPFIX 35632.282] %GTPV2_SAC GTPv2 Cell Identifier
Plugin Radius Protocol templates:
[NFv9 57712][IPFIX 35632.240] %RADIUS_REQ_MSG_TYPE RADIUS Request Msg Type
[NFv9 57713][IPFIX 35632.241] %RADIUS_RSP_MSG_TYPE RADIUS Response Msg Type
[NFv9 57714][IPFIX 35632.242] %RADIUS_USER_NAME RADIUS User Name (Access Only)
[NFv9 57715][IPFIX 35632.243] %RADIUS_CALLING_STATION_ID RADIUS Calling Station Id
[NFv9 57716][IPFIX 35632.244] %RADIUS_CALLED_STATION_ID RADIUS Called Station Id
[NFv9 57717][IPFIX 35632.245] %RADIUS_NAS_IP_ADDR RADIUS NAS IP Address
[NFv9 57718][IPFIX 35632.246] %RADIUS_NAS_IDENTIFIER RADIUS NAS Identifier
[NFv9 57719][IPFIX 35632.247] %RADIUS_USER_IMSI RADIUS User IMSI (Extension)
[NFv9 57720][IPFIX 35632.248] %RADIUS_USER_IMEI RADIUS User MSISDN (Extension)
[NFv9 57721][IPFIX 35632.249] %RADIUS_FRAMED_IP_ADDR RADIUS Framed IP
[NFv9 57722][IPFIX 35632.250] %RADIUS_ACCT_SESSION_ID RADIUS Accounting Session Name
[NFv9 57723][IPFIX 35632.251] %RADIUS_ACCT_STATUS_TYPE RADIUS Accounting Status Type
[NFv9 57724][IPFIX 35632.252] %RADIUS_ACCT_IN_OCTETS RADIUS Accounting Input Octets
[NFv9 57725][IPFIX 35632.253] %RADIUS_ACCT_OUT_OCTETS RADIUS Accounting Output Octets
[NFv9 57726][IPFIX 35632.254] %RADIUS_ACCT_IN_PKTS RADIUS Accounting Input Packets
[NFv9 57727][IPFIX 35632.255] %RADIUS_ACCT_OUT_PKTS RADIUS Accounting Output Packets
并使用一些命令行选项将流量信息保存在转储文件中:
--gtpv1-dump-dir | Directory where GTPv1 logs will be dumped
--gtpv1-exec-cmd | Command executed whenever a directory has been dumped
--gtpv2-dump-dir | Directory where GTPv2 logs will be dumped
--gtpv2-exec-cmd | Command executed whenever a directory has been dumped
--radius-dump-dir | Directory where Radius logs will be dumped
--radius-exec-cmd | Command executed whenever a directory has been dumped
本质上,nDPI,PF_RING和nProbe现在能够监视多千兆位移动流量,并使用微云将探针中的GTP-C与GTP-U流量自动关联,而无需像其他工具那样在收集器上进行操作。优点是,一旦流被导出,收集器就立即知道产生流量的移动用户,更不用说收集器上实现的相关性在计算资源方面是昂贵的。由于微云中的信息是持久的,因此在极不可能的崩溃情况下,由于微云中维护了用户与GTP的流量关联,因此不会丢失任何内容。这也适用于移动流量增长且需要启动其他探测的情况(也适用于仍通过IP连接到微云的不同网络位置):启动以后,它们会自动执行。
迄今为止,nProbe已有用于永久监视某些国家/地区移动运营商的流量的案例。
- [Golang软件推荐] RSA公私钥加解密(解决Golang私钥加密公钥解密问题)
- [喵咪大数据]Hive+Hbase关联
- 再战子域共享Cookie问题
- [喵咪大数据]Presto查询引擎
- 如何在5分钟内做出你的第一个开源贡献
- [喵咪大数据]HUE大数据管理工具
- Dubbo源码解析 —— Zookeeper 订阅
- 注册中心 Eureka 源码解析 —— 项目结构简介
- 【平台】Seldon.io发布新开源平台,用于Kubernetes上的机器学习
- 分布式事务 TCC-Transaction 源码分析 —— TCC 实现
- 了解学习速率以及它如何提高深度学习的表现
- 分布式消息队列 RocketMQ源码解析:事务消息
- WordPress用Windows主机设置伪静态方法
- PHP页面跳转代码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- GitHub竟然还有这些骚操作,赶紧学起来
- leetcode之单词规律
- 内存溢出及解决方案
- 3分钟短文:Laravel控制器用法光速入门
- Linux查看ip的实例方法
- Ubuntu18.04通过源码安装Odoo14的教程
- Linux系统中SSH服务基于key认证实践的过程
- linux防墙iptables详细介绍、配置方法与案例
- Linux unlink函数和删除文件的操作方法
- Linux seq命令的使用详解
- Linux运维工具Supervisor的安装使用(进程管理工具)
- Linux whatis命令的使用方法
- Linux tr命令的使用方法
- Linux man命令的具体使用
- Linux locate命令的使用方法