最近用了比较多的Ubuntu系统(没有图形界面,如何快速部署一个Ubuntu 24.10的Server虚拟机),但是有个问题一直很愁人,那就是DNS服务器的配置问题。
按照之前正常使用CentOS的习惯,我每次创建虚拟机时都是选择最小化安装,而且尽可能使用静态IP地址,在过去的十来年里,从来没出过问题(CentOS 7多网卡配置(最小化安装))。
但是,最近用的多了,愈发感觉这个问题很严重。毫不夸张的说,我测试了Ubuntu 18.04、20.04、22.04、23.10、24.04的桌面版和服务器版,还使用了阿里云、腾讯云、天翼云的公有云版本,简单的结论就是:除了桌面版使用自动获取IP地址的方式能正常使用之外,其余的DNS配置都不好使,尤其是服务器版,就没一个好使的。
大家可以对比一下问题现象,看看是不是遇到过类似的问题。我现在已经知道Ubuntu的DNS配置是保存在/etc/resolv.conf中,每当我发现DNS无法解析时,我就会看一下DNS服务器是不是变成了127.0.0.53。
解决方案是每次都要修改/etc/resolv.conf配置,将nameserver修改为223.5.5.5,就可以解析了。
但是存在一个问题,每次重启网卡或虚拟机之后,/etc/resolv.conf中配置的DNS服务器地址都会恢复成127.0.0.53,导致域名无法解析。
其实,如果我们看/etc/resolv.conf中的介绍,可以发现/etc/resolv.conf还有一个影子文件/run/systemd/resolve/stub-resolv.conf,都是由systemd-resolved服务管理。
官方的建议是不要修改这个文件,因为这是一个动态文件,用于将本地客户端连接到systemd-resolved的内部DNS存根解析器,此文件列出了所有配置的DNS服务器。
当然,如果禁用systemd-resolved服务,本次不影响DNS解析,但是不能阻止这个文件刷新,因为重启之后连/etc/resolv.conf这个文件都消失了,需要重启服务才能重新生成,而且DNS服务器还是127.0.0.53。
按照提示,我们可以运行“resolvectl status”查看当前正在使用的上行DNS服务器的详细信息。
回想一下我们创建虚拟机的时候,网卡配置是加了DNS服务器的,而且测试解析软件仓库也没有问题。
那么问题来了,我配置的DNS服务器去哪了?
首先,对于Ubuntu 24.10来说,连之前的网卡配置文件/etc/network/interfaces都没有了,甚至跟/etc/network相关的路径下一个网卡地址都没存。
经过查询,现在网卡的配置保存在YAML文件中,但是这里的DNS服务器配置还是会被systemd-resolved服务所覆盖,那我配置这个DNS服务器的作用是什么?
而且还必须使用systemd-resolved服务,我在安装时配置了DNS服务器,启动之后还要再去修改它的配置文件/etc/systemd/resolved.conf。
然后重启systemd-resolved服务使配置生效。
真是搞不懂,挺简单的DNS配置为什么要搞这么复杂?
不过也不是一无是处,配置完之后Google就可以通了,神奇不?
当然,现在Linux还有一个优先使用IPv6的问题,这个用一条命令就能解决。
sysctl -w net.ipv6.conf.all.disable_ipv6=1
唉,这下就舒服多了!
***推荐阅读***
【送书福利】中国移动无线智算网络领域最新图书《通算一体:使能泛在AI》
没有图形界面,如何快速部署一个Ubuntu 24.10的Server虚拟机
拿捏!Ubuntu和FortiGate对接GENEVE是如此简单
Ubuntu使用Tesla P4配置Anaconda+CUDA+PyTorch
在Ubuntu系统手撸一个自动搭建openVPN服务端的SHELL脚本
成本增加了100块,内网服务器上公网解决方案2.0重磅来袭!