macOS可通过networksetup命令行工具查看、设置DNS,支持单服务配置、位置切换及Shell脚本自动化;需验证缓存刷新与解析结果。

一、使用 networksetup 命令查看当前网络服务及DNS配置
networksetup 是 macOS 内置的命令行工具,用于查询和修改网络接口设置。在执行任何 DNS 修改前,必须先确认系统中启用的网络服务名称(如 Wi-Fi、以太网)及其当前 DNS 状态,避免误操作影响网络连接。
1、打开“终端”应用程序。
2、输入以下命令列出所有可用网络服务:
networksetup -listallnetworkservices
3、输入以下命令查看指定服务(例如 Wi-Fi)当前使用的 DNS 服务器:
networksetup -getdnsservers "Wi-Fi"
4、若返回 There aren't any DNS Servers set on Wi-Fi.,说明该服务未手动配置 DNS,正使用 DHCP 分配的 DNS。
二、使用 networksetup 设置单个或多个 DNS 服务器
可通过 networksetup 直接为指定网络服务写入一组新的 DNS 地址,系统将立即生效,无需重启网络或图形界面。支持 IPv4 和 IPv6 混合输入,地址间以空格分隔。
1、为 Wi-Fi 服务设置 Google 公共 DNS(IPv4):
networksetup -setdnsservers "Wi-Fi" 8.8.8.8 8.8.4.4
2、为以太网服务设置 Cloudflare DNS(含 IPv6):
networksetup -setdnsservers "Ethernet" 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001
3、若需恢复为 DHCP 自动获取 DNS,请执行:
networksetup -setdnsservers "Wi-Fi" Empty
三、创建并切换预设 DNS 配置位置(命令行方式)
macOS 支持通过“位置(Location)”机制保存多套完整网络参数,包括 DNS、代理、搜索域等。虽然图形界面中通过“网络”偏好设置可管理位置,但 networksetup 同样支持命令行创建与切换,实现一键 DNS 切换。
1、创建名为 “WorkDNS” 的新位置,并复制当前活动位置配置:
networksetup -createlocation "WorkDNS" populate
2、为该位置下的 Wi-Fi 服务设置自定义 DNS:
networksetup -switchlocation "WorkDNS"
networksetup -setdnsservers "Wi-Fi" 114.114.114.114 223.5.5.5
3、切换回默认位置(通常为 “Automatic”):
networksetup -switchlocation "Automatic"
四、编写 Shell 脚本实现 DNS 快速轮换
针对需频繁切换 DNS 的用户,可将常用配置封装为可执行脚本,通过传参调用不同策略,规避重复输入长命令。脚本依赖 systemsetup 和 networksetup,无需额外安装。
1、新建脚本文件并赋予执行权限:
touch ~/switch-dns.sh && chmod +x ~/switch-dns.sh
2、向脚本写入以下内容(以 Wi-Fi 为例):
#!/bin/bash\nSERVICE="Wi-Fi"\ncase $1 in\n google)\n networksetup -setdnsservers "$SERVICE" 8.8.8.8 8.8.4.4\n ;;\n cloudflare)\n networksetup -setdnsservers "$SERVICE" 1.1.1.1 1.0.0.1\n ;;\n china)\n networksetup -setdnsservers "$SERVICE" 114.114.114.114 223.5.5.5\n ;;\nesac
3、在终端中运行脚本切换 DNS:
~/switch-dns.sh cloudflare
五、验证 DNS 切换是否生效
配置完成后,必须验证系统实际解析行为是否已按预期变更,防止因缓存、服务未刷新或权限问题导致配置未加载。
1、立即刷新 mDNSResponder 缓存(macOS 12+ 推荐):
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
2、使用 nslookup 测试域名解析是否命中新 DNS:
nslookup example.com 8.8.8.8
3、检查当前活动 DNS 是否与设定一致:
networksetup -getdnsservers "Wi-Fi"


















