Resolusi DNS Gagal melakukan ping dan ikal, tetapi tidak digali

11

Saya menjalankan DNSMasq sebagai server DNS lokal, jadi saya dapat menyelesaikannya *.local.pcfdev.io(seperti yang dibahas di sini Menggunakan PCF Dev Offline dengan Mac OS X ). Semuanya bekerja ketika saya mengatur segalanya.

Beberapa hari kemudian, setelah beberapa restart MacBook saya, sementara offline saya tidak bisa lagi menyelesaikan hal-hal seperti api.local.pcfdev.iomenggunakan curlatau ping. Namun, diglakukan hal yang benar.

$ dig api.local.pcfdev.io

; <<>> DiG 9.8.3-P1 <<>> api.local.pcfdev.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46877
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;api.local.pcfdev.io.       IN      A

;; ANSWER SECTION:
api.local.pcfdev.io.    0       IN      A       192.168.11.11

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Sep  6 10:17:44 2016
;; MSG SIZE  rcvd: 53

$ curl api.local.pcfdev.io
curl: (6) Could not resolve host: api.local.pcfdev.io

Saya sudah mencoba menambahkan -AlwaysAppendSearchDomainssebagai argumen untuk /usr/sbin/mDNSRespondermasuk /System/Library/LaunchDaemons/com.apple.mDNSResponder.plistdan memulai kembali mDNSResponder dengan launchctl, tetapi tidak berhasil.


PEMBARUAN 1

Pasti ada sesuatu yang mendengarkan pada IP lokal yang tepat:

$ nslookup api.local.pcfdev.io
Server:     127.0.0.1
Address:        127.0.0.1#53

Name:   api.local.pcfdev.io
Address: 192.168.11.11

$ ping api.local.pcfdev.io
ping: cannot resolve api.local.pcfdev.io: Unknown host

$ telnet 192.168.11.11 80
Trying 192.168.11.11...
Connected to 192.168.11.11.
Escape character is '^]'.

HTTP/1.1 400 Bad Request

Connection closed by foreign host.

PEMBARUAN 2

Setelah mencoba saran di bawah ini untuk menghapus semua server DNS dari Preferensi Jaringan kecuali 127.0.0.1, saya tidak dapat menyelesaikan apa pun. Saya berhasil mengeluarkan debug logging dari mDNSResponder:

mDNSResponder[91]:  74: DNSServiceCreateConnection START PID[32612](ping)
mDNSResponder[91]:  74: Error socket 75 created 00000000 00000001
mDNSResponder[91]:  74: DNSServiceQueryRecord(15000, 0, api.local.pcfdev.io., Addr) START PID[32612]()
mDNSResponder[91]:  74: Error socket 75 closed  00000000 00000001 (0)
mDNSResponder[91]:  74: DNSServiceQueryRecord(api.local.pcfdev.io., Addr) ADD    0 api.local.pcfdev.io. Addr
mDNSResponder[91]:  74: Cancel 00000000 00000001
mDNSResponder[91]:  74: DNSServiceQueryRecord(api.local.pcfdev.io., Addr) STOP PID[32612]()
mDNSResponder[91]:  74: DNSServiceCreateConnection STOP PID[32612](ping)

Saya juga mengamati bahwa seperti yang dijelaskan dalam jawaban yang diajukan, nslookupdan digtidak menyebabkan apa pun untuk dicatat mDNSResponder, tetapi alat lain ( ping, curl) melakukan.

Jadi sepertinya karena alasan apa pun dnsmasqtidak berfungsi (saya dapat membuat koneksi TCP 127.0.0.1:53) atau mDNSRespondertidak menggunakannya.


PEMBARUAN 3

etc/resolve.conftidak ada lagi ketika adaptor wifi saya aktif, tetapi saya tidak terhubung ke jaringan. Mungkinkah ini alasan mengapa alat CLI tidak menggunakan dnsmasqserver lokal ?

