Ubah Server DNS Dari Terminal (atau skrip) di Mac OS X

29

Bagaimana saya bisa mengubah server DNS saya dari Terminal di Mac OS X? [Saya perlu ini karena DNS saya tidak berfungsi dengan benar dengan VPN saya. Terkadang menggunakan DNS untuk koneksi utama saya, dan terkadang menggunakan DNS yang ditentukan untuk VPN (yang seharusnya).]

Dan Rosenstark
sumber

Jawaban:

15

Anda dapat menggunakan secara scutilinteraktif dari terminal. Jalankan sudo scutildan jalankan perintah ini, menukar server DNS Anda jika diperlukan:

> buka
> d.init
> d.add ServerAddresses * 8.8.8.8 9.9.9.9
> atur Status: / Jaringan / Layanan / PRIMARY_SERVICE_ID / DNS
> berhenti

Alih-alih menggunakan 8.8.8.8dan 9.9.9.9menggunakan server DNS Anda.

Satu-satunya masalah adalah ini tidak persisten di seluruh reboot . Jika Anda ingin perubahan permanen, Anda ingin ncutil . Alasan mengedit /etc/resolv.conftidak cukup di versi OS X yang lebih baru adalah karena configd sekarang menggunakan database untuk menyimpan informasi pengaturan saat ini, yang dibaca aplikasi lain. Aplikasi tertentu masih akan membaca /etc/resolv.conf (host misalnya), meskipun itu tidak berlaku untuk semua aplikasi.

John T
sumber
2
8.8.8.8 adalah valid, meskipun. DNS Publik Google. 8.8.4.4 adalah yang kedua. :-)
Lupa Titik Koma
Saya tahu, saya menggunakannya :)
John T
1
Itu harus. Anda dapat menggunakannya scutil --dnsuntuk konfirmasi.
John T
2
Ini sepertinya tidak berfungsi pada Mac OSX 10.7.5 MBP saya, setidaknya tidak ketika dilakukan secara harfiah. Haruskah saya mengganti apa pun yang ada di set State:/Network/Service/PRIMARY_SERVICE_ID/DNSbaris atau dapatkah saya menggunakannya seperti itu? Haruskah server DNS baru muncul di scutil --dnsoutput setelah perubahan?
ssc
2
@ssc Jalankan scutildiikuti oleh > listuntuk menemukan kunci untuk menggantikan PRIMARY_SERVICE_ID dengan.
J.Money
46

Anda bisa menggunakan networksetup:

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

mis. (memiliki koneksi Bandara menggunakan Server DNS Google)

sudo networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4

Anda dapat mengetahui nama layanan jaringan dengan menjalankan networksetup -listallnetworkservices. Mungkin 'Wi-Fi'.

Ini sama seperti jika Anda mengedit entires di Network Preference Pane di System Preferences, jadi persisten di seluruh reboot.

Anda mungkin mengalami masalah DNS di Snow Leopard yang terjadi ketika urutan server DNS ditanyai perubahan (lihat pertanyaan 84144 ))

Chealion
sumber
Wow, 84144 adalah masalah yang saya alami. Masih memproses semua ini .... terima kasih banyak!
Dan Rosenstark
6
Satu catatan untuk siapa pun yang ingin menghapus DNS, cukup tulis "kosong" (tanpa tanda kutip) alih-alih DNS:sudo networksetup -setdnsservers <networkservice> empty
jackJoe
14

Saya tidak punya cukup poin untuk membalas posting Chealion tetapi untuk menambahkannya saya akan mulai dengan membuat daftar antarmuka

networksetup -listallnetworkservices

Setelah Anda memiliki antarmuka yang ingin Anda ubah, Anda dapat melakukan yang di bawah ini (Saya menggunakan Wi-Fi tetapi Anda dapat melakukan antarmuka lainnya)

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

Baris pertama di atas akan mengosongkan pengaturan DNS kemudian mengikutinya dengan server DNS yang ingin kami gunakan dan menghapus cache DNS.

Untuk memverifikasi perubahan DNS Anda dapat melakukan ini sebelum dan sesudah atau hanya setelah

scutil --dns | grep 'nameserver\[[0-9]*\]'
David Kittell
sumber
Siapa pun yang sengaja menemukan halaman ini. Saya memiliki inti pada GitHub sekarang yang seharusnya membantu. gist.github.com/dkittell/34fe7b7422323fba546948b7448933a5
David Kittell
1

resolv.conf tidak berfungsi di OSX lagi. Ada pemberitahuan tepat di atas file itu sebagai berikut:

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

Juga, networksetup -listallnetworkservicestidak mencantumkan semua antarmuka VPN.

Berikut adalah salah satu cara untuk menggunakan scutil untuk menargetkan antarmuka yang tepat: 1. Buat file commands.txtdengan perintah Anda untuk alat scutil interaktif. mis. isi untuk antarmuka aman Pulse dalam kasus saya:

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. Jalankan scutil dengan perintah yang disalurkan. (Anda perlu sudo untuk set)
sudo scutil < commands.txt
kikas
sumber