Answers:
不,不是。好吧,不要使用正常手段。路由就是路由。路由在OSI模型下运行。您需要做的是使其在应用程序级别(更高)上起作用,以便可以检测您正在使用的程序等。NORMAL路由器不允许您根据应用程序或端口号配置路由。
我认为这是可能的。路由器可以看到端口,因此您可以按端口号过滤端口,并将流量发送到其他路由。我敢肯定,我之前读过一些可以实现此目的的Cisco路由器。它们并不便宜,它们是需要大量配置的商务路由器,我猜您需要一些简单的家用设备。
总而言之,是路由器需要此功能,而家用标准功能则是路由器,即使企业不支持这些功能。仅Cisco和Sonicwalls的高级产品线提供这些功能。
至少在Linux上可以做到这一点(我也在考虑BSD和OS X)。您可以通过以下方式进行操作:
这是有关通过VPN(使用您拥有的VPN服务器)路由传输的详细指南。
您可以使用Windows防火墙来完成此操作(前提是您使用的是Win 7或Vista)- 我为此编写了指南
照常连接到您的VPN。
打开网络和共享中心-右键单击任务栏中的Internet连接图标,然后选择“打开网络和共享中心”(如下所示)
您应该(至少)看到在“查看您的活动网络”下列出的两个网络-您的VPN连接和一个叫做“网络”的网络-亦即您的ISP连接。确保您的VPN是“公共网络”,并且ISP连接是“家庭网络”。如果您需要更改任一连接,请单击它,然后会出现一个选项窗口(见下文)。
转到“控制面板”,然后单击“系统和安全性”(见下文)。
在出现的窗口中,单击Windows防火墙(如下所示)。
在“ Windows防火墙”窗口中,单击左窗格上的“高级设置”(请参阅下文)。注意:您必须以管理员身份登录才能对防火墙设置进行更改。
您应该看到一个标题为“具有高级安全性的Windows防火墙”的窗口。在此窗口中,单击“入站规则”(请参见下文)。
在右窗格中,您将看到“新建规则”的选项。单击它(见下文)。
在“新建入站规则向导”(应该出现)中,执行以下操作:
选择“程序”,然后单击“下一步”。
选择您要阻止除VPN连接之外的所有流量的程序,然后单击“下一步”。
选择“阻止连接”。
勾选域和私有。确保未选中“公开”。
对出站规则重复步骤9。
您可以使用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
在源文章中也有一个包装脚本,您可以根据需要对其进行调整。
我已经在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
忽略从服务器推送的路由。在您的情况下,您可能需要注释掉重定向网关。
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代理即可。
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
如果您使用的是Linux,并且使用的是openVPN,则VPNShift可以正常工作。
只需通过虚拟机访问VPN。
从VM使用“选定的”应用程序,而不是从主机使用它们。
PS当然,您需要通过主机授予对VM的网络访问权限。
我知道这是我刚才遇到的一种较晚的答复,但是如果它与某人有关,那么在相同的情况下,我想通过VPN运行我的工作流量,但又不想让我的个人流量通过他们代理服务器等。所以那时我正在运行Win7,但是他们仍然在许多系统上运行WinXP。最终,他们只是给我第二台PC来运行以解决问题(挂接到两台PC上的开关盒可以来回跳动),但是在此之前,我运行了Virtual XP,并将其设置为工作OS。我会从所述VM进入VPN以连接到工作,这将使我的个人OS流量不受工作限制和监视。