我可以访问 VPN,但只想将其用于某些应用程序,而不是全部。
例如:
如果我连接到 VPN,我只希望 Opera 和 Newsbin 应用程序使用该 VPN 连接。所有其他应用程序(例如 Outlook)都应使用正常的互联网连接(当 VPN 已连接/打开时)。
据我所知这是不可能的,但我也不太确定。所以我的问题是:这可行吗?
答案1
不是。不是使用正常方法。路由就是路由。路由在 OSI 模型的较低层运行。您需要做的是让它在应用程序级别(更高层)了解情况,以便它可以检测到您正在使用的程序等。普通路由器不允许您根据应用程序或端口号配置路由。
不过我认为这是可能的。路由器可以看到端口,因此您可以按端口号过滤它们,并将流量发送到不同的路由。我确信我之前读过一些关于思科路由器的文章,它们可以做到这一点。但它们并不便宜,而且它们是需要大量配置的商用路由器,我猜你想要一些简单的家用路由器。
总结来说,路由器需要这个功能,而普通家用路由器甚至商用路由器都不支持这些功能。只有 Cisco 和 Sonicwall 的高级产品线才提供这些功能。
答案2
答案3
您可以使用 Windows 防火墙来实现这一点(前提是您使用的是 Win 7 或 Vista)-我写了一篇关于这个的指南
像平常一样连接到您的 VPN。
打开网络和共享中心 - 右键单击任务栏中的 Internet 连接图标,然后选择“打开网络和共享中心”(见下文)
您应该看到“查看您的活动网络”下列出了(至少)两个网络 - 您的 VPN 连接和一个名为“网络”的网络 - 也就是您的 ISP 连接。确保您的 VPN 是“公共网络”,而您的 ISP 连接是“家庭网络”。如果您需要更改任一连接,请单击它,然后会出现一个选项窗口(见下文)。
转到控制面板并单击系统和安全(见下文)。
在出现的窗口中,单击 Windows 防火墙(见下文)。
在 Windows 防火墙窗口中,单击左侧窗格中的“高级设置”(如下所示)。注意:您必须以管理员身份登录才能更改防火墙设置。
您应该会看到一个标题为“高级安全 Windows 防火墙”的窗口。在此窗口中,单击“入站规则”(见下文)。
在右侧窗格中,您将看到一个新规则的选项。单击它(见下文)。
在新入站规则向导(应该会出现)中,执行以下操作:
选择程序并单击下一步。
选择您希望阻止除 VPN 连接之外的所有流量的程序,然后单击“下一步”。
选择阻止连接。
勾选“域”和“私人”。确保“公共”未勾选。
对出站规则重复步骤 9。
答案4
我在 Windows 上做过这个。这个想法是将传出的网络包绑定到 VPN 的接口。有人建议强制绑定IP为此,但多亏了这个答案我有一个使用代理的想法。这种方法的缺点是,要么你的应用必须有代理支持,要么你必须使用代理程序(请参阅这里和这里)。这样做的好处是,您可以使用 FoxyProxy 或类似的附加组件将浏览器中 VPN 的使用限制在特定域中。
我用3代理采用SOCKS模式,并将外部接口绑定到VPN的IP,VPN连接采用OpenVPN。
在我的 .ovpn 文件(client
)dev tun
,我添加了以下几行:
route-nopull
route 0.0.0.0 0.0.0.0 vpn_gateway
pull-filter ignore "dhcp-option DNS "
script-security 2
up 'c:\path\to\up.cmd'
down 'c:\path\to\down.cmd'
route-nopull
忽略从服务器推送的路由。对于你的情况,你可能需要注释掉 redirect-gateway。
route
为这个接口添加一条路由,如果没有此行,即使应用程序绑定到该接口,也不会使用。
pull-filter
保留推送的 DNS,否则它将route-nopull
与推送的路由一起被丢弃。从 OpenVPN 2.4 开始支持此选项,如果您必须坚持使用 OpenVPN 2.3(适用于 Windows XP 的最新版本),则必须添加两dhcp-option DNS x.x.x.x
行硬编码 IP。
script-security 2
允许编写脚本。
up
脚本:
cd %~dp0
echo auth none> 3proxy-openvpn.conf
echo internal 127.0.0.1>> 3proxy-openvpn.conf
echo external %4>> 3proxy-openvpn.conf
echo socks>> 3proxy-openvpn.conf
start /b 3proxy.exe 3proxy-openvpn.conf
down
脚本:
taskkill /f /im 3proxy.exe
因此,使用此配置连接到 VPN 后,3proxy.exe
将启动进程,并且在端口上运行具有 DNS 解析功能的本地主机限制的 SOCKS5 代理1080
,现在只需将您的应用程序配置为使用localhost:1080
SOCKS 代理。