我已经阅读了 resolv.conf 和 resolvconf 以及 resolvconf.conf 的手册页,但并不完全理解,并且觉得我有点不知道如何(咳咳)解决这个问题:
设想:
我有一个 LAN,其中的路由器充当 DHCP 和名称服务器。名称服务器解析此 LAN 上的所有设备,无论是没有 TLD 还是 .lan TLD。例如,我可以使用 nslookup、ping 和任何其他工具名称(如“nas”和“nas.lan”)来解析到达我的 NAS 服务器(网络可访问存储服务器)的名称。对于任何其他名称,它会将请求转发到我的 ISP 的 DNS。
因此我的 resolv.conf 如下所示:
# Generated by resolvconf
domain lan
nameserver 192.168.0.1
我获得了所有 LAN 和 WAN 名称的精细解析。
我现在连接到工作中的 Cisco VPN,并且 resolvconf 将 resolv.conf 更新为:
# Generated by resolvconf
domain myworkplace.com
search myworkplace.com lan
nameserver 192.168.1.10
nameserver 192.168.1.11
nameserver 192.168.0.1
现在我无法再在 LAN 上访问“nas”或“nas.lan”,但我可以在 VPN 上访问“nas”和“nas.myworkplace.com”。WAN 名称现在由 VPN 分配的名称服务器 192.168.1.10 解析,我通过这种方式访问的 NAS 位于 VPN 上,而不是在我的 LAN 上(另一台服务器)。
另外:我实际上并没有任何这样的名称冲突,但我在这里的伪例子中提供了它,因为解决方案显然需要满足它。
现在我想要实现的是这样的:
“nas.lan”解析为我的 LAN NAS“nas.myworkplace.com”解析为 VPN NAS“nas”根据配置解析为其中一个(此处提示 resolv.conf 的 ndots 设置,但不确定)。
我的问题:
- 使用 resolvconf 可以做到这一点吗?
- 如果没有的话,还有其他方法可以做到吗(例如在我的机器上使用 dnsmaq 而不是 libc 作为解析器?)。
我很感激任何指点,因为我发现手册页不太容易理解和解密,考虑到这样的特定需求。我已经在网上搜索了一段时间,奇怪的是,只发现其他人在其他论坛上问了同样的问题(没有答案)!
这不是我独有的问题,也不是我发现的。任何在 LAN 上想要查看设备的人,通过 VPN 连接到另一个 LAN 时,似乎都可能遇到这样的问题:在连接时只能解析 VPN 上的名称,而不能解析 LAN 上的名称,需要关闭 VPN 才能再次解析 LAN 名称。
答案1
我猜测使用 VPN 时无法使用 LAN DNS 的原因是解析器默认只进行两次尝试:
来自 resolv.conf 手册:
attempts:n 设置解析器在放弃并向调用应用程序返回错误之前向其名称服务器发送查询的次数。默认值为 RES_DFLRETRY(当前为 2,请参阅)。此选项的值默认上限为 5。
因此,它首先尝试贵公司 VPN 提供的两个 DNS 服务器,然后返回错误。您可以设置尝试到 3,这样您的 LAN DNS 也会被考虑在内。
缺点是,它会因为等待最后一个服务器最终响应而减慢您的 DNS 请求速度。而且您会将所有 DNS 请求发送到您的公司 - 这会对您的性能和隐私造成影响。
我建议使用 dnsmasq。
您可以在 dnsmasq conf 中按域添加具有指定域的上游 DNS 服务器,如下所示:
server=/lan/192.168.0.1
默认情况下,dnsmasq 从 /etc/resolv.conf 轮询上游服务器。
摘自dnsmasq 手册页:
... 默认情况下,dnsmasq 会读取 /etc/resolv.conf 以发现它应该使用的上游名称服务器的 IP 地址,因为信息通常存储在那里。除非使用 --no-poll,否则 dnsmasq 会检查 /etc/resolv.conf 的修改时间(如果使用 --resolv-file,则检查等效时间),并在更改时重新读取它。这允许通过 PPP 或 DHCP 动态设置 DNS 服务器,因为这两种协议都提供信息。...
因此,如果您的 VPN 客户端更改了 resolv.conf,那么您就可以同时使用两者,前提是您可以将 dnsmasq 保留在 resolv.conf 之上。
但我猜这不是 VPN 编辑您的 resolv.conf 的方式,所以我会尝试禁用 VPN 的 DNS 功能,并将您公司的 DNS 服务器手动添加到您的 dnsmasq 配置中:
server=/myworkplace.com/192.168.1.10
server=/myworkplace.com/192.168.1.11
server=192.168.0.1
在这种情况下,您对互联网和局域网的所有查询都将转到 192.168.0.1,并且对 myworkplace.com 的所有查询都将转到您公司的 DNS。
答案2
git clone https://github.com/timebandit1969/resolvchange.git
https://www.purebasic.com/download.php并下载 PureBasic x64 的 Linux 演示版本,不用担心,我认为这些限制不会阻止您编译它,我已检查过。编译(使可执行)resolvchange.pb chmod +x resolvchange 如果正在运行 vpn,请启动 vpn,然后立即使用以下命令运行 resolvchange:./resolvchange