72 networking windows vpn internet privacy
我可以访问 VPN,并且只想将它用于某些应用程序,而不是所有应用程序。
例如:
如果我连接到 VPN,我只希望 Opera 和 Newsbin 应用程序使用该 VPN 连接。所有其他应用程序,如 fe Outlook,应使用正常的互联网连接(当 VPN 已连接/打开时)。
Afaik 这是不可能的,但我不完全确定。所以我的问题是:它可行吗?
小智 50
至少在 Linux 上可以做到这一点(我也在考虑 BSD 和 OS X)。你可以这样做:
这是通过 VPN 路由传输的详细指南(使用您拥有的 VPN 服务器。
小智 22
您可以使用 Windows 防火墙来完成此操作(前提是您使用的是 Win 7 或 Vista)-我为此编写了一份指南
像往常一样连接到您的 VPN。
打开网络和共享中心 - 右键单击任务栏中的 Internet 连接图标,然后选择“打开网络和共享中心”(见下文)
您应该(至少)看到“查看您的活动网络”下列出的两个网络 - 您的 VPN 连接和一个称为“网络”的网络 - 也就是您的 ISP 连接。确保您的 VPN 是“公共网络”,并且您的 ISP 连接是“家庭网络”。如果您需要更改任一连接,请单击它,将出现一个选项窗口(见下文)。
转到控制面板并单击系统和安全(见下文)。
在出现的窗口中,单击 Windows 防火墙(见下文)。
在 Windows 防火墙窗口中,单击左窗格中的高级设置(见下文)。注意:您必须以管理员身份登录才能更改防火墙设置。
您应该会看到一个标题为具有高级安全性的 Windows 防火墙的窗口。在此窗口中,单击入站规则(见下文)。
在右侧窗格中,您将看到一个新规则选项。单击它(见下文)。
在新建入站规则向导(应该会出现)中,执行以下操作:
选择程序并单击下一步。
选择您希望阻止除 VPN 连接之外的所有流量的程序,然后单击下一步。
选择阻止连接。
勾选域和私有。确保公共未被选中。
对出站规则重复步骤 9。
我已经在 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'
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
down 脚本:
taskkill /f /im 3proxy.exe
Run Code Online (Sandbox Code Playgroud)
因此,在您使用此配置连接到 VPN 后,3proxy.exe进程将启动,并且具有 DNS 解析功能的本地主机限制的 SOCKS5 代理将在1080端口上运行,现在只需将您的应用程序配置为使用localhost:1080SOCKS 代理。
小智 8
您可以使用 GNU/Linux 上的网络名称空间来实现。
以下是在单独的命名空间中运行 OpenVPN 和单个应用程序的方法:
创建网络命名空间:
ip netns add myvpn
Run Code Online (Sandbox Code Playgroud)
启动namespace中的loopback接口(不然很多东西不能按预期运行……)
ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up
Run Code Online (Sandbox Code Playgroud)
创建虚拟网络接口,让 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
Run Code Online (Sandbox Code Playgroud)
为命名空间中的接口启用 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
Run Code Online (Sandbox Code Playgroud)
配置名称服务器以在命名空间内使用
mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf
Run Code Online (Sandbox Code Playgroud)
差不多完成了,现在我们应该在命名空间中拥有完整的网络访问权限
ip netns exec myvpn ping www.google.com
Run Code Online (Sandbox Code Playgroud)
最后在命名空间中启动 OpenVPN
ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf
Run Code Online (Sandbox Code Playgroud)
一旦 tun0 在命名空间中启动,您就可以启动您想要的程序了!
while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime
Run Code Online (Sandbox Code Playgroud)
源文章中还有一个包装脚本,您可以根据自己的需要进行调整。
小智 6
在 Windows 上,您可以使用支持“拆分隧道”的 VPN。
一种是 Proton VPN(提供免费版本,允许您选择想要或不想要访问 VPN 的应用程序)。
否则只需谷歌:带有分割隧道的VPN,就会出现很多。
只需通过虚拟机访问 VPN。
使用 VM 中的“选定”应用程序,而不是使用主机中的应用程序。
PS 当然,您需要通过主机为 VM 提供网络访问权限。
现在有一个更简单的 Linux 解决方案,在编写这些答案时还没有,但它绝对值得放在这里。这是一个名为Vopono的程序。
它的工作原理是在您的 PC 上创建临时网络命名空间以供运行特定命令。一旦程序完成运行,它将摆脱命名空间。
它直接支持 Mullvad、AzireVPN、MozillaVPN、TigerVPN、ProtonVPN、iVPN、NordVPN 和 PIA 等 VPN,但也可以支持 Wireguard、OpenVPN、OpenConnect 和 OpenFortiVPN 协议的自定义配置文件。
自定义配置文件的用法示例:
vopono exec --custom vpn_config.ovpn --protocol openvpn "command"
Run Code Online (Sandbox Code Playgroud)
小智 -9
不,不是。好吧,不使用正常手段。路由就是路由。路由在 OSI 模型的较低层运行。您需要做的是让它在应用程序级别(更高)上有所了解,以便它可以检测您正在使用什么程序等。普通路由器不允许您根据应用程序或端口号配置路由。
我认为这是可能的。路由器可以看到端口,因此您可以按端口号过滤它们并将流量发送到不同的路由。我确信我不久前读过一些有关思科路由器的内容,可以做到这一点。不过它们的价格并不便宜,而且它们是需要大量配置的商业路由器,我猜你想要一些简单的家用路由器。
总之,路由器需要此功能,而家庭使用的标准路由器则需要此功能,即使企业不支持这些功能。只有 Cisco 和 Sonicwalls 的高级产品线才能提供这些功能。
| 归档时间: |
|
| 查看次数: |
202307 次 |
| 最近记录: |