如何从 Mac OS X 上的终端更改 DNS 服务器?[我需要这个,因为我的 DNS 无法与 VPN 正确配合使用。有时它使用我主连接的 DNS,有时它使用为 VPN 指定的 DNS(它应该如此)。]
答案1
scutil
您可以从终端交互使用。运行sudo scutil
并运行以下命令,在适当的位置交换 DNS 服务器:
> 打开 > d.初始化 > d.添加服务器地址 * 8.8.8.8 9.9.9.9 > 设置状态:/网络/服务/PRIMARY_SERVICE_ID/DNS > 退出
而不是使用8.8.8.8
并9.9.9.9
使用您的 DNS 服务器。
唯一的问题是重启后不持久如果你想永久改变,你会想要工具/etc/resolv.conf
。在较新版本的 OS X 中,编辑功能不够充分的原因是 configd 现在使用数据库来存储当前设置的信息,其他应用程序可以读取这些信息。某些应用程序仍会阅读 /etc/resolv.conf
(例如主机),尽管并非所有应用程序都是如此。
答案2
您可以使用networksetup
,例如机场连接使用Google 的 DNS服务器:
networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4
您可以通过运行来找出网络服务的名称networksetup -listallnetworkservices
。它可能是“Wi-Fi”。
这与您在系统偏好设置中的网络偏好设置窗格中编辑所有内容相同,因此它在重新启动后仍然有效。
要重置 DNS 服务器列表,只需传递empty
:
networksetup -setdnsservers AirPort empty
要为多个服务自动设置 DNS,您可以使用如下脚本,例如使用1.1.1.1的服务器:
services=$(networksetup -listallnetworkservices | grep 'Wi-Fi\|Ethernet\|USB')
while read -r service; do
echo "Setting DNS for $service"
networksetup -setdnsservers "$service" 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001
done <<< "$services"
你可能在 Snow Leopard 上遇到了 DNS 问题,当查询 DNS 服务器的顺序发生变化时就会发生这种情况(请参阅问题84144))
答案3
我没有足够的积分来回复 Chealion 的帖子,但为了补充一点,我先列出接口
networksetup -listallnetworkservices
一旦您有了想要更改的界面,您可以执行以下操作(我正在使用 Wi-Fi,但您可以使用任何其他界面)
sudo networksetup -setdnsservers Wi-Fi empty
sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4
sudo killall -HUP mDNSResponder
上面的第一行将清空 DNS 设置,然后输入我们要使用的 DNS 服务器,并彻底清除 DNS 缓存
要验证 DNS 更改,您可以在更改前后执行此操作,或者在更改之后执行此操作
scutil --dns | grep 'nameserver\[[0-9]*\]'
答案4
如果您只想通过 vpn 解析某些域名,则可以这样做。不确定这是否适用于所有版本的 macos,但它适用于 Big Sur。只需将该 IP 替换为您通过 vpn 的名称服务器的 IP,文件名就是您想要在那里解析的域名。它似乎可以立即工作,您不需要 HUP 任何东西。
sudo bash
mkdir /etc/resolver
cd /etc/resolver
echo 10.10.10.1 > domain.tld