简介:我相信很多人在DNS缓存方面都遇到了问题。有很多提示和提示用于在Ubuntu中刷新DNS缓存,以及更少的关于完全禁用它的信息。但这些答案大多没有触及问题的核心:当您是运行自己内部DNS服务器的正常用户时,根本不需要DNS缓存吗?(有点开玩笑,但不是。)
问题是,我在内部有自己的域,运行我自己的DNS服务器(BIND),它为我的网络上的两台内部主机(大约75台主机)提供服务,同时也是互联网主机的缓存解析器(这样我可以稍微快一点地浏览web,尽管现在的情况不如20年前那样)。
DNS缓存的目的是减少DNS服务器的负载。我想,如果您是,不运行您自己的DNS服务器,那么它可能被看作是在ISP的DNS服务器上轻松运行的一种方式。但是,对于像我这样的人,他们需要让我的所有主机都可以通过名称在内部访问,因此也必须能够解决内部域问题。
我使用带有nfs的autofs自动挂载不同的音乐、视频、照片等卷。当然,我可以通过IP实现所有这些,但是主机名看起来更好,感觉也更好。谁有时间在75台不同的机器上管理/etc/主机?因此,我希望DNS查询只访问我的DNS服务器,而Ubuntu22.04似乎对此有特殊的问题。
问题是:我已经有过很多尝试打开我的自动NFS卷的例子,但它并不存在。我查了一下我的服务器然后..。在本地运行的缓存中没有记录。我尝试过多种解决方案,但都没有奏效。有一个解决方案应该确保运行在192.168.20.10上的DNS服务器是缓存所依赖的服务器。根本不起作用。
另一个解决方案(有点混乱)是手动设置/etc/kind,然后使其不可变。这不起作用,因为/etc/rupv.conf是一个符号链接。我做了一段时间,只是手动纠正它指向我的DNS,它将不可避免地返回到由NetworkManager设置的。我终于找到了解决办法。
解决方案(但是.)
#!/bin/bash
[[ $(id -u) -ne 0 ]] && echo "This must run as root" && exit
systemctl disable systemd-resolved.service
systemctl stop systemd-resolved
grep "dns=none" /etc/NetworkManager/NetworkManager.conf || sed -i '/\[main\]/a dns=none' /etc/NetworkManager/NetworkManager.conf
rm /etc/resolv.conf
printf "nameserver 192.168.20.10\nsearch mydomain.prv\n" > /etc/resolv.conf
chattr +i /etc/resolv.conf这真的奏效了。但是,这不是正确的答案。正确的解决方案将是找出为什么DNS缓存将与我的DNS工作一段时间,然后放弃,并开始只服务互联网主机绕过我的DNS服务器。这导致我..。
问题:有人知道Ubuntu22.04中的默认DNS缓存是如何选择从哪里获得DNS答案的吗?我尝试将DNS服务器添加到网络计划中,但这没有起作用。对于Ubuntu使用的DNS缓存,我甚至找不到明确的答案。我见过很多提到泼尼斯卡奇的地方,但也有几处提到了dnsmasq。我的系统没有dnscache命令,但是它有dnsmask命令。我从Ubuntu18.04升级到22.04,所以这些问题可能是因为cruft?只要缓存总是使用我的DNS服务器,我就不会有问题,但是我还没有找到任何可靠的指令来解决真正的问题。所以,现在,我仍然坚持上面的脚本,因为它是“工作的”。但我希望事情能正常运作。
发布于 2022-12-09 11:12:12
至少UbuntuServer22.04默认使用systemd-resolved.service。这是一个DNS解析器和DNS缓存。不要并行安装第二个DNS缓存。
Ubuntu使用netplan进行网络配置(Ubuntu使用network )。
systemd-resolved.service是在启动时或由netplan应用程序(Ubuntu )配置的。
您可以通过命令resolvectl查看有关状态、统计等的详细信息,例如,如果通过网络或缓存完成解析,则resolvectl query ubuntuusers.de提供信息。
详细信息请参见resolvectl –help和man resolvectl。
https://askubuntu.com/questions/1444729
复制相似问题