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

Dan*_*ark 37 dns bash macos

如何从 Mac OS X 上的终端更改我的 DNS 服务器?[我需要这个,因为我的 DNS 无法与我的 VPN 正常工作。有时它使用 DNS 作为我的主连接,有时它使用为 VPN 指定的 DNS(它应该使用)。]

Che*_*ion 58

您可以使用networksetup

sudo networksetup -setdnsservers <networkservice> DNS1, DNS2, DNS3
Run Code Online (Sandbox Code Playgroud)

例如(机场连接使用谷歌的 DNS 服务器)

sudo networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4
Run Code Online (Sandbox Code Playgroud)

您可以通过运行找到网络服务的名称networksetup -listallnetworkservices。可能是“Wi-Fi”。

这与您要在系统偏好设置中的网络偏好窗格中编辑整体相同,因此它在重新启动后保持不变。

您可能会在 Snow Leopard 上遇到 DNS 问题,该问题在查询 DNS 服务器的顺序更改时发生(请参阅问题84144))

  • 给想要删除 DNS 的任何人的一个注意事项,只需写“空”(不带引号)而不是 DNS:`sudo networksetup -setdnsservers &lt;networkservice&gt; empty` (9认同)

Dav*_*ell 23

我没有足够的积分来回复 Chealion 的帖子,但要补充一点,我将从列出接口开始

networksetup -listallnetworkservices
Run Code Online (Sandbox Code Playgroud)

有了想要更改的界面后,您可以执行以下操作(我使用的是 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
Run Code Online (Sandbox Code Playgroud)

上面的第一行将清空 DNS 设置,然后使用我们想要使用的 DNS 服务器并仔细清除 DNS 缓存

要验证 DNS 更改,您可以在前后或之后执行此操作

scutil --dns | grep 'nameserver\[[0-9]*\]'
Run Code Online (Sandbox Code Playgroud)

  • @JohnnyUtahh,请看https://www.kittell.net/code/mac-osx-terminal-change-dns/ (2认同)

Joh*_*n T 17

您可以scutil从终端交互使用。运行sudo scutil并运行这些命令,在适当的地方交换您的 DNS 服务器:

> 打开
> d.init
> d.添加服务器地址 * 8.8.8.8 9.9.9.9
> 设置状态:/Network/Service/PRIMARY_SERVICE_ID/DNS
> 退出

而不是使用8.8.8.89.9.9.9使用您的 DNS 服务器。

唯一的问题是这在重新启动后不是持久的。如果您想要永久更改,则需要ncutil/etc/resolv.conf在较新版本的 OS X 中编辑不够的原因是因为 configd 现在使用数据库来存储其他应用程序读取的当前设置信息。某些应用程序仍将读取 /etc/resolv.conf(例如主机),但并非所有应用程序都如此。

  • 不过,8.8.8.8 是有效的。谷歌的公共 DNS。8.8.4.4 是次要的。:-) (2认同)
  • 这在我的 Mac OSX 10.7.5 MBP 上似乎不起作用,至少在字面上完成时不会。我应该替换 `set State:/Network/Service/PRIMARY_SERVICE_ID/DNS` 行中的任何内容,还是可以按原样使用它?更改后,新的 DNS 服务器是否应显示在 `scutil --dns` 输出中? (2认同)
  • @ssc 运行 `scutil` 后跟 `&gt; list` 以找到替换 PRIMARY_SERVICE_ID 的键。 (2认同)

kik*_*kas 7

resolv.conf 不再在 OSX 上运行。该文件的顶部有一条通知,如下所示:

#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
# processes on this system.
#
# To view the DNS configuration used by this system, use:
#   scutil --dns
#
# SEE ALSO
#   dns-sd(1), scutil(8)
#
# This file is automatically generated.
#
Run Code Online (Sandbox Code Playgroud)

此外,networksetup -listallnetworkservices未列出所有 VPN 接口。

以下是使用 scutil 定位正确接口的一种方法: 1. 使用commands.txt交互式 scutil 工具的命令创建一个文件。例如,在我的例子中,Pulse 安全接口的内容:

get State:/Network/Service/net.pulsesecure.pulse.nc.main/DNS
d.add ServerAddresses * 8.8.8.8 9.9.9.9
set State:/Network/Service/net.pulsesecure.pulse.nc.main/DNS
Run Code Online (Sandbox Code Playgroud)
  1. 使用管道输入的命令运行 scutil。(您需要 sudo set
sudo scutil < commands.txt
Run Code Online (Sandbox Code Playgroud)