我已阅读有关 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
现在我无法在我的局域网上访问“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 才能解决局域网名称再次。
我猜您在使用 VPN 时无法使用 LAN DNS 的原因是解析器默认只进行两次尝试:
从 resolv.conf 手册:
因此,它首先尝试您公司 VPN 提供的两个 DNS 服务器,然后返回错误。您可以将尝试设置为 3,以便您的 LAN DNS 也被考虑在内。
这样做的缺点是,它通过等待最后一个服务器最终回答来减慢您的 DNS 请求。而且您正在向您的公司发送所有 DNS 请求 - 这也会影响性能和您的隐私。
我建议使用 dnsmasq。
您可以在具有指定域的 dnsmasq conf 中按域添加上游 DNS 服务器,如下所示:
默认情况下,dnsmasq 从 /etc/resolv.conf 轮询上游服务器。
从dnsmasq手册页的注释部分:
因此,如果您的 VPN 客户端更改了 resolv.conf,如果您可以将 dnsmasq 保留在 resolv.conf 之上,您就可以同时使用两者。
但我想这不是 VPN 编辑你 resolv.conf 的方式,所以我会尝试禁用 VPN 的 DNS 功能,并将你公司的 DNS 服务器手动添加到你的 dnsmasq 配置中:
在这种情况下,您对 Internet 和 LAN 的所有查询都将发送到 192.168.0.1,而对 myworkplace.com 的所有查询都将发送到您公司的 DNS。
https://www.purebasic.com/download.php并下载 PureBasic x64 的 linux 演示版,别担心,我认为限制不会阻止你编译它,我检查了它。编译(使可执行)resolvchange.pb chmod +x resolvchange start vpn 如果运行一个并立即使用以下命令运行 resolvchange:./resolvchange