Mac上DNS双模式切换脚本核心是用networksetup命令配合Shell脚本,通过./dns-switch.sh home或office一键切换家庭/公司DNS,并刷新缓存确保生效。
mac 上用脚本自动切换家里和公司的 dns,核心是利用系统自带的 networksetup 命令配合简单 shell 脚本,实现一键替换 dns 服务器。不需要第三方工具,也不依赖图形界面,适合频繁在两个网络间切换的用户。
关键前提:确认你的网络服务名称
多数情况下是 Wi-Fi,但建议先运行以下命令确认准确名称(注意大小写和空格):
networksetup -listallnetworkservices
输出中带 * 的表示当前启用,比如:
Wi-Fi Bluetooth PAN Thunderbolt Bridge
写一个双模式切换脚本(例如 dns-switch.sh)
保存为文件后赋予执行权限即可使用:
#!/bin/bash
# 家庭 DNS(通常走路由器自动分发,或设为公共 DNS)
HOME_DNS=("8.8.8.8" "1.1.1.1")
# 公司 DNS(按实际填写,如内网 DNS + 备用)
OFFICE_DNS=("192.168.10.1" "8.8.8.8")
SERVICE="Wi-Fi" # 替换为你的真实服务名
if [ "$1" = "home" ]; then
echo "→ 切换到家庭 DNS: ${HOME_DNS[@]}"
networksetup -setdnsservers "$SERVICE" "${HOME_DNS[@]}"
elif [ "$1" = "office" ]; then
echo "→ 切换到公司 DNS: ${OFFICE_DNS[@]}"
networksetup -setdnsservers "$SERVICE" "${OFFICE_DNS[@]}"
else
echo "用法:$0 {home|office}"
echo "示例:$0 home"
exit 1
fi
# 刷新 DNS 缓存,确保立即生效
dscacheutil -flushcache
sudo killall -HUP mDNSResponder
使用方法:
- 将上述内容保存为
dns-switch.sh(可用文本编辑器或终端nano dns-switch.sh) - 赋予执行权限:
chmod +x dns-switch.sh
- 切换到家庭 DNS:
./dns-switch.sh home
- 切换到公司 DNS:
./dns-switch.sh office
补充说明:
- 如果你同时用 Wi-Fi 和有线以太网,可为两者分别设置(把
SERVICE="Wi-Fi"改成"Ethernet"再运行一次) - 恢复为 DHCP 自动获取 DNS(即让路由器决定):
networksetup -setdnsservers "Wi-Fi" empty
- 想验证当前 DNS 是否生效:
networksetup -getdnsservers "Wi-Fi"
这样每次换环境只需一条命令,比打开系统设置点五六次快得多,也避免手动输错 IP。











