在 Mac OS X 上从终端(或脚本)更改 DNS 服务器

在 Mac OS X 上从终端(或脚本)更改 DNS 服务器

如何从 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.89.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

相关内容