如何使用重写的 OpenVPN tun/tap dirver 在 Windows 中修改/重定向数据包

eox*_*425 0 windows redirect openvpn packet

我想使用 Qt for Windows 编写的重定向服务器和链代理客户端来制作透明的链代理。我尝试过 ndis+tdi 但对我来说太复杂了。我已经开始破解openVPN的代码了。因此,任务是启动虚拟 Tap 设备,即使不需要 OpenVPN 连接,并将数据包重定向到我的重定向服务器将绑定的某个地址:端口。也许实现新的插件功能会更好??...

Amb*_*jak 5

您可以按原样使用 OpenVPN 的 TUN/TAP 驱动程序(“TAP-Win32”)来实现由软件支持的网络设备。我不确定“重写 OpenVPN tun/tap 驱动程序”是什么意思;您不需要修改任何现有代码 - 只需编写自己的程序即可打开 TAP-Win32 并读取和写入帧/数据包。您不需要 OpenVPN 的任何其他部分,只需 TAP-Win32。

但是,如果您使用 TUN/TAP 驱动程序,则必须处理各个帧/数据包。如果您仅重定向 TCP(即您将重定向连接而不是数据包),则让您的重定向程序仅提供本地 SOCKS 服务器可能会很有用。使用 SOCKS,您可以使用连接而不是数据包。如果给定的网络程序支持 SOCKS,您可以简单地告诉它使用您的 SOCKS 服务器。

另一方面,如果您希望能够重定向所有应用程序,而不仅仅是那些理解 SOCKS 的应用程序(或者您不想为 SOCKS 配置每个应用程序),您可以使用一个程序,该程序允许您转发原始数据通过 SOCKS 服务器的 TCP 连接(数据包级别)。请参阅我的程序tun2socks

一旦您有了运行 TAP-Win32 设备的程序,请更新路由表以将数据包路由到其中。您可能希望将其设为默认路由,覆盖任何以前的默认路由。但请注意,路由表也适用于重定向程序本身,因此您需要为重定向程序连接到的主机添加特定路由,否则它们最终将返回到 TAP 设备。tun2socks 页面介绍了如何在使用 SSH 转发时执行此操作。

更新:tun2socks 仅处理 TUN 设备并简单转发所有传入连接。它并不能决定您要转发的内容。即使它有一些策略(例如端口号),它也无法利用该信息做任何有用的事情。例如,如果它响应拒绝数据包,连接就会失败 - 并且操作系统不会寻找替代路由。(它可以将连接转发到不同的 SOCKS 服务器 - 但我认为这对您的情况没有用)

您似乎需要的功能称为“策略路由”,它需要由您的操作系统提供。不幸的是,Windows 似乎不提供策略路由。如果您确实需要它,您可能想使用 Linux,它提供了比 Windows 更多的网络相关功能(策略路由就是其中之一)。

或者,除了使用 tun2socks,某些用户空间的袜子化工具可能适合您。这些程序在启动特定应用程序时挂钩与网络相关的系统调用,以便通过 SOCKS 等方式建立连接。如果这样的应用程序支持路由规则,它可能会满足您的需求。

适用于 Windows 的此类工具的一个示例是ProxyCap(商业软件),它声称支持“灵活的路由规则”。