在计算机网络的世界中,域名系统扮演着“互联网电话簿”的关键角色,它负责将我们易于记忆的域名(如 www.google.com)翻译成机器能够理解的IP地址(如 250.191.78),我们的计算机会自动使用互联网服务提供商(ISP)分配的DNS服务器,通过终端手动指定DNS,用户可以获得更快的解析速度、增强的隐私保护、规避内容审查以及更高的网络控制权,本文将深入探讨如何在不同的操作系统中,通过终端这一强大工具来精确指定DNS服务器。

理解DNS及其重要性
在深入操作之前,首先需要明白为何要主动管理DNS,默认的ISP DNS虽然方便,但存在一些潜在问题,它可能响应速度较慢,记录用户的浏览历史,甚至在某些情况下会进行DNS劫持或内容过滤。
相比之下,公共DNS服务,如Google DNS(8.8.8.8)、Cloudflare DNS(1.1.1.1)或OpenDNS,通常由技术巨头维护,具备以下优势:
- 速度与可靠性:拥有全球分布的服务器集群,能提供更快的域名解析响应时间和高可用性。
- 隐私与安全:部分服务商(如Cloudflare)承诺不记录用户IP地址,提供更严格的隐私保护政策,并集成恶意网站过滤功能。
- 功能丰富:支持家长控制、广告拦截等高级功能。
- 绕过限制:可以访问因本地DNS污染而无法访问的网站。
下表对比了几款主流的公共DNS服务:
| 服务提供商 | 主DNS服务器 | 辅助DNS服务器 | 主要特点 |
|---|---|---|---|
| Google Public DNS | 8.8.8 | 8.4.4 | 速度快,全球覆盖广,稳定可靠 |
| Cloudflare DNS | 1.1.1 | 0.0.1 | 强调隐私保护,速度快,集成安全功能 |
| OpenDNS FamilyShield | 67.222.123 | 67.220.123 | 预设成人内容过滤,适合家庭使用 |
| Quad9 DNS | 9.9.9 | 112.112.112 | 自动阻止已知恶意网站,注重安全 |
在终端中指定DNS的实用方法
通过终端指定DNS,意味着直接通过命令行界面修改网络配置,这是系统管理员和高级用户常用的操作,具体方法因操作系统而异。
Linux 系统
在Linux中,DNS配置传统上存储在 /etc/resolv.conf 文件中。
临时指定DNS(重启后失效)
最直接的方法是编辑此文件,使用你喜欢的文本编辑器(如 nano 或 vim)以root权限打开它:
sudo nano /etc/resolv.conf
然后添加你想要的DNS服务器地址,每行一个,前面加上 nameserver 关键字,使用Google和Cloudflare的DNS:
nameserver 8.8.8.8
nameserver 1.1.1.1
保存并退出后,新的DNS设置会立即生效,但请注意,在现代Linux发行版中,/etc/resolv.conf 通常由网络管理服务(如 NetworkManager 或 systemd-resolved)动态管理,系统重启或网络重连后,你的修改可能会被覆盖。
永久指定DNS
为了实现永久生效,需要通过网络管理工具进行配置。
-
使用
nmcli(NetworkManager命令行工具):
首先查看你的网络连接名称:nmcli connection show
假设你的连接名为 “Wired connection 1″,可以使用以下命令设置DNS:

