仅将VPN连接用于选定的应用程序


39

我可以访问VPN,并且只想将其用于某些应用程序,而不是全部。

例如:
如果我连接到VPN,则只希望应用程序Opera和Newsbin使用该VPN连接。所有其他应用程序,例如fe Outlook,都应使用普通的Internet连接(当VPN已连接/打开时)。

Afaik这是不可能的,但是我不确定。因此,我的问题是:可行吗?


Answers:


-1

不,不是。好吧,不要使用正常手段。路由就是路由。路由在OSI模型下运行。您需要做的是使其在应用程序级别(更高)上起作用,以便可以检测您正在使用的程序等。NORMAL路由器不允许您根据应用程序或端口号配置路由。

我认为这是可能的。路由器可以看到端口,因此您可以按端口号过滤端口,并将流量发送到其他路由。我敢肯定,我之前读过一些可以实现此目的的Cisco路由器。它们并不便宜,它们是需要大量配置的商务路由器,我猜您需要一些简单的家用设备。

总而言之,是路由器需要此功能,而家用标准功能则是路由器,即使企业不支持这些功能。仅Cisco和Sonicwalls的高级产品线提供这些功能。


36

至少在Linux上可以做到这一点(我也在考虑BSD和OS X)。您可以通过以下方式进行操作:

  • 为所有VPN流量创建一个exra用户。
  • 通过VPN创建带有1条默认路由的额外路由表。
  • 通过Iptables配置Netfilter,以将另一个路由表用于来自特定用户ID的所有流量。
  • 在自己的用户下运行应使用VPN的应用程序。例如使用“ sudo”。

有用于实现上述步骤的脚本在这里或有另一位导游在这里

这是有关通过VPN(使用您拥有的VPN服务器)路由传输的详细指南


在Linux上要容易得多:创建网络名称空间,将VPN连接到该名称空间,运行应在VPN中使用该名称空间的应用程序。您甚至可以运行同一应用程序的两个副本,一个使用VPN,一个使用直接连接。
dirkt

15

您可以使用Windows防火墙来完成此操作(前提是您使用的是Win 7或Vista)- 我为此编写了指南

  1. 照常连接到您的VPN。

  2. 打开网络和共享中心-右键单击任务栏中的Internet连接图标,然后选择“打开网络和共享中心”(如下所示)

  3. 您应该(至少)看到在“查看您的活动网络”下列出的两个网络-您的VPN连接和一个叫做“网络”的网络-亦即您的ISP连接。确保您的VPN是“公共网络”,并且ISP连接是“家庭网络”。如果您需要更改任一连接,请单击它,然后会出现一个选项窗口(见下文)。

  4. 转到“控制面板”,然后单击“系统和安全性”(见下文)。

  5. 在出现的窗口中,单击Windows防火墙(如下所示)。

  6. 在“ Windows防火墙”窗口中,单击左窗格上的“高级设置”(请参阅​​下文)。注意:您必须以管理员身份登录才能对防火墙设置进行更改。

  7. 您应该看到一个标题为“具有高级安全性的Windows防火墙”的窗口。在此窗口中,单击“入站规则”(请参见下文)。

  8. 在右窗格中,您将看到“新建规则”的选项。单击它(见下文)。

  9. 在“新建入站规则向导”(应该出现)中,执行以下操作:

    • 选择“程序”,然后单击“下一步”。

    • 选择您要阻止除VPN连接之外的所有流量的程序,然后单击“下一步”。

    • 选择“阻止连接”。

    • 勾选域和私有。确保未选中“公开”。

  10. 对出站规则重复步骤9。


11
这实际上回答了这个问题吗?是的,如果该应用程序不在VPN上,则会阻止该应用程序正常运行,但是所有流量仍通过VPN进行吗?
杰森·科恩

3
@pramble那么所有流量仍然通过vpn吗?
nsij22 2015年

似乎可以工作。刚刚测试过..
Faiz

这不能解决。这是一个非常简单的方案。我希望所有与工作相关的内容都通过VPN(SQL Server连接,Slack等),但是我希望Web浏览器(Facebook,Soundcloud等,基本上所有端口80的流量)都不会通过VPN 。如果无法执行此操作,则Windows很烂。
Triynko

@Triynko您的方案与OP要求的方案有很大不同。连接到VPN后,您只需为与工作相关的内容设置相应的路由,即对所有与工作相关的子网或IP使用VPN网关。路由来自特定应用程序的流量更加困难。
演讲者

4

您可以使用GNU / Linux上的网络名称空间来实现。

以下是在单独的命名空间中运行OpenVPN和单个应用程序的方法:

