Atur server DNS pada OS X bahkan ketika tanpa koneksi internet

17

Saya telah menginstal, mengkonfigurasi server DNS (instance lokal Dnsmasq) yang memutuskan ke localhost seperti yang saya inginkan, semua OK.

Ketika saya offline, itu berhenti berfungsi, karena OS X mengosongkan konten resolv.conf dan mengabaikan upaya untuk mencerminkan perubahan dalam file ini.

Ada ide, bagaimana cara mengkonfigurasi DNS bahkan ketika sedang offline?

Masalah serupa (belum terselesaikan): http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites

Motivasi utama adalah kemudahan pengembangan aplikasi RoR yang menggunakan subdomain sebagai kunci akun. Dan Anda tidak dapat menggunakan 127.0.0.1 * .yourapp.local di / etc / hosts. Beberapa orang mendaftarkan domain smackaho.st dan DNS srt untuknya seperti .smackaho.st di 127.0.0.1 tetapi tetap saja, Anda tidak dapat menggunakannya saat Anda bekerja offline.

EDIT: mencoba perintah scutil, tetapi tampaknya Anda dapat mengubah DNS jika offline

CATATAN: saat semua antarmuka mati, Anda tidak dapat mengatur server DNS di Sebelumnya. panel.

daeltar
sumber
Terkait: dnsmasq tidak berfungsi tanpa koneksi internet di OS X Yosemite pada Super User (tanpa solusi tetapi beberapa referensi).
Arjan

Jawaban:

29

LIHAT PEMBARUAN DI BAWAH INI!

Saya juga menikmati menggunakan Dnsmasq di komputer lokal saya, dan saya juga mengalami masalah ini. Ini solusinya:

Dari man 5 resolver:

The configuration for a particular client may be read from a file
having the format described in this man page. These are at present
located by the system in the /etc/resolv.conf file and in the files
found in the /etc/resolver directory.

/etc/resolver/tidak ada secara default; Anda harus membuatnya sendiri.

Juga dari halaman manual:

domain
  Domain name associated with this resolver configuration. This
  option is normally not required by the Mac OS X DNS search system
  when the resolver configuration is read from a file in the
  /etc/resolver directory. In that case the file name is used as the
  domain name.

Jadi, jika Anda ingin semua kueri dns untuk domain tingkat atas devuntuk dialihkan ke server nama lokal, Anda akan:

# mkdir /etc/resolver
# echo 'nameserver 127.0.0.1' > /etc/resolver/dev

configdtidak mengubah file /etc/resolver/, jadi pengaturan ini akan bertahan melalui perubahan jaringan dan reboot.

PEMBARUAN 17 Juli 2012

Sayangnya, pada OS X Lion, resolver atas (seperti yang ditunjukkan oleh scutil --dns) menghilang ketika tidak ada antarmuka yang aktif:

# scutil --dns # Online
DNS configuration

resolver #1
  nameserver[0] : 127.0.0.1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

# scutil --dns # Offline
DNS configuration

resolver #1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

Perhatikan bahwa resolver # 1 kosong, tetapi entri nameserver turunan / etc / resolver tetap ada.

Ternyata karena Anda dapat menentukan domain resolver langsung di file / etc / resolver /, menentukan domain root Internet khusus . menyebabkan penciptaan entri resolver global yang terlihat seperti:

resolver #8
  nameserver[0] : 127.0.0.1

Sekarang semua permintaan DNS dirutekan ke localhost, bahkan ketika offline.

Tentu saja, Anda masih harus menyelesaikan domain yang Anda pilih sebagai 127.0.0.1 menggunakan sesuatu seperti opsi - alamat dnsmasq's:

# dnsmasq --address=/dev/127.0.0.1

Singkatnya:

  • Tetapkan semua server antarmuka jaringan Anda ke 127.0.0.1:
    networksetup -setdnsservers Ethernet 127.0.0.1
    networksetup -setdnsservers Wi-Fi 127.0.0.1
    ...
  • Buat file / etc / resolver / apa pun:
    nameserver 127.0.0.1
    domain.
  • Siapkan server DNS lokal dan berbahagialah.

lih. http://opensource.apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c

