0

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

4

1 回答 1

4

您可以按原样使用 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,一些用户空间socksification工具可能对你有用。这些程序在启动特定应用程序时挂钩与网络相关的系统调用,以便建立连接,例如通过 SOCKS。如果这样的应用程序支持路由规则,它可能会满足您的需求。

An example of such a tool for Windows is ProxyCap (commercial software), which claims support for "flexible routing rules".

于 2011-10-30T17:22:34.917 回答