创建网络名称空间:

ip netns add myvpn

在名称空间中启动回送接口(否则许多事情将无法正常工作……)

ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up

创建虚拟网络接口,使OpenVPN(在名称空间中)可以访问真实网络,并配置名称空间(vpn1)中的接口以使用名称空间(vpn0)中的接口作为其默认网关

ip link add vpn0 type veth peer name vpn1
ip link set vpn0 up
ip link set vpn1 netns myvpn up
ip addr add 10.200.200.1/24 dev vpn0
ip netns exec myvpn ip addr add 10.200.200.2/24 dev vpn1
ip netns exec myvpn ip route add default via 10.200.200.1 dev vpn1

为名称空间中的接口启用IPv4路由和NAT。因为我的默认接口是无线接口,所以我在传出接口的iptables中使用wl +(可能与wlan0,wlp3s0等匹配);如果您使用有线接口,则应该使用en +(或br +作为桥接接口)

iptables -A INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
sysctl -q net.ipv4.ip_forward=1

配置名称服务器以在名称空间内使用

mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf

差不多完成了,现在我们应该在名称空间中拥有完整的网络访问权限

ip netns exec myvpn ping www.google.com

最后在命名空间中启动OpenVPN

ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf

在命名空间中打开tun0之后,就可以启动所需的程序了!

while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime

来源文章。

在源文章中也有一个包装脚本,您可以根据需要对其进行调整。


3

我已经在Windows上完成了此操作。想法是将传出的网络程序包绑定到VPN的接口。人们为此建议使用ForceBindIP,但是由于有了这个答案,我有了使用代理的想法。这种方法的缺点是您的应用程序必须具有代理支持,或者您必须使用代理(请参见此处此处)。这样做的好处是,您可以使用FoxyProxy或类似的附件将浏览器中VPN的使用限制为特定的域。

我在SOCKS模式下使用3proxy并将其外部接口绑定到VPN的IP。OpenVPN用于VPN连接。

在我的.ovpn文件()中clientdev 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忽略从服务器推送的路由。在您的情况下,您可能需要注释掉重定向网关。

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:1080SOCKS代理即可。


我正在Options error: option 'route' cannot be used in this context ([PUSH-OPTIONS])Options error: option 'redirect-gateway' cannot be used in this context ([PUSH-OPTIONS])。尽管如此,该解决方案仍然有效。如果跳过上下脚本的撇号,请使用双反斜杠:c:\\path\\to\\script
chx

1

如果您使用的是Linux,并且使用的是openVPN,则VPNShift可以正常工作。


请不要对多个问题发布相同的答案。如果相同的信息确实回答了两个问题,则应关闭一个问题(通常是较新的问题),作为另一个问题的重复。您可以通过投票将其关闭作为重复项来表明这一点,或者,如果您没有足够的声誉,可以举一个标志来表明它是重复项。否则,请针对这个问题量身定制答案,而不仅仅是在多个地方粘贴相同的答案。
DavidPostill

4
它是“对多个问题的相同答案”的事实如此重要吗?问题是存在的,还没有被标记为重复,这是一个很好的答案,因此应该存在。谢谢@thouliha🙂。
罗南·朱谢

0

只需通过虚拟机访问VPN。

  1. 创建一个VM,然后从VM内部...
  2. 安装“选定的”应用程序
  3. 配置VPN

从VM使用“选定的”应用程序,而不是从主机使用它们。

PS当然,您需要通过主机授予对VM的网络访问权限。


这只是提到了其他答案中已经详细描述的一种方法。
fixer1234 '18

1
@ fixer1234:没人提到虚拟机。
drowa

您能否将答案扩展为更具实用性的内容(说明方式)?有关详细信息,请参见线程上的其他答案。只需提供一个提示,就可以发表评论,这需要更多代表。
fixer1234 '18

我先尝试发表评论,但是系统不允许我,因为我的分数不到50分。我将尝试扩大答案。
drowa

这是我想出的主意,并且在sysadmin端没有任何复杂的路由配置的情况下也可以正常工作。

0

我知道这是我刚才遇到的一种较晚的答复,但是如果它与某人有关,那么在相同的情况下,我想通过VPN运行我的工作流量,但又不想让我的个人流量通过他们代理服务器等。所以那时我正在运行Win7,但是他们仍然在许多系统上运行WinXP。最终,他们只是给我第二台PC来运行以解决问题(挂接到两台PC上的开关盒可以来回跳动),但是在此之前,我运行了Virtual XP,并将其设置为工作OS。我会从所述VM进入VPN以连接到工作,这将使我的个人OS流量不受工作限制和监视。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.