senjata
sumber
Itulah yang digunakan pow ( pow.cx ).
daeltar
tapi sayangnya itu tidak berhasil - github.com/37signals/pow/issues/104
daeltar
3
@guns apakah solusi ini masih berfungsi di yosemite? dnsmasq bekerja dengan baik untuk saya secara offline hingga saya ditingkatkan. Sekarang yang saya dapatkan ketika saya menjalankan scutil --dnsketika tidak terhubung ke internet yang saya dapatkan adalah No DNS configuration available saya mengikuti instruksi Anda di atas tetapi tidak berhasil
MatthewLee
1
@ MatthewLee, ya Anda benar, sepertinya satu-satunya solusi adalah menambahkan entri dalam file hosts.
Lenciel
1
Adakah yang menemukan solusi untuk Yosemite?
jmagnusson
2

Mengapa tidak membuat entri di / etc / hosts sebagai gantinya? Saya mengalami kesulitan memikirkan situasi di mana Anda harus benar-benar menjalankan server DNS yang penuh sesak nafas. Saya menggunakan entri file host sepanjang waktu untuk menyelesaikan hal-hal seperti ini di Mac saya.

Penyelesai dalam OS X berfungsi berbeda dari yang ada di Linux atau Unix lainnya. Ini mungkin bagian dari apa yang menyebabkan Anda bersedih. Seperti misalnya ia memiliki preferensi untuk metode resolusi mana yang digunakan pertama dan itu cache hasil semua pertanyaan untuk jangka waktu tertentu.

Sudahkah Anda menambahkan server DNS ke antarmuka di panel preferensi Jaringan? Ini harus memastikan bahwa resolver menggunakan server itu untuk permintaannya jika ia memutuskan untuk mencari entri DNS.


sumber
Salah satu alasan untuk menggunakan forwarder DNS pada mesin klien adalah untuk mempertahankan daftar hitam besar domain iklan / malware tanpa menderita penalti kinerja daemon resolver yang mengambil file host yang sekarang membengkak pada setiap permintaan. Kelebihan dari pendekatan ini meskipun, dnsmasq memuat / etc / hosts ke memori di mana waktu pencarian akan sangat kecil. Juga, jika Anda melakukan pengembangan web, ini memungkinkan Anda untuk menghindari gangguan kecil menambahkan domain lokal untuk setiap situs yang sedang Anda kerjakan.
meriam
1

(menjawab b / c saya belum bisa berkomentar ...)

Bagaimana Anda akan offline?

(jawaban terbaik yang saya dapatkan saat ini)

# man -S 5 resolver
 .
 .
 .
 Note that the /etc/resolv.conf file,
 which contains configuration for the default (or "primary") DNS resolver
 client, is maintained automatically by Mac OS X and should not be edited manu-
 ally.  Changes to the DNS configuration should be made by using the Network
 Preferences panel.

Jadi, Anda harus dapat memasukkan sesuatu di UI, dan itu harus tetap. Saya telah melakukan ini beberapa kali ketika saya tidak suka server DNS yang disediakan oleh server DHCP lokal saya.

benc
sumber
Mengubah konfigurasi DNS di NetworkPreferences mengubah file /etc/resolv.conf.
Fabian Zeindl
0

Apakah OSX memiliki file konfigurasi /etc/dhcp3/dhclient.conf yang dimiliki oleh konfigurasi klien Linux / UNIX DHCP normal?

Jika demikian, harus memiliki garis yang dapat Anda batalkan komentarnya

prepend domain-name-servers 127.0.0.1;

agar klien DHCP selalu menambahkan baris itu ke resolv.conf Anda

Kevin Kuphal
sumber
Menambahkan ke resolv.conf tidak membantu di OS X. Konten resolv.conf dihasilkan dan itu sendiri adalah symlink di /var/run/resolv.conf dan bahkan ketika saya mengubah /var/run/resolv.conf itu tidak mencerminkan perubahan .
daeltar
0

Coba tambahkan layanan ethernet kedua yang dikonfigurasi dengan alamat statis dan 127.0.0.1 sebagai server DNS Anda. Atau, tambahkan Lokasi jaringan yang menetapkan server DNS Anda ke 127.0.0.1. Kedua perubahan ini akan dibuat di "System Preferences" di bawah panel "Network".

Josh
sumber
-2

Mungkin membantu untuk hanya menempatkan

127.0.0.1       localhost

ke / etc / hosts, jadi tidak perlu resolver untuk menemukan localhost.

Sven
sumber
1
Saya membutuhkannya untuk subdomain, jadi ini tidak, tidak.
daeltar