使用 OpenVPN 时如何使用 ACL 或 PAC?

使用 OpenVPN 时如何使用 ACL 或 PAC?

sudo route add目前,我在使用 OpenVPN 时使用 ip 表来划分流量,通过对我喜欢直接连接的 IP 列表运行脚本来实现此目的。

这发布了一个问题。当我请求一个url时,它仍然会通过OpenVPN的DNS运行,并返回一个如果我直接连接它可能无法使用的IP(我在中国,GFW阻止了Facebook、Google和许多外国IP/域,所以我也无法使用本地 DNS)。

理想情况下,我会拥有 ACL 或 PAC,它首先执行本地 DN,然后找出要使用和连接的 DNS(本地或国际)。在 Linux 或 Unix 下这将如何完成?

答案1

首先,在进行路由时,通常没有必要同时使用iptables,除非您出于某种原因想要做一些复杂的事情。

您没有说您是否根据完整地址列表拆分流量,或者是否按前缀等拆分流量。因此,请编辑您的问题并提供此信息。

如果您根据完整地址进行拆分,最简单的解决方案是将这些地址的名称添加到/etc/hosts.此文件中的查找优先于 DNS 查找(除非在 中另外配置nssswitch.conf)。当然,如果更改,此文件和路由文件中的 IP 地址都需要更新。

另一种选择是使用/etc/resolv.conf.从man 5 resovler

nameserver Name server IP address

解析器应查询的名称服务器的 Internet 地址 [...] 最多可列出 MAXNS 个(当前为 3 个,请参阅)名称服务器,每个关键字一个。如果有多个服务器,解析器库将按列出的顺序查询它们。

然而,这个文件通常是由系统的其他各个部分自动生成的,并且细节因 Linux 发行版而异。因此,您必须找出 DHCP 客户端和/或 OpenVPN 执行了哪些脚本,以使用收到的名称服务器信息更新此文件,然后修改这些脚本,以便两个nameserver条目最终都resolv.conf按正确的顺序排列。

在这种形式下,只有当中国 DNS 服务器无法返回被阻止域的 IP 地址时,它才会起作用。如果中国 DNS 服务器的行为不同,例如,如果您必须测试返回的 IP 以查明它是否被阻止,或者如果您需要不同类型的测试,它甚至会变得更加困难:您将不得不使用某种执行这些测试的本地 DNS 代理,并可能修改现有代理软件的代码。

我认为使用过 VPN 的中国其他人已经遇到了同样的问题,所以可能还有一些现成的解决方案,但国际社会可能不知道这些。

相关内容