2011-06-07 12:51:27 +0000 2011-06-07 12:51:27 +0000
44
44

只对选定的应用程序使用VPN连接

我有一个VPN的访问权限,并且希望只对某些应用程序使用,而不是所有的应用程序。

例如: 如果我连接到VPN,我只想让Opera和Newsbin这两个应用程序使用VPN连接。所有其他的应用程序,比如Outlook,应该使用正常的互联网连接(当VPN连接/打开时)。

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

答案 (8)

37
37
37
2013-09-12 01:28:23 +0000

至少在Linux上是可以做到这一点的(我想在BSD和OS X上也可以)。你可以通过以下方式实现:

  • 为所有VPN流量创建一个exra用户。
  • 创建一个额外的路由表,其中有一个通过VPN的默认路由。
  • 通过Iptables配置Netfilter,为所有来自特定用户ID的流量使用其他路由表。
  • 在自己的用户下运行应该使用VPN的应用程序。例如,使用'sudo'。

有脚本来完成上述步骤 这里 或有另一个指南 这里

这里有一个详细指南通过VPN进行路由传输(使用你自己的VPN服务器。

14
14
14
2011-07-07 16:01:13 +0000

你可以使用Windows防火墙来完成这个任务(前提是你使用的是Win 7或Vista) - 我写了一个指南

  1. 像平常一样连接到你的VPN。

  2. 打开网络和共享中心–右击任务栏中的互联网连接图标,选择 “打开网络和共享中心"(见下图)

3.你应该看到(至少)两个网络列在 "查看你的活动网络 "下–你的VPN连接和一个叫做 "网络 "的网络–也就是你的ISP连接。确保你的VPN是 "公共网络",而你的ISP连接是 "家庭网络"。如果你需要改变任何一个连接,点击它,一个选项窗口将出现(见下文)。

  1. 进入 "控制面板",点击 "系统和安全"(见下文)。

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

  1. 在 Windows 防火墙窗口中,单击左侧窗格中的 "高级设置"(见下图)。注意:您必须以管理员身份登录才能对防火墙设置进行更改。您应该看到一个名为 "Windows Firewall with Advanced Security "的窗口。在该窗口中,单击 "入站规则"(见下文)。

8.在右侧窗格中,您将看到名为 "Windows 防火墙与高级安全 "的窗口。在右侧窗格中,您将看到一个新建规则的选项。单击该选项(见下图)。

9.在 "新入站规则 "向导中,您将看到 "新规则 "选项。在 "新建入站规则向导"(应该会出现)中,执行以下操作。

  1. 对出站规则重复步骤 9。
5
5
5
2017-05-29 07:03:30 +0000

我在Windows上做过。我的想法是把外发网络包绑定到VPN的接口上。人们建议 ForceBindIP 来实现这个功能,但是由于 这个答案我有了一个使用代理的想法。这种方法的缺点是,要么你的应用程序必须有代理支持,要么你必须使用代理(见 这里 这里 )。好处是这样你就可以在浏览器中使用FoxyProxy或类似的附加组件将VPN的使用限制在特定的域上。

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

在我的.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 script:

taskkill /f /im 3proxy.exe

因此,当你使用这个配置连接到VPN后,3proxy.exe进程将被启动,并且在1080端口上运行一个具有DNS解析能力的localhost限定的SOCKS5代理,现在只需配置你的应用程序使用localhost:1080 SOCKS代理。

4
4
4
2017-10-25 10:36:54 +0000

你可以用GNU/Linux上的网络命名空间来实现。

下面是如何在一个单独的命名空间中运行OpenVPN和一个单独的应用程序:

创建net网络命名空间。

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等。 )在iptables中为出线接口设置。如果你使用的是有线接口,你可能应该使用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

最后在命名空间

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

启动OpenVPN,一旦tun0在命名空间启动,你就可以启动你想要的程序了!

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

SOURCE article.

另外,在源代码中还有一个包装脚本,你可以根据自己的需要进行调整。

1
1
1
2018-07-12 16:19:29 +0000

如果你在linux上,并且你使用openVPN, VPNShift 工作得很好。

0
0
0
2019-09-12 14:47:21 +0000

我知道这是我刚碰到的一个迟到的回复,但如果它曾经与某人相关,我有同样的情况,我想通过VPN运行我的工作流量,但不希望我的个人流量通过他们的代理服务器等路由。所以我当时运行的是Win7,但他们的很多系统上还在运行WinXP。最后,他们只是给了我一个第二台电脑运行的工作,解决了这个问题(一个交换机连接到两台电脑,可以只是跳来跳去),但在此之前,我跑了一个虚拟的XP,我设置为我的工作操作系统。我会从所述虚拟机VPN连接到工作,这将使我的个人操作系统流量不受工作限制和监视。

0
0
0
2018-01-16 01:54:06 +0000

通过虚拟机访问VPN即可。

1.创建一个虚拟机,然后从虚拟机内部… 2. 安装 “选定 "的应用程序 3. 配置VPN

从虚拟机中使用 "选定 "的应用程序,而不是从主机中使用它们。

P.S. 当然,你需要通过主机给虚拟机提供网络访问。

-1
-1
-1
2011-06-10 22:32:46 +0000

不,它不是。嗯,不是用正常的手段。路由就是路由。路由是在OSI模型的下层操作。你需要发生的是让它在applicaion级别(更高的级别)意识到,这样它就可以检测你使用的是什么程序等。正常的路由器不允许你根据应用程序或端口号来配置路由。

我认为这是可能的,虽然。路由器可以看到端口,所以你可以通过端口号过滤,并将流量发送不同的路线。我敢肯定,我读到的东西前一段时间与思科路由器,可以做到这一点。不过它们的价格并不便宜,而且它们是商业路由器,需要大量的配置,我猜你想要一些简单的家庭使用的东西。

总而言之,就是路由器会需要这个功能,而你的家庭用的bog标准的路由器,甚至是商用的都不支持这些功能。只有思科和Sonicwalls的高级系列才提供这些功能。