EngineerBetter_DJ
sumber
Apakah adaptor jaringan Anda rusak karena kebetulan? Jika Anda masuk ke 'Network' di System Preferences, apakah ada titik hijau di sebelah adaptor yang dikonfigurasi dnsmasq untuk digunakan?
mangga
Yah, aku di kereta tanpa wi-fi, mungkin begitu.
EngineerBetter_DJ
1
Secara khusus, apakah adaptor wifi dimatikan? Jika demikian, silakan coba lagi dengan adaptor wifi dihidupkan (meskipun itu mungkin tidak benar-benar terhubung ke internet). Agar pengaturan dapat berfungsi, dnsmasq harus menjadi server DNS pada antarmuka jaringan yang digunakan .
mangga
Terima kasih telah mencoba melacak ini. Saya juga berjuang dengan ini, tidak mengerti mengapa "curl foo: 8989" tidak dapat menemukan host tetapi "dig foo" bisa. Ya, "curl 172.20.0.17:8989" berfungsi dengan baik. Seperti Anda, saya memiliki DNS jaringan Wi-Fi yang diatur ke 127.0.0.1 (a dnsmasq berjalan dalam wadah buruh pelabuhan). FWIW dalam situasi saya saat ini, masalahnya khusus untuk jaringan wifi yang saya sambungkan - berfungsi dengan baik di hotspot pribadi saya, masalahnya ada pada wifi coffeeshop.
jamshid
Saya belum balik merekayasa program-program tersebut, tetapi harapan saya adalah mereka memanggil basis kode resolusi DNS yang sama sekali berbeda dan itulah mengapa Anda melihat kerusakan - beberapa menunjuk secara lokal, yang lain tidak. Saya mungkin akan menggali curlatau wgetatau mendapatkan mereka dalam instrumen / profiler / debugger dan melihat apa yang sebenarnya terjadi menyebabkan tidak bisa kesalahan tekad.
bmike

Jawaban:

12

Punya masalah yang sama. Saya pikir cache DNS lokal memiliki data buruk dari pengujian saya sebelumnya. Itu cepat diperbaiki oleh:

sudo killall -HUP mDNSResponder
cmcginty
sumber
1
Saya perhatikan itu pingdan digterkadang mengembalikan alamat IP yang berbeda (biasanya dengan DNS split horizon) dan perintah ini memperbaikinya. Apa akar masalahnya, saya tidak yakin, sayangnya.
James
7

menggali di satu sisi dan menggulung / ping di sisi lain mengambil data dari host yang berbeda:

gali query server DNS - dalam kasus Anda localhost Anda (127.0.0.1) - untuk entri basis data: alamat IP yang terkait dengan api.local.pcfdev.io FQDN. Tuan rumah itu sendiri tidak harus menjalankan atau bahkan ada sama sekali.

curl / ping mencoba menyelesaikan alamat IP dengan mDNSResponder atau dengan cara lain dan akhirnya beroperasi pada / berinteraksi dengan host jarak jauh. Jika host 192.168.11.11 tidak berjalan atau tidak ada sama sekali, keduanya akan gagal.

Sekarang, entah entri DNS salah (api.local.pcfdev.io memiliki IP lain dari 192.168.11.11) atau entri DNS sudah benar tetapi host 192.168.11.11 tidak berjalan.


Menambahkan -AlwaysAppendSearchDomains sebagai argumen ke / usr / sbin / mDNSResponder di /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist tidak disarankan. Sebagai gantinya Anda harus menambahkannya ke /Library/Preferences/com.apple.mDNSResponder.plist (sumber:) man mDNSResponder:

Untuk menyebabkan mDNSResponder dijalankan dengan argumen opsional ini ketika diluncurkan pada OS X 10.11 (El Capitan) dan yang lebih baru, setel selalu kunci Bappean AlwaysAppendSearchDomains atau NoMulticastAdvertisements menjadi true di /Library/Preferences/com.apple.mDNSResponder.plist dan reboot.

