![](/img/trans.png)
[英]Redirect per-app DNS requests at the ALE_CONNECT_REDIRECT_V4 layer using WFP
[英]How do I implement per-app routing behavior on windows?
我在 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()
) 来强制套接字绑定到物理接口而不是点击驱动程序。
但是,同样,我找不到相关的 API 来实现上述目标。
所以我有几个问题:
(1) 我想在 WFP(Windows 过滤平台)的给定 API 或一般的 Windows API 中做些什么? 如果是这样,你建议我看哪些 API?
(2) 或者,我必须编写“WFP 调用驱动程序”吗? 如果是这样,您能否为我指出一些资源,以及我的特定问题的一个很好的起点? :)
(3) 还有什么我可能遗漏的吗? 实现我想要的更简单的方法? 我知道这在 Windows 中是可能的,因为我在某些 VPN 中看到了该功能,但我想在我自己的个人 VPN 中复制它:)
是的,您可以通过复制和编辑 (Windows) VPN 连接来强制应用使用您的 VPN 连接。
WIN+R
ncpa.cpl
APP_VPN
(例如)Add-VpnConnectionTriggerApplication -Name "APP_VPN" –ApplicationID "C:\path-to-your\game.exe" -Force
# Enable (Application) split-tunneling
Set-VpnConnection -Name "APP_VPN" -SplitTunneling $True
您还可以在以下位置查看电话簿中的 VPN 设置详细信息:
C:\Users\<User>\AppData\Roaming\Microsoft\Network\Connections\Pbk
完毕!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.