Linux服务器的默认DNS配置通常取决于系统使用的网络管理工具和发行版类型。以下是常见情况的详细分析:
1. 通过`/etc/resolv.conf`文件定义
这是传统的DNS配置方式,该文件会被系统解析库(如glibc)读取:
默认内容:安装后可能为空或包含本地回环地址(`127.0.0.1`),实际DNS通常由DHCP或网络管理工具动态生成。
手动配置:可添加`nameserver 8.8.8.8`等行指定DNS,但现代系统可能因自动覆盖机制(如`resolvconf`或`systemd-resolved`)导致修改失效。
2. 动态分配机制
DHCP客户端:多数服务器通过DHCP获取DNS,尤其在云环境(如AWS、阿里云)中,DNS通常由云厂商的元数据服务提供(例如AWS的`169.254.169.253`)。
NetworkManager:图形化或命令行工具会动态管理`/etc/resolv.conf`,优先使用DHCP分配的DNS。
3. Systemd-resolved服务
现代发行版(如Ubuntu 18.04+、CentOS 8+)常用`systemd-resolved`作为默认DNS解析器:
工作原理:DNS配置存储在`/run/systemd/resolve/resolv.conf`,而`/etc/resolv.conf`通常是指向它的符号链接。
查看当前DNS:命令`systemd-resolve --status`会显示所有接口的DNS服务器,可能包括本地缓存(127.0.0.53)和上游DNS。
4. 静态网络配置
若使用静态IP,DNS通常在以下文件中配置:
Debian/Ubuntu:`/etc/network/interfaces`中通过`dns-nameservers`字段指定。
RHEL/CentOS:`/etc/sysconfig/network-scripts/ifcfg-eth0`中设置`DNS1=8.8.8.8`等参数。
5. 特殊环境配置
容器环境:Docker默认使用宿主机的DNS,可通过`--dns`参数覆盖;Kubernetes Pod的DNS由CoreDNS或kube-dns管理。
本地缓存DNS:部分系统启用`dnsmasq`或`unbound`,将127.0.0.1作为默认DNS并转发请求。
关键命令验证
`cat /etc/resolv.conf`:查看当前生效的DNS(注意可能是符号链接或生成文件)。
`nmcli dev show`:NetworkManager管理的DNS信息。
`resolvectl status`:`systemd-resolved`的详细状态。
扩展知识:DNS配置的优先级受网络管理工具、云元数据服务、手动设置等多层影响。在系统启动或网络接口激活时,DNS可能被多次覆盖,调试时需结合日志(如`journalctl -u systemd-resolved`)分析动态更新过程。企业内网还可能通过`/etc/nsswitch.conf`控制DNS查询顺序(如优先查询本地`hosts`文件)。