并不总是需要使用 OpenVPN 路由所有流量。有没有办法在 OpenVPN 中添加一些 GeoIP 规则(按国家/地区)?
第二个问题如何在OpenVPN路由中使用域名通配符。 此链接帮助单域路由
总而言之,我正在寻找类似的东西冲突对于 OpenVPN,可以忽略将特定目标(通过域名和 GeoIP)路由到隧道
Example Rules in Clash:
- DOMAIN-SUFFIX,google.com,auto
- DOMAIN-KEYWORD,google,auto
- DOMAIN,google.com,auto
- DOMAIN-SUFFIX,ad.com,REJECT
- IP-CIDR,127.0.0.0/8,DIRECT
- SOURCE-IP-CIDR,192.168.1.201/32,DIRECT
- GEOIP,CN,DIRECT
答案1
我想说“你不能这样做”,但经验告诉我,最好不要说“不”。所以我会改成:“我不认为你能这样做,原因如下。”
路由基于 IP 网络和网关。因此,您可以10.1.2.0/24
通过特定的 OpenVPN 网关等为某个网络路由流量,同时让其他流量使用您的默认路由。或者,您可以选择反过来做,让大多数流量通过 VPN 隧道发送,但有特定的排除。
域、域名和主机名通常映射到 IP 地址。在某些情况下,它们会映射到多个 IP 地址,这就是问题所在。您必须为与主机名相关的每个可能的 IP 地址创建路由。此外,您无法控制主机名到 IP 地址的映射,并且它可能随时发生变化。
目前,对于我来说,在英国,google.com
的地图指向142.250.200.46
。如果我再试一次,我会得到不同的地址172.217.169.78
,但第三次我得到的是142.250.180.14
。每次我都只得到一个地址,所以我无法识别 的所有可能地址google.com
。
我可以为设置路线142.250.200.46
并捕获请求,但我无法保证我已获得所有地址,因此我172.217.169.78
无法保证所有流量都按照我希望的方式路由。142.250.180.14
google.com
google.com
google.com
这冲突您引用的工具的工作方式略有不同。它是一个 SOCKS 代理,因此它可以控制名称/地址查找。因此,当名称需要地址时,它可以首先检查其名称表以确定特殊情况处理。只有这样它才会确定适当的 IP 地址。
答案2
您想要动态分割隧道。据我所知,openvpn 仅提供静态分割隧道。
Chris Davies 的建议指出了理论上可以通过修改客户端实现的功能。客户端进行 DNS 查找,并使用内部 GeoIP 数据库确定是否应将针对该 IP 范围的新路由添加到设备的路由表中(根据规则,是通过隧道还是不通过隧道)。
问题 1:
让客户端进行 DNS 查找会破坏 DNS 查找的隐私。让服务器进行此操作或通过代理进行此操作可保护设备隐私。
问题2:
有些 DNS 服务器根据用户的 GeoIP 来解析 IP 地址客户因此,如果 VPN 服务器代表客户端发出请求,则 IP 可能是“错误的”。
也就是说,对于所有服务来说,可能并不存在完美的解决方案。
也许开发人员已经制作了此功能。如果没有,请查看Android 客户端源代码。