sudo nmcli con mod "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1" sudo nmcli con up "Wired connection 1"
这会将DNS设置写入该连接的配置文件中,从而实现永久生效。
-
使用
netplan(Ubuntu Server 18.04+):
编辑/etc/netplan/目录下的YAML配置文件(如01-netcfg.yaml),在nameservers部分添加地址:network: version: 2 ethernets: enp0s3: dhcp4: yes nameservers: addresses: [8.8.8.8, 1.1.1.1]保存后,运行
sudo netplan apply使配置生效。
macOS 系统
macOS提供了一个专门的命令行工具 networksetup 来管理网络设置,这是最可靠的方法。
指定DNS
列出所有网络服务以获取准确的名称(如 “Wi-Fi” 或 “Ethernet”):
networksetup -listallnetworkservices
使用 setdnsservers 命令为指定服务设置DNS,为Wi-Fi设置Google和Cloudflare DNS:
sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 1.1.1.1
验证与清除
你可以使用 getdnsservers 来验证设置:
networksetup -getdnsservers Wi-Fi
若要恢复为自动获取DNS,只需将DNS地址设置为 “Empty”:
sudo networksetup -setdnsservers Wi-Fi "Empty"
Windows 系统
在Windows中,可以使用内置的 netsh (Network Shell) 工具来通过命令行修改DNS。
指定DNS
以管理员身份打开命令提示符(CMD)或PowerShell,查看网络接口名称:

netsh interface show interface
假设你的以太网接口名为 “以太网”,你可以使用以下命令设置主DNS和备用DNS:
netsh interface ip set dns "以太网" static 8.8.8.8 primary netsh interface ip add dns "以太网" 1.1.1.1 index=2
验证与恢复
使用 ipconfig /all 可以查看当前所有网络接口的详细配置,确认DNS设置是否已更改。
若要恢复为通过DHCP自动获取DNS,可以运行:
netsh interface ip set dns "以太网" dhcp
验证与故障排除
完成设置后,无论使用何种操作系统,都可以使用 dig、nslookup 或 host 等工具来验证DNS是否正在按预期工作,使用 dig 直接查询Google DNS以解析一个域名:
dig @8.8.8.8 www.example.com
如果返回了正确的IP地址,说明你的网络正在通过指定的DNS服务器进行查询,如果设置未生效,请检查命令语法、网络接口名称是否正确,并确认你拥有足够的系统权限。
相关问答FAQs
问题1:为什么我修改了 /etc/resolv.conf 文件,重启后设置又变回去了?
答: 这是一个在现代Linux发行版中非常常见的现象,原因在于,这些系统通常使用 systemd-resolved 或 NetworkManager 这样的服务来动态管理网络配置,包括DNS设置,当你手动编辑 /etc/resolv.conf 后,这些服务在网络状态发生变化时(如重启、重新连接网络)会根据其自身的配置规则重新生成该文件,从而覆盖你的修改。/etc/resolv.conf 被视为一个临时或动态文件,要实现永久性的DNS设置,你需要修改这些网络管理服务的配置,例如使用 nmcli 命令(针对NetworkManager)或编辑 netplan 的配置文件(针对Ubuntu Server),而不是直接编辑 resolv.conf。
问题2:使用公共DNS(如 8.8.8.8)和运营商提供的DNS有什么区别?我应该选择哪个?
答: 主要区别在于性能、隐私和策略三个方面。
- 性能:运营商DNS服务器在物理上可能更靠近你,理论上延迟更低,但公共DNS服务商通常拥有更优化的基础设施和缓存机制,实际解析速度可能更快。
- 隐私:运营商DNS可能会记录你的查询历史,并可能用于数据分析或广告投放,而像Cloudflare(1.1.1.1)这样的公共DNS服务商则明确承诺保护用户隐私,不永久存储个人身份信息。
- 策略:运营商DNS可能会根据当地法规或政策对某些网站进行屏蔽或劫持(DNS污染),公共DNS则通常不受此限制,可以帮助你访问更自由的互联网。
选择建议:如果你最看重网络访问的自由度和隐私保护,推荐使用Cloudflare(1.1.1.1)或Quad9(9.9.9.9),如果你追求极致的稳定性和全球兼容性,Google DNS(8.8.8.8)是一个不错的选择,如果你有家庭网络过滤需求,OpenDNS FamilyShield是专门为此设计的,你可以通过实际测试,看看哪个DNS在你的网络环境下响应最快,然后做出最适合自己需求的选择。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/264661.html