在数字化和网络化的当今时代,域名系统(DNS)作为互联网的“电话簿”,其稳定性和响应速度直接影响着用户的网络体验,无论是为了规避网络封锁、提升访问速度,还是为了增强网络安全,切换DNS服务器都是一个常见的操作,通过图形界面在多台设备或需要频繁切换的场景下手动调整,效率低下且容易出错,利用脚本来自动化DNS调整,就成了系统管理员、网络工程师及高级用户必备的实用技能。

脚本化DNS管理的核心优势
与手动操作相比,使用脚本进行DNS配置具有不可比拟的优势,这使得它在专业领域和个人高级应用中都备受青睐。
- 高效性与自动化:脚本可以在几秒钟内完成DNS的修改,而手动操作则需要多个点击步骤,尤其当需要在数十、数百甚至数千台设备上统一部署DNS策略时,脚本可以实现一键批量执行,极大地节省了人力和时间成本。
- 精确性与可重复性:脚本执行的是精确的命令,杜绝了手动操作可能因疏忽而产生的配置错误,脚本可以被保存和无限次复用,确保每次执行的操作都完全一致,便于标准化部署。
- 灵活的场景切换:用户可以预先编写多个脚本,分别针对不同的网络环境,一个用于连接公司内网的脚本,一个用于使用公共DNS(如Cloudflare)加速的脚本,另一个用于使用VPN服务提供的DNS,通过一键运行相应脚本,即可瞬间完成网络环境的切换。
- 集成与调度:脚本可以轻松地集成到更宏大的自动化工作流中,或者通过操作系统的任务计划程序(如Windows的任务计划程序或Linux的Cron)进行定时调度,可以在每天工作时间自动切换到公司DNS,休息时间则切换到更快的公共DNS。
常见的脚本环境与实践平台
不同的操作系统提供了原生的脚本环境,用户可以根据自身平台选择合适的工具。
- Windows平台:PowerShell是现代Windows系统默认的强大命令行和脚本环境,它提供了丰富的网络管理模块,是调整DNS的首选工具。
- Linux/macOS平台:Shell脚本(特别是Bash)是Linux和macOS系统下的标配,通过调用系统命令或网络管理工具(如
nmcli、resolvectl等),同样可以高效地修改DNS设置。
实战演练:DNS调整脚本示例
以下是针对两大主流平台的详细脚本示例,旨在提供清晰、可直接使用的参考。
Windows平台:使用PowerShell
PowerShell通过-InterfaceAlias参数指定网络适配器名称,通过-ServerAddresses参数指定DNS服务器地址。
设置为Google公共DNS(8.8.8.8 和 8.8.4.4)
# 查看当前网络适配器的名称
# Get-NetAdapter | Format-Table -AutoSize
# 将 "以太网" 替换为你的实际网络连接名称(如 "WLAN")
$InterfaceAlias = "以太网"
# 设置主DNS和备用DNS
Set-DnsClientServerAddress -InterfaceAlias $InterfaceAlias -ServerAddresses ("8.8.8.8", "8.8.4.4")
Write-Host "DNS已成功设置为Google公共DNS。"
恢复为“自动获取DNS服务器地址”

