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


29

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

Answers:


15

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

>打开
> d.init
> d。添加ServerAddresses * 8.8.8.8 9.9.9.9
>设置状态:/网络/服务/ PRIMARY_SERVICE_ID / DNS
>退出

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

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


2
8.8.8.8是有效的。Google的公共DNS。8.8.4.4是次要的。:-)
被遗忘的分号

我知道,我用它:)
John T

1
这应该。您可以scutil --dns用来确认。
John T

2
这似乎在我的Mac OSX 10.7.5 MBP上不起作用,至少从字面上看没有。我应该替换行中的任何内容set State:/Network/Service/PRIMARY_SERVICE_ID/DNS还是可以原样使用?scutil --dns更改后,新的DNS服务器是否应在输出中显示?
ssc 2013年

2
@ssc运行,scutil然后> list找到用于替换PRIMARY_SERVICE_ID的密钥。
J.Money

46

您可以使用networksetup

sudo networksetup -setdnsservers <networkservice> DNS1, DNS2, DNS3

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

sudo networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4

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

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

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


哇,84144是我遇到的问题。仍在处理所有这些。...非常感谢!
丹·罗森斯塔克

6
给任何想删除DNS的人的便条,只写“空”(不带引号)而不是DNS:sudo networksetup -setdnsservers <networkservice> empty
jackJoe 2012年

14

我没有足够的分数来回复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]*\]'

偶然发现此页面的任何人。我现在在GitHub上有一个Gist应该会有所帮助。 gist.github.com/dkittell/34fe7b7422323fba546948b7448933a5
David Kittell

1

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.
#

另外,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
  1. 使用输入的命令运行scutil。(您需要sudo set
sudo scutil < commands.txt

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.