1. 为什么需要设置永久DNS服务器在Linux系统中DNSDomain Name System设置默认是通过DHCP自动获取的但这种方式存在几个明显问题网络切换时的稳定性问题当从办公室网络切换到家庭网络时DHCP分配的DNS服务器可能发生变化导致解析不稳定公共DNS的安全隐患ISP提供的DNS可能记录查询历史且响应速度不一定最优临时修改的易失性通过/etc/resolv.conf的修改会在重启后失效我在管理服务器集群时曾遇到一个典型案例某次机房网络切换后由于依赖DHCP获取DNS导致批量作业中的域名解析全部失败。这正是我们需要配置永久DNS的根本原因。2. Ubuntu/Debian中的DNS配置机制2.1 现代Linux的DNS管理演变传统上Linux通过/etc/resolv.conf文件管理DNS设置但现代Ubuntu/Debian18.04及以后版本采用了新的管理架构NetworkManager → resolvconf → /etc/resolv.conf这种设计带来了几个关键变化允许不同网络接口使用不同DNS配置支持DNS-over-TLS等新特性防止手动修改被意外覆盖2.2 关键配置文件解析系统中涉及DNS配置的主要文件包括/etc/resolv.conf实际使用的DNS配置符号链接/etc/systemd/resolved.confsystemd-resolved服务的主配置/etc/NetworkManager/NetworkManager.confNetworkManager的全局配置/etc/netplan/*.yamlUbuntu的Netplan网络配置注意直接修改/etc/resolv.conf在大多数现代系统中是无效的因为它会被各种网络服务自动覆盖。3. 三种永久DNS配置方法详解3.1 方法一通过Netplan配置Ubuntu首选适用于使用Netplan的网络配置Ubuntu 17.10默认定位Netplan配置文件ls /etc/netplan/编辑配置文件示例为50-cloud-init.yamlnetwork: version: 2 ethernets: ens33: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1] search: [mydomain.com]应用配置sudo netplan apply关键参数说明addresses: DNS服务器IP列表建议至少配置两个search: 域名搜索列表可省略保持dhcp4: no以避免冲突3.2 方法二通过NetworkManager配置适用于桌面环境或NetworkManager管理的系统查看当前连接名称nmcli connection show修改DNS配置以连接名Wired connection 1为例sudo nmcli connection modify Wired connection 1 ipv4.dns 8.8.8.8 8.8.4.4 sudo nmcli connection modify Wired connection 1 ipv4.ignore-auto-dns yes重新激活连接sudo nmcli connection up Wired connection 1实测技巧使用ipv4.ignore-auto-dns yes禁用DHCP的DNS推送可通过GUI操作右键网络图标 → 编辑连接 → IPv4设置3.3 方法三通过systemd-resolved配置适用于不使用NetworkManager的服务器环境编辑resolved配置文件sudo nano /etc/systemd/resolved.conf修改以下内容[Resolve] DNS8.8.8.8 1.1.1.1 FallbackDNS9.9.9.9 Domainsmydomain.com DNSOverTLSopportunistic重启服务sudo systemctl restart systemd-resolved验证状态systemd-resolve --status进阶配置DNSOverTLS启用DNS加密传输Cacheyes启用本地缓存DNSSECallow-downgrade启用DNSSEC验证4. DNS配置的验证与排错4.1 基础验证命令# 查看当前使用的DNS服务器 systemd-resolve --status # 测试域名解析 dig example.com nslookup example.com # 检查DNS响应时间 time dig example.com4.2 常见问题排查问题1修改后DNS不生效检查是否有多个配置方式冲突确认没有残留的dhclient进程ps aux | grep dhclient问题2部分域名无法解析检查search域设置是否正确测试不同DNS服务器的响应差异dig 8.8.8.8 example.com dig 1.1.1.1 example.com问题3DNS响应缓慢测试不同DNS服务器的延迟for dns in 8.8.8.8 1.1.1.1 9.9.9.9; do echo -n $dns: ; time dig $dns example.com | grep Query time done4.3 推荐DNS服务器组合根据我的实测经验推荐以下组合方案主DNS备用DNS特点1.1.1.18.8.8.8全球覆盖好223.5.5.5119.29.29.29国内优化9.9.9.9208.67.222.222安全防护强5. 高级配置与优化技巧5.1 本地DNS缓存配置安装并配置dnsmasq提升解析效率安装dnsmasqsudo apt install dnsmasq配置上游DNS/etc/dnsmasq.confserver8.8.8.8 server1.1.1.1 cache-size1000修改Netplan/NetworkManager指向本地nameservers: addresses: [127.0.0.1]5.2 多网络环境适配针对笔记本等移动设备可以配置网络特定DNS创建NetworkManager连接配置片段sudo mkdir -p /etc/NetworkManager/conf.d/创建办公室配置/etc/NetworkManager/conf.d/office.conf[connection-office] match-devicemac:00:11:22:33:44:55 ipv4.dns10.0.0.53; ipv4.ignore-auto-dnstrue5.3 DNS-over-TLS配置通过systemd-resolved启用加密DNS编辑/etc/systemd/resolved.conf[Resolve] DNS1.1.1.1 DNSOverTLSyes验证加密状态sudo tcpdump -i any port 8535.4 企业内网DNS的特殊处理对于需要同时访问内外网的环境nameservers: addresses: [10.0.0.53, 8.8.8.8] search: [internal.corp, corp.com]配合dnsmasq可实现智能分流server/internal.corp/10.0.0.53 server/corp.com/10.0.0.53 server8.8.8.8