Bagaimana konfigurasi pencarian DNS untuk OSX Mountain Lion?

33

Jika saya menggunakan resolv.conf, saya melihat pesan ini:

#
# Mac OS X Notice
#
# This file is not used by the host name and address resolution
# or the DNS query routing mechanisms used by most processes on
# this Mac OS X system.
#
# This file is automatically generated.
#

Saya mencoba menambahkan entri DNS. Saya mengedit file host saya dan menghapus cache dns, tetapi nama itu tidak menyelesaikan jika saya gunakan host servername. Saya pikir mungkin hostitu tidak dikonfigurasikan untuk melihat hostsfile. Bagaimana saya bisa mendapatkan entri baru saya untuk menyelesaikan, dan apa yang OSX gunakan jika tidak resolv.conf?

Ben Flynn
sumber

Jawaban:

17

Alat host tidak hanya menyelesaikan nama (seperti pada, menggunakan penyelesai nama sistem) tetapi sebenarnya menanyakan server dns (seperti pada, mengirim paket ke udp / 53 dan mungkin tcp / 53): ia tidak tahu atau tidak menggunakan hostsfile lokal .

Jika Anda ingin menguji resolver sistem operasi (seperti pada, gethostbyname () dan fungsi libc serupa), Anda dapat mencoba melakukan ping ke nama yang Anda tambahkan /etc/hostsdan itu akan menghormati apa yang Anda masukkan ke file itu.

Juga, karena Anda sudah mengetahui pencarian DNS pada Mac OSX tidak digunakan /etc/resolv.conf, dan cara yang benar untuk mengkonfigurasi server DNS yang ditanyai ada di gui Pengaturan Jaringan dan / atau networksetupalat baris perintah. Jujur saya tidak tahu apakah Anda dapat mengkonfigurasi urutan sumber yang dicoba, tetapi perilaku standar adalah mencoba /etc/hoststerlebih dahulu dan dns server setelah itu.

Luke404
sumber
1
Saya menemukan bungkus perl untuk getaddrinfo: search.cpan.org/~pevans/Socket-GetAddrInfo-0.22
Ben Flynn
26

Penyelesai DNS dapat ditambahkan di OS X melalui networksetupperintah:

sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4

Masukkan nama koneksi jaringan yang sesuai. Penyelesai ini akan muncul di resolv.conf karena dihasilkan secara otomatis, tetapi penyuntingan langsung ke resolv.conf tidak akan menghasilkan penyelesai yang digunakan. Saya berasumsi resolver disimpan dalam plist di suatu tempat; Saya akan mencari dan melaporkan kembali.

Diedit untuk menambahkan: Sepertinya file plist XML yang menyimpan server DNS /Library/Preferences/SystemConfiguration/preferences.plist.

File host di / private / etc / hosts harus berfungsi untuk memaksa resolusi untuk nama-nama tertentu (/ etc adalah symlink ke / private / etc). Bisakah Anda memverifikasi sintaks Anda dan bahwa Anda mengedit file yang benar?

matahari
sumber
Jadi saya bisa menggunakan perintah ini untuk menambahkan file host?
Ben Flynn
Anda tidak bisa, dan Anda tidak perlu
Luke404
Tidak, jika Anda ingin menambahkan nama ke file host, tambahkan saja secara langsung. File host diperiksa terlebih dahulu ketika menyelesaikan nama, diikuti oleh cache resolusi lokal dan kemudian server DNS Anda yang dikonfigurasi. Menggunakan perintah "host" untuk mengujinya meskipun tidak akan memeriksa file host lokal. Satu cara mudah untuk menguji adalah dengan menggunakan utilitas jaringan seperti ping.
phoebus
1
Kadang-kadang antarmuka mendapatkan nama konyol, untuk mendapatkan nama yang tepat yang Anda butuhkan, Anda juga dapat melakukannya networksetup -listallnetworkservices . Jika itu berisi spasi, Anda perlu mengutip seluruh nama, yaitu:sudo networksetup -setdnsservers 'white space' 8.8.8.8 8.8.4.4
Marcin
2
Apakah mungkin untuk mengonfigurasi resolver untuk menggunakan port yang berbeda dari 53?
Rune FS