终端切换dns需三步闭环:先用networksetup -listallnetworkservices确认服务名,再用sudo networksetup -setdnsservers指定dns地址,最后执行对应版本缓存刷新命令确保生效。

直接用终端命令切换 DNS,比图形界面更快、更可控,尤其适合多网络环境或需要脚本化操作的场景。关键不是“输对命令”,而是理清服务名、DNS 地址和缓存刷新这三步闭环。
查清当前网络服务名称
macOS 不是按“Wi-Fi”或“以太网”固定命名,而是按系统实际注册的服务名识别——它可能带空格、中文,甚至版本差异(如 “Wi-Fi” 或 “Wi-Fi 2”)。不确认就写命令,大概率报错。
- 打开终端,运行:networksetup -listallnetworkservices
- 输出中找你正在用的那个连接,比如:Wi-Fi、USB 10/100/1000 LAN 或 Thunderbolt Bridge
- 记下完整名称,包括引号、空格和大小写——后续所有命令都必须严格一致
一键设置或切换 DNS
设置命令会直接写入系统配置数据库,覆盖当前服务的 DNS 列表,且重启后依然有效。支持单个、多个或自动恢复。
- 设为阿里 DNS + Cloudflare(推荐国内用户):sudo networksetup -setdnsservers "Wi-Fi" 223.5.5.5 1.1.1.1
- 设为 Google DNS(适合国际访问):sudo networksetup -setdnsservers "Wi-Fi" 8.8.8.8 8.8.4.4
- 恢复 DHCP 自动获取 DNS:sudo networksetup -setdnsservers "Wi-Fi" empty
⚠️ 注意:命令执行后不会提示“成功”,需手动验证;sudo 是必须的,输完密码时屏幕无回显,直接按回车即可。
立即验证并强制刷新缓存
改完 DNS 不刷新缓存,系统仍可能用旧记录解析域名——这是很多人误以为“命令没生效”的主因。
- 验证是否写入成功:networksetup -getdnsservers "Wi-Fi"(应精确返回你刚设的 IP)
- 查看当前实际使用的 DNS:scutil --dns | grep nameserver
- 刷新系统 DNS 缓存:
• macOS Ventura 13 及更新:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
• macOS Monterey 12 及更早:sudo killall -HUP mDNSResponder
进阶:快速切换不同 DNS 配置
如果你常在家庭、公司、移动热点间切换,可提前保存几组命令为 shell 函数,或配合 alias 简化调用:
- 在 ~/.zshrc 中添加:
alias dns-home='sudo networksetup -setdnsservers "Wi-Fi" 223.5.5.5 114.114.114.114 && sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder'alias dns-work='sudo networksetup -setdnsservers "Wi-Fi" 192.168.1.1 8.8.8.8 && sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder' - 保存后运行 source ~/.zshrc,之后只需输入 dns-home 或 dns-work 即可一键切换