# 将 "以太网" 替换为你的实际网络连接名称 $InterfaceAlias = "以太网" # 通过将服务器地址设置为空来恢复DHCP自动获取 Set-DnsClientServerAddress -InterfaceAlias $InterfaceArray -ResetServerAddresses Write-Host "DNS设置已恢复为自动获取。"
运行方式:需要以“管理员身份”运行PowerShell终端。
Linux/macOS平台:使用Bash与nmcli
在现代的Linux发行版(如Ubuntu, Fedora, CentOS)中,NetworkManager是主流的网络管理服务,其命令行工具nmcli功能强大且易于使用。
设置为Cloudflare公共DNS(1.1.1.1 和 1.0.0.1)
#!/bin/bash # 查看当前活动的网络连接名称 # nmcli connection show --active # 将 "Wired connection 1" 替换为你的实际连接名称 CON_NAME="Wired connection 1" # 设置DNS服务器 sudo nmcli con mod "$CON_NAME" ipv4.dns "1.1.1.1 1.0.0.1" # 应用更改(先禁用再启用网络连接) sudo nmcli con down "$CON_NAME" && sudo nmcli con up "$CON_NAME" echo "DNS已成功设置为Cloudflare公共DNS。"
恢复为“自动获取DNS”
#!/bin/bash # 将 "Wired connection 1" 替换为你的实际连接名称 CON_NAME="Wired connection 1" # 清除手动设置的DNS,恢复由DHCP服务器自动分配 sudo nmcli con mod "$CON_NAME" ipv4.dns "" # 重新激活连接以应用更改 sudo nmcli con down "$CON_NAME" && sudo nmcli con up "$CON_NAME" echo "DNS设置已恢复为自动获取。"
运行方式:将上述代码保存为.sh文件(如set_dns.sh),通过chmod +x set_dns.sh赋予执行权限,然后使用./set_dns.sh运行。sudo命令会提示输入管理员密码。
常用公共DNS服务器参考
为了方便使用,这里整理了一些知名且可靠的公共DNS服务提供商。

| 服务提供商 | 主DNS服务器 | 备用DNS服务器 | 特点 |
|---|---|---|---|
| Cloudflare | 1.1.1 | 0.0.1 | 速度快,强调隐私保护 |
| 8.8.8 | 8.4.4 | 全球通用,稳定可靠 | |
| Quad9 | 9.9.9 | 112.112.112 | 自动阻止已知恶意网站 |
| AliDNS | 5.5.5 | 6.6.6 | 面向中国大陆用户优化 |
关键注意事项与最佳实践
在享受脚本带来的便利时,以下几点需特别注意:
- 管理员权限:修改网络设置需要管理员权限,Windows中务必以管理员身份运行PowerShell;Linux/macOS中绝大多数命令需要使用
sudo前缀。 - 接口名称准确性:在运行脚本前,务必确认你的网络连接名称(如“以太网”、“WLAN”或“Wired connection 1”),否则脚本将无法找到目标并执行失败。
- 备份原始设置:在进行任何更改之前,最好先记录下当前的DNS配置,一个简单的
ipconfig /all(Windows)或nmcli dev show | grep DNS(Linux)就能获取,以便出错时能手动恢复。 - 脚本封装与错误处理:对于复杂的场景,可以将脚本进一步封装成函数,并加入简单的错误判断逻辑,使其更加健壮。
- 理解恢复机制:了解如何恢复至原始状态(通常是恢复为DHCP自动获取)与如何设置同等重要,这决定了你处理突发问题的能力。
掌握用脚本调整DNS,不仅是提升个人工作效率的技巧,更是迈向网络自动化管理的重要一步,通过这些简洁而强大的命令,你可以随心所欲地掌控设备的网络访问策略,让网络服务于你,而非束缚于它。
相关问答 (FAQs)
问题1:我运行了PowerShell脚本,但系统提示“访问被拒绝”,这是什么原因? 解答:这个错误几乎总是因为权限不足导致的,修改网络适配器等核心系统设置需要本地管理员权限,请确保你不是以普通用户身份运行的PowerShell,正确的做法是:在开始菜单中找到“PowerShell”,右键点击它,然后选择“以管理员身份运行”,在打开的蓝色或黑色窗口中再执行你的脚本,问题就会解决。
问题2:在Linux上使用nmcli脚本修改DNS后,如何验证DNS是否真的已经生效了?
解答:有多种方法可以验证,最直接的命令是使用nmcli自身查看:运行 nmcli dev show | grep 'DNS',你会看到刚刚设置的IP地址(如1.1.1.1)已被列出,还可以使用resolvectl status或cat /etc/resolv.conf(在某些系统上)来查看最终的解析配置,最彻底的验证方法是使用一个解析工具,如nslookup或dig,去查询一个域名,dig www.google.com,在返回结果中,观察“SERVER:”字段,它应该会显示你刚刚设置的DNS服务器的地址。