繁体   English   中英

如何在 Windows 上实现每个应用程序的路由行为?

[英]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 连接。

  1. 打开运行提示符: WIN+R
  2. 类型: ncpa.cpl
  3. 将您的“旧 VPN”复制到APP_VPN (例如)
  4. 打开普通用户 Powershell
  5. 使用以下命令更改新的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM