如何记录 OpenVPN 数据包内容?

如何记录 OpenVPN 数据包内容?

我正在设计一个可以分析和调试任意网络连接的开发工具,但我想将其作为一种服务而不是本地安装的软件来提供。

理想情况下,我希望将每个用户的所有入站和出站数据包保存到数据库中。

例如:

  1. 开发人员将运行其软件的机器连接到 VPN。
  2. 然后开发人员运行他的软件,该软件可以连接到任意主机。
  3. 流量通过 VPN 路由,并在那里被记录下来。
  4. 然后开发人员可以访问该会话的日志。

我很难弄清楚如何解决第三步。

我读过手册,搜索过网络,也搜索过 Server Fault,但我怀疑我遗漏了某个地方。我是否需要额外的工具来嗅探虚拟接口,或者 OpenVPN 能否以某种方式处理这个问题?

答案1

OpenVPN 本身不会嗅探任何东西,但您可以使用标准嗅探工具。

如果你将 OpenVPN 配置为以隧道模式运行,则应用程序主机与服务器之间的连接将出现在虚拟接口上(名称类似tun0在类 unix 主机上,每个端点都有自己的 IP 地址。从应用程序的角度来看,您的服务器看起来就像在物理上与应用程序主机位于同一网络上,并充当路由器,因此任何在常规网络接口上运行以获取所需数据的嗅探工具都可以。

我会或多或少做如下的事情

  • 让用户连接到 VPN(当然,OpenVPN 必须配置为路由全部通过VPN服务器的流量)。
  • 服务器端,配置一个钩子,用于记录连接时间、用户和所使用的 IP 地址
  • (可选)服务器端,配置另一个断开连接的钩子来注册该事件。

同时,在 VPN 虚拟设备上运行一个嗅探程序,该程序会不断从接口抓取数据包,查看远程地址,将其与当前用户列表进行匹配,并将其保存在数据库中。它可能是标准嗅探工具(用于从网络接口提取数据包)和自定义工具(用于解析数据包、提取所需信息并将其保存在某处)的组合。

答案2

您需要在流量离开充当 VPN 端点的计算机上的 OpenVPN TUN 或 TAP 接口时嗅探流量。这里没有什么魔法(或者至少我认为没有什么魔法)。接口就是接口,就是接口。

OpenVPN 不提供数据包嗅探的本机功能,但有很多专用工具可以执行该任务,例如 tcpdump 或 tshark/wireshark。

答案3

那么,OpenVPN 究竟如何呢?

我隐约觉得你在某处读到过 Linux 支持“虚拟”网络接口,其类型称为“TUN”和“TAP”(分别用于 IP 隧道样式和以太网样式接口),所以你用 Google 搜索,结果出现了 OpenVPN,它恰好以相同的方式命名其接口类型(因为我相信它在 Linux 上使用相同的内核机制)。

我认为你实际上正在照顾直接操作这些虚拟接口它允许您创建自己的网络接口,从而有效地通过用户空间应用程序传递所有经过的流量。

相关内容