您可以按原样使用 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(商业软件),它声称支持“灵活的路由规则”。
归档时间: |
|
查看次数: |
3560 次 |
最近记录: |