Thay đổi Máy chủ DNS từ Terminal (hoặc tập lệnh) trên Mac OS X


29

Làm cách nào để thay đổi máy chủ DNS của tôi từ Terminal trên Mac OS X? [Tôi cần điều này vì DNS của tôi không hoạt động chính xác với VPN của tôi. Đôi khi, nó sử dụng DNS cho kết nối chính của tôi và đôi khi, nó sử dụng DNS được chỉ định cho VPN (cần có).]

Câu trả lời:


15

Bạn có thể sử dụng scutiltương tác từ thiết bị đầu cuối. Chạy sudo scutilvà chạy các lệnh này, hoán đổi máy chủ DNS của bạn ở nơi thích hợp:

> mở
> d.init
> d.add ServerAddresses * 8.8.8.8 9.9.9.9
> đặt Trạng thái: / Mạng / Dịch vụ / PRIMARY_SERVICE_ID / DNS
> bỏ

Thay vì sử dụng 8.8.8.89.9.9.9sử dụng máy chủ DNS của bạn.

Vấn đề duy nhất là điều này không liên tục trong các lần khởi động lại . Nếu bạn muốn thay đổi vĩnh viễn, bạn sẽ muốn ncutil . Lý do chỉnh sửa /etc/resolv.confkhông đủ trong các phiên bản OS X mới hơn là vì configd hiện sử dụng cơ sở dữ liệu để lưu trữ thông tin của các cài đặt hiện tại mà các ứng dụng khác đọc. Một số ứng dụng vẫn sẽ đọc /etc/resolv.conf (ví dụ máy chủ), mặc dù đó không phải là trường hợp của tất cả các ứng dụng.


2
8.8.8.8 là một hợp lệ, mặc dù. DNS công cộng của Google. 8.8.4.4 là thứ cấp. :-)
Dấu chấm phẩy bị lãng quên

Tôi biết, tôi sử dụng nó :)
John T

1
Nó nên. Bạn có thể sử dụng scutil --dnsđể xác nhận.
John T

2
Điều này dường như không hoạt động trên Mac OSX 10.7.5 MBP của tôi, ít nhất là không phải khi được thực hiện theo nghĩa đen. Tôi nên thay thế bất cứ điều gì trong set State:/Network/Service/PRIMARY_SERVICE_ID/DNSdòng hoặc tôi có thể sử dụng như vậy không? Các máy chủ DNS mới có nên hiển thị trong scutil --dnsđầu ra sau khi thay đổi không?
ssc

2
@ssc Chạy scutiltheo sau > listđể tìm khóa để thay thế PRIMARY_SERVICE_ID bằng.
J.Money

46

Bạn có thể sử dụng networksetup:

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

ví dụ: (có kết nối Sân bay sử dụng Máy chủ DNS của Google)

sudo networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4

Bạn có thể tìm ra tên của dịch vụ mạng bằng cách chạy networksetup -listallnetworkservices. Nó sẽ là 'Wi-Fi'.

Điều này giống như khi bạn chỉnh sửa các mục nhập trong Ngăn tùy chọn mạng trong Tùy chọn hệ thống, do đó, nó vẫn tồn tại trong suốt quá trình khởi động lại.

Bạn có thể đang gặp phải sự cố DNS trên Snow Leopard xảy ra khi các máy chủ DNS đặt hàng được yêu cầu thay đổi (xem câu hỏi 84144 ))


Wow, 84144 là vấn đề tôi gặp phải. Vẫn xử lý tất cả những điều này .... cảm ơn bạn rất nhiều!
Dan Rosenstark

6
Một lưu ý cho bất kỳ ai muốn xóa DNS, chỉ cần viết "trống" (không có dấu ngoặc kép) thay vì DNS:sudo networksetup -setdnsservers <networkservice> empty
jackJoe

14

Tôi không có đủ điểm để trả lời bài đăng của Chealion nhưng để thêm vào đó, tôi bắt đầu với việc liệt kê các giao diện

networksetup -listallnetworkservices

Khi bạn có giao diện bạn muốn thay đổi, bạn có thể thực hiện các thao tác bên dưới (Tôi đang sử dụng Wi-Fi nhưng bạn có thể thực hiện bất kỳ giao diện nào khác)

sudo networksetup -setdnsservers Wi-Fi empty
sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4
sudo killall -HUP mDNSResponder

Dòng đầu tiên ở trên sẽ làm trống các cài đặt DNS, sau đó theo dõi nó với các máy chủ DNS mà chúng tôi muốn sử dụng và xóa hoàn toàn bộ đệm DNS

Để xác minh thay đổi DNS, bạn có thể thực hiện việc này trước và sau hoặc đơn giản là sau

scutil --dns | grep 'nameserver\[[0-9]*\]'

Bất cứ ai đã vấp ngã trên trang này. Tôi có một Gist trên GitHub bây giờ sẽ giúp. gist.github.com/dkittell 432fe7b7422323fba546948b7448933a5
David Kittell

1

decv.conf không hoạt động trên OSX nữa. Có một thông báo ngay trên đầu tập tin đó như sau:

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

Ngoài ra, networksetup -listallnetworkserviceskhông liệt kê tất cả các giao diện VPN.

Đây là một cách để sử dụng scutil để nhắm mục tiêu vào giao diện phù hợp: 1. Tạo một tệp commands.txtbằng các lệnh của bạn cho công cụ scutil tương tác. ví dụ: nội dung cho giao diện bảo mật Pulse trong trường hợp của tôi:

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. Chạy scutil với các lệnh được dẫn vào. (Bạn cần sudo cho set)
sudo scutil < commands.txt

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.