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