如何修改/重定向数据包在Windows重写OpenVPN tun/tap驱动程序



我想创建一个透明的链代理使用重定向服务器和链式代理客户端编写的Qt为Windows。我试过ndis+tdi,但对我来说太复杂了。我已经开始破解openVPN的代码了。因此,任务是启动虚拟tap设备,即使没有必要在OpenVPN连接和重定向数据包到一些地址:端口上,我的重定向服务器将被绑定。

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

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

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

一旦你有一个程序操作TAP-Win32设备,更新路由表,使数据包路由到它。你可能想让它成为默认路由,覆盖之前的任何默认路由。但是请注意,路由表也适用于重定向程序本身,因此您需要为重定向程序连接到的主机添加特定的路由,否则它们最终将返回到TAP设备。tun2socks页面解释了在使用SSH转发时如何做到这一点。

Update: tun2socks只处理TUN设备,简单地转发所有传入的连接。它不能决定你想要转发什么。即使它有一些策略(如端口号),它也无法使用这些信息做任何有用的事情。例如,如果它以拒绝包响应,则连接将简单地失败—操作系统将而不是寻找替代路由。(如果可以转发连接到不同的SOCKS服务器-但我认为这在你的情况下是没有用的)

你似乎需要的特性被称为"策略路由",它需要由你的操作系统提供。不幸的是,Windows似乎不提供策略路由。如果你真的需要它,你可能想用Linux代替,它提供了比Windows更多的与网络相关的特性(策略路由就是其中之一)。

或者,不使用tun2socks,一些用户空间socksification工具可能对您有用。这些程序在启动特定应用程序时挂钩与网络相关的系统调用,以使连接正常进行,例如通过SOCKS。如果这样的应用程序支持路由规则,它可能符合您的需求。

这种Windows工具的一个例子是ProxyCap(商业软件),它声称支持"灵活的路由规则"。

最新更新