我在 Windows 上使用带有 TAP 适配器的 OpenVPN。
我知道您可以指定到特定 IP 地址的路由以访问本地互联网连接。但是它无法对主机名/域执行相同操作。
有没有办法让我的流量保持在 VPN 上,但将请求路由到 www.google.com,例如通过我家里的默认网关(在我的情况下是 192.168.1.1)?
我本来想在我的 HOSTS 文件中设置 127.0.0.1 www.google.com,然后运行本地 apache 并处理其中的规则集,但如果还有其他我不知道的方法,我宁愿不必运行本地网络服务器/代理。
答案1
--allow-pull-fqdn
仅当您使用详细信息时,您才可以指定到主机名的路由OpenVPN 手册
答案2
您可以将其添加到 .ovpn 文件中:
allow-pull-fqdn
route www.google.com 255.255.255.255 net_gateway
然后在 openvpn 启动时,它将查找 www.google.com,获取其 IP 地址,然后使用网络(不是 VPN)为其添加路由。
问题是,谷歌使用多个 IP 地址,所以当您尝试访问谷歌时,它仍会使用 VPN,除非您碰巧点击了它启动时查找的相同 IP 地址。
一个技巧是获取 google 使用的 IP 地址之一并将其添加到您的 /etc/hosts,这样您的机器将始终使用相同的 google IP 地址,并且 openvpn route 命令将完成您想要的操作。
当然,问题是,如果 Google 停止使用该 IP 地址,或者出于某种原因,想要将您路由到其他 IP 地址,那么它就会失败。
答案3
我知道这个条目非常虽然我入行较晚,但最近我花了几个小时研究这个主题,并认为我可以帮助其他可能正在寻找同样东西的人。虽然最常见的用例是通过 VPN 路由所有内容,但对于 VPN 来说,有两种例外情况:
- 你要大部分流量必须通过 VPN,但有少数例外
- 你只有几个网站您希望通过 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
路线仅几
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
测试配置 我喜欢为 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
- 或者 -
PS C:\utils> "whatismyip", "myexternalip" | % { Start-Process ("http://{0}.com" -f $_) }
我知道这没什么特别的,但我提供了一些细节,这些细节在我四处寻找时确实对我有帮助。我希望这至少能帮助一个人。
我很乐意听听其他有关 VPN 的提示或技巧。祝您安全上网愉快!