于平常的Linux运维以及服务器管理里头,网络连接方面的问题常常是排查进程之中的关键要点。
在使用 apt 更新软件源时如频繁出现 超时或解析失败情况,在使用 yum 更新软件源时若频繁出现超时或解析失败状况,在通过 docker pull 拉取镜像之际要是频繁出现超时或解析失败现象,在通过 ssh 连接远端云服务器之时倘若频繁出现超时或解析失败情形,很多时候并非是带宽不足,而是默认的DNS解析出现了问题。
尤其是于中国大陆那复杂的网络环境当中,自动获取的运营商DNS,或者本地DNS,极易出现劫持情况,或者遭受污染,又或者存在高延迟现象,最终致使服务器连接失败。

对于从事运维工作的人员来讲,依靠手动方式去进行配置,从而达成稳定性能以及高效状态的DNS,这是为了确保服务器能够具备稳定特性以及实现访问速度得以保障的基础性操作行为。
此篇文章会起始于Linux服务器环境,联合云服务器配置、Docker容器网络之类场景,推举经过实测并且好用的DNS服务器,还给出标准的操作步骤。
一、为什么要在服务器端手动修改DNS?
在服务器端,DNS的稳定性直接影响业务。
例如:
对于云服务器部署来说,当购买了域名并且将其解析到云服务器之际,要是DNS处于不稳定的状态,那么就会致使域名被解析到旧的IP,进而对业务访问造成影响。
2. Docker 容器网络:每一次容器启动的时候,都会依赖宿主机 DNS 来开展镜像拉取以及域名解析的相关操作,要是 DNS 出现故障的情况,那么容器就没有办法去访问外部网络了。
3. 环境搭建:借助 wget 或者 curl 去下载安装脚本(像Docker、Node.js之类),要是DNS解析失败,那么就会致使环境搭建中断。
故,给Linux服务器设置可靠的DNS,乃是提高运维效率以及系统安全的关键一步。
二、Linux 环境下手动配置 DNS(以 Ubuntu / CentOS 为例)
通常操作步骤会涉及对 /etc/resolv.conf 文件进行修改,或者借助系统网络管理器来进行配置。
需留意,要是你所使用的云服务器运用了netplan(适用于Ubuntu 18.04及以上版本)或者NetworkManager,那么直接去修改resolv.conf的话,是有可能会被覆盖掉 的。
以下是通用且持久化的配置方法:
方案 A:通过 systemd-resolved 配置(适用于 Ubuntu 16.04+)
1. 编辑配置文件:
sudo vim /etc/systemd/resolved.conf
2. 修改或添加以下内容(以阿里DNS为例):
[Resolve]
DNS=223.5.5.5 223.6.6.6
# 回退DNS
FallbackDNS=114.114.114.114 119.29.29.29
# 开启DNSSEC以增强安全性
DNSSEC=allow-downgrade
3. 重启服务生效:
sudo systemctl restart systemd-resolved
sudo systemctl enable systemd-resolved
方案 B:通过 netplan 配置(适用于 Ubuntu 18.04+ 云服务器)
1. 对netplan配置文件展开编辑操作,其位置一般处于 /etc/netplan/ 这个目录之中,举例而言像 01-netcfg.yaml 这样的文件:
network:
ethernets:
eth0:
dhcp4: no
addresses: [你的服务器IP/掩码]
gateway4: 你的网关
nameservers:
addresses: [223.5.5.5, 223.6.6.6, 114.114.114.114]
version: 2
2. 应用配置:
sudo netplan apply
三、专业运维视角的DNS推荐(2025年更新)

在选择DNS时,需根据业务场景区分。
以下推荐基于稳定性、安全性和对Linux环境的适配性。

1. 阿里云公共DNS (223.5.5.5 / 223.6.6.6)
适用场景:托管在阿里云或需要访问国内CDN资源的服务器。
“技术优势”体现为,依靠阿里云全球网络节点,解析延迟极底,一般处于10至25毫秒,对于国内各大云服务商,对于软件源,比如对阿里云镜像站,具备精准的智能解析。


对ECS予以支持,这般可切实防止跨网调度出现,进而促使wget以及yum的下载速度得以提升。
名为IPv6的,其中有这样两种形式,2400:3200::1 ,还有2400:3200:baba::1。

2. 腾讯云公共DNS (119.29.29.29)
使用场景是,主要被用于腾讯云服务器,或者是那种需要高速去访问腾讯系服务的环境,比如说游戏服务器、微信接口这类的。

技术优势:Anycast技术覆盖,解析成功率极高。
于腾讯云上所部署的容器集群而言,运用此DNS可极大程度减少解析期间所耗费的时间。
具有特定标识的,编号为2402:4e00:: 的,以及编号为2402:4e00::1的,被称作IPv6的事物。
3. 114 公共DNS (114.114.114.114)

使用场景为,通用的场景,特别是那一些,需要去拦截钓鱼以及恶意网站的企业内网。
技术优势:全国三网通用,延迟通常低于10ms。
这款声称安全版本号码叫做114.114.114.119的软件,具备自动拦截恶意域名的能力,将其作为防火墙策略的一部分是合适的,能够让Linux服务器的安全性得到增强。
4. Cloudflare DNS (1.1.1.1) / Google DNS (8.8.8.8)
使用场景为,去访问那些位于海外的代码仓库,像是GitHub、Docker Hub这样的,还要去拉取海外的镜像,或者是对海外的云服务器进行管理。
技术优势:
宣称主打隐私保护,不会记录客户端IP,支持DoT/DoH,适用于对隐私有着较高要求的Docker构建环境。
8.8.8.8:全球解析量大,缓存命中率高。
但在国内部分网络环境下可能有丢包,可作为备用DNS使用。
5. Quad9 (9.9.9.9)
适用场景:高安全性需求的生产环境,如金融、支付系统服务器。
一项优势在于技术,它是由非营利性质的组织进行运营,其内部设置有威胁情报,能够自动阻止那些已知的恶意软件以及网络钓鱼域名。
非常适合部署在公网入口服务器上,作为第一道安全防线。
四、Docker 环境下的DNS配置
于Docker部署之际,咱们能够给容器去指定DNS,进而防止因宿主机DNS方面的问题致使容器内部的服务没办法解析域名。
1. 关于整体的配置:对那个位于/etc/docker/daemon.json的文件进行编辑:
{
"dns": ["223.5.5.5", "114.114.114.114", "8.8.8.8"]
}
须重启Docker才会生效,具体操作为,执行:sudo、systemctl、restart、docker这一系列指令。
2. 容器运行时指定:
docker run --dns 223.5.5.5 --dns 114.114.114.114 -it ubuntu /bin/bash
五、总结
有一项在Linux服务器运维以及Docker环境搭建里,极为实用且特别有效的优化办法,那就是手动去配置DNS。
不管是经由修改resolv.conf,配置起netplan,又或者是去调整Docker守护进程,挑选适配业务区域的DNS(像阿里云、腾讯云用于国内业务,Cloudflare或者Google用于国际业务),都能够很明显地提高软件拉取、域名解析的速度以及成功率,进而保障业务的连续性和稳定性。
建议,让运维人员,把DNS配置这般内容,纳入到服务器初始化脚本里头,达成环境搭建的标准化。

Comments NOTHING