Dalam kasus Anda, sama sekali tidak perlu mengatur kunci ini, karena itu bukan penyebab masalah Anda.


Setelah menggali ke dalam VirtualBox, PCF Dev (gagal berulang kali dengan beberapa "kredensial salah" mencoba masuk ke VM) dan dnsmasq Saya sarankan untuk mengalihkan kueri DNS ke dnsmasq saja:

  • Dalam System Preferences> Network> Interface> Server DNS hapus semua server DNS kecuali 127.0.0.1 dan terapkan perubahannya. Anda juga dapat mengonfigurasi Lokasi kedua dengan hanya pengaturan 127.0.0.1 dan menyimpan server DNS Anda saat ini di konfigurasi lainnya.
  • tambahkan file /usr/local/etc/resolv.dnsmasq.conf dengan konten

    #use your preferred DNS servers here. In the example I use some Google name servers
    nameserver 8.8.8.8
    nameserver 8.8.4.4
    
  • tambahkan resolv-file=/usr/local/etc/resolv.dnsmasq.confpada baris ~ 46 dari /usr/local/etc/dnsmasq.conf
  • tambah atau pindahkan address=/.local.pcfdev.io/192.168.11.11di / ke baris ~ 80 dari /usr/local/etc/dnsmasq.conf
  • restart dnsmasq dengan:

    sudo launchctl stop homebrew.mxcl.dnsmasq
    sudo launchctl start homebrew.mxcl.dnsmasq
    
klanomath
sumber
Terima kasih telah meluangkan waktu untuk menjawab. Pasti ada sesuatu yang mendengarkan 192.168.11.11; entri DNS publik sebenarnya untuk *.local.pcfdev.ioselalu menunjuk kembali ke IP lokal yang sama, sehingga segera setelah saya terhubung ke inforwebs curlharus mendapatkan jawaban dari yang DNS server dan dapat mengetahui apa alamat IP untuk digunakan.
EngineerBetter_DJ
1
Sepertinya curl, pingdan binari lain saya ingin memukul hal ini menggunakan salah satu sarana mencari entri DNS (yang tidak menggunakan dnsmasqserver pada localhost), dan nslookupdan digmenggunakan cara lain. Saya kira saya perlu belajar lebih banyak tentang mDNSResponder!
EngineerBetter_DJ
@ EngineerBetter Apakah Anda memiliki entri lain di System Preferences> Network> Interface> DNS than 127.0.0.1? - Saya akan menginstal seluruh paket (VBox, PCF Dev dll) dan periksa ini ... Adakah konfigurasi khusus?
klanomath
Sekali lagi terima kasih telah meluangkan waktu untuk membantu saya dengan ini. Pertanyaan telah diperbarui, masih belum berhasil.
EngineerBetter_DJ
0

Butuh waktu lebih lama bagi saya untuk menyelesaikan ini daripada yang seharusnya. Setelah memulai ulang mDNSResolver puluhan kali seperti yang disarankan pada utas lainnya:

sudo killall -HUP mDNSResponder

Saya akhirnya mencoba sesuatu yang lain. Saya menonaktifkan Wi-Fi dan menghapus semua jaringan pilihan saya. Lalu saya membangun kembali koneksi Wi-Fi dan semuanya bekerja dengan baik:

  1. Menu Apple -> System Preferences -> Wi-Fi (di sebelah kiri)
  2. 'Matikan Wi-Fi' lalu pilih 'Lanjutan'
  3. Hapus koneksi Wi-Fi yang bermasalah dengan Anda (atau semuanya jika Anda mau). Lakukan ini dengan memilih jaringan Wi-Fi yang ingin Anda hapus dan menekan "-"
  4. Klik 'Terapkan' dan 'OK'
  5. Hidupkan Wi-Fi kembali.
  6. Pilih jaringan Wi-Fi Anda dan masuk lagi.

YMMV, tapi inilah yang akhirnya berhasil untuk saya. Mungkin seharusnya hal pertama yang saya coba.

Joel Griffiths
sumber