仅对某些域/主机名使用 VPN

Jac*_*ner 10 windows vpn openvpn

我在带有 TAP 适配器的 Windows 上使用 OpenVPN。

我知道您可以指定到特定 IP 地址的路由以访问本地 Internet 连接。但是它不能对主机名/域做同样的事情。

有没有办法让我的流量保持在 VPN 上,但将请求路由到 www.google.com,例如通过我家里的默认网关(在我的情况下是 192.168.1.1)?

我在想我可以在我的 HOSTS 文件中设置 127.0.0.1 www.google.com 并运行本地 apache 并在那里处理规则集,但如果有另一个,我宁愿不必运行本地网络服务器/代理我不知道的方式。

Dav*_*lar 18

您可以将其添加到 .ovpn 文件中:

allow-pull-fqdn
route www.google.com 255.255.255.255 net_gateway
Run Code Online (Sandbox Code Playgroud)

然后在 openvpn 启动时,这将查找 www.google.com,获取它的 IP 地址,然后使用网络(而不是 VPN)为其添加路由。

问题是,google 使用多个 IP 地址,因此当您尝试访问 google 时,它​​仍将使用 VPN,除非您碰巧访问它在启动时查找的相同 IP 地址。

一种技巧是获取 google 使用的 IP 地址之一并将其添加到您的 /etc/hosts,这样您的机器将始终为 google 使用相同的 IP 地址,并且 openvpn route 命令将完成您想要的操作。

问题当然是,如果谷歌停止使用该 IP 地址,或者出于任何原因想要将您路由到不同的 IP 地址。然后它失败了。


小智 8

我知道这是项非常晚的比赛,但我最近花了几个小时研究这个同一主题,并想我会帮助其他人可能会寻找同样的事情。虽然最常见的用例是通过您的 VPN 路由所有内容,但在涉及 VPN 时有两种例外情况:

  1. 您希望大部分流量都通过 VPN,但有一些例外
  2. 您只有几个要通过 VPN 路由的站点

路由大多数但有例外 对于场景#1,David 的响应工作得很好。要解决多个 IP 问题,请执行 WHOIS 查找并为 IP 地址创建路由而不仅仅是 IP 地址。请注意,您可能需要执行多次查找才能获得整个 IP 地址块集。

# if your build doesn't support "net_gateway," replace it with your own default gateway
# I added extra spacing for legibility, but a single space is fine
route  172.217.0.0   255.255.0.0    net_gateway  ;  google.com
route  216.239.32.0  255.255.224.0  net_gateway  ;  google.com
allow-pull-fqdn  ;  my config works *without* this option, so test on your build
route  google-public-dns-a.google.com  net_gateway  ;  8.8.8.8
route  google-public-dns-b.google.com  net_gateway  ;  8.8.4.4
route  ifconfig.co     net_gateway  ;  confirm at least one exception is routing properly
route  whatismyip.com  net_gateway
Run Code Online (Sandbox Code Playgroud)

路由只是一些 David 的回应也适用于场景 #2;但是,您添加了该route-nopull选项,以防止服务器为 VPN 发送默认路由。 我还没有测试过,但我想你可以添加你自己的默认路由来指向你的 net_gateway。

route  1.2.3.0  255.255.255.0  vpn_gateway  ;  "vpn_gateway" is optional & 1.2.3.0 is fictitious
route  2.3.4.0  255.255.255.0  ;  another example - perhaps an IPTV provider
allow-pull-fqdn
route  ifconfig.me       vpn_gateway
route  myexternalip.com  vpn_gateway
route-nopull
Run Code Online (Sandbox Code Playgroud)

测试配置 我喜欢为 ifconfig.co、ifconfig.me、whatismyip.com 和 myexternalip.com 添加路由,因为它允许我快速测试我正在运行的配置文件:完整 VPN 或拆分隧道。当我运行完整的 VPN 时,所有站点都会返回我的 VPN 地址;否则,ifconfig.co 和 whatismyip.com 将返回我的本地地址,而 ifconfig.me 和 myexternalip.com 将返回我的 VPN 地址。

C:\utils> for %f in (co me) do curl ifconfig.%f
Run Code Online (Sandbox Code Playgroud)

- 或者 -

PS C:\utils> "whatismyip", "myexternalip" | % { Start-Process ("http://{0}.com" -f $_) }
Run Code Online (Sandbox Code Playgroud)

我知道这没什么特别的,但是当我环顾四周时,我提供了一些真正对我有帮助的细节。我希望这至少可以帮助一个人。

我很想听听任何其他 VPN 提示或技巧。快乐安全冲浪!


小智 4

仅当您使用可在OpenVPN 手册--allow-pull-fqdn中找到的详细信息时,您才可以指定到主机名的路由

  • 看起来像是我正在寻找的东西,但文档对于如何使用它并不是很清楚。您是否有一个关于如何通过本地适配器而不是 openvpn 适配器将流量路由到 www.google.com 的示例?我是否可以使用以下命令编辑 .ovpn 文件:push "route www.google.com 192.168.1.1" --allow-pull-fqdn (3认同)