我在 Windows 10 桌面(使用 OpenVPN)中运行 VPN,VPN 是默认网关,因此默认情况下所有流量都通过 VPN 隧道。
但是,我想将某些应用程序从 VPN 中排除,以便它们的流量通过 VPN 直接从物理接口流出(所谓的“拆分隧道”)
我假设此解决方案将涉及 WFP(Windows 过滤平台)API,并且可能与 Windows 等效
setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, device, sizeof(device))
我目前通过“cgroups”和基于策略的路由/多个路由表在 Linux 中工作。
但据我了解,Windows 既没有基于策略的路由,也没有多个路由表。但我仍然可以想办法在 Windows 中实现这一点,但我找不到实现它的 API
一种方法是挂钩特定应用程序的套接字创建,然后使用 Windows 等效的SO_BINDTO_DEVICE
套接字选项 ( setsockopt()
) 来强制套接字绑定到物理接口而不是 Tap 驱动程序。
但是,同样,我找不到相关的 API 来实现上述目标。
所以我有几个问题:
(1) 我想在 WFP(Windows 过滤平台)的给定 API 或一般的 Windows API 中做些什么?如果是这样,你建议我看哪些 API?
(2) 或者,我必须编写“WFP 调用驱动程序”吗?如果是这样,您能否为我指出一些资源,以及我的特定问题的一个很好的起点?:)
(3) 还有什么我可能遗漏的吗?实现我想要的更简单的方法?我知道这在 Windows 中是可能的,因为我在某些 VPN 中看到了该功能,但我想在我自己的个人 VPN 中复制它:)