我正在尝试设置两台电脑(一台 Windows,一台 Linux,但我的理解是这个问题更多的是 DNS 而不是操作系统),如下所示:
Home network: 192.168.1.0/24
VPN (via OpenVPN server not within the home network): 192.168.2.0/24 .
我希望两个网络上的 PC 能够访问三种不同类型的站点:
- 互联网地址
- 家庭网络上的地址
- VPN 上的地址
但是,我不确定如何使用/使用哪个 DNS 服务器。如果我优先考虑我的家庭 DNS 服务器,我可以解析 (1) 和 (2),但不能解析 (3)。如果我优先考虑我的 VPN DNS 服务器,我无法解析类型 (2) 的地址。当然,通过 nslookup 查找地址并明确设置正确的服务器是可行的,所以我知道我的本地 DNS 服务器没有问题。
有没有办法让我的 PC 在找不到地址 (NXDOMAIN) 时回退到第二个 DNS 服务器?或者,有没有办法让不同的查询转到不同的服务器 [也许可以通过设置不同的子域;foo.local.something 与 bar.vpn.something]?
谢谢
答案1
我还没有用过这个,但我相信最有可能满足你的 Linux 机器需求的工具是域名系统。
可以设置 DNS 掩码以将其请求转发到上游。同时,它还可以为本地 /etc/hosts 文件中定义的名称提供服务。您可以使用该--server
选项将请求转发到您定义的域的特定 DNS 服务器。
-S, --local, --server=[/[]/[domain/]][[#][@|[#]]
直接指定上游服务器的 IP 地址。设置此标志不会禁止读取 /etc/resolv.conf,使用 -R 可做到这一点。如果给出了一个或多个可选域,则该服务器仅用于这些域,并且仅使用指定的服务器查询它们。这适用于私有名称服务器:如果您的网络上有一个名称服务器,它处理 192.168.1.1 上 xxx.internal.thekelleys.org.uk 形式的名称,那么给出标志 -S /internal.thekelleys.org.uk/192.168.1.1 会将所有针对内部机器的查询发送到该名称服务器,其他所有内容都将发送到 /etc/resolv.conf 中的服务器。
我不确定如何在您的 Windows 计算机上解决这个问题。如果您想不出其他办法,那么您可以采取的避免此问题的一种方法是从您的 Linux 计算机连接到 openvpn 服务器,然后在您的客户端的 tun* 接口上设置路由 NAT 并启用 ip 转发。调整所有其他系统上的路由和 DNS 设置,使其指向具有 OpenVPN 连接的 Linux 机器。这将有效地使您的 Linux 机器成为根据需要引导 VPN 流量的网关。
答案2
您可以设置 2 个 DNS 服务器,一个用于家庭网络,一个用于 VPN。您可以将其中一个设为主服务器,另一个设为从服务器,并在两者之间进行复制(在两端各设置两个 DNS 可确保如果 VPN 发生故障,两端仍可拥有 DNS)这些服务器也可以作为网络的递归服务器。
如果您想使用dnsmasq
,它也可以是一个小型权威服务器。/etc/hosts
在路由器上添加您想要的名称,并使文件与 VPN 路由器保持同步。
答案3
我完全不了解 openvpn,但 Cisco VPN 客户端有一种称为“split-dns”的东西,它表示“如果有人在 whatever.company-I'm-VPNing-into.com 上寻找某些内容,则从 VPN 上提供的 DNS 服务器获取其 IP,否则就使用通过互联网和/或家庭内容传输的常规服务器”。我认为这听起来就像你想要的。
编辑 -这里'指向某人使用 openvpn 执行此操作的链接。