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.io
menggunakan curl
atau ping
. Namun, dig
lakukan 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 -AlwaysAppendSearchDomains
sebagai argumen untuk /usr/sbin/mDNSResponder
masuk /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
dan 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, nslookup
dan dig
tidak menyebabkan apa pun untuk dicatat mDNSResponder
, tetapi alat lain ( ping
, curl
) melakukan.
Jadi sepertinya karena alasan apa pun dnsmasq
tidak berfungsi (saya dapat membuat koneksi TCP 127.0.0.1:53
) atau mDNSResponder
tidak menggunakannya.
PEMBARUAN 3
etc/resolve.conf
tidak ada lagi ketika adaptor wifi saya aktif, tetapi saya tidak terhubung ke jaringan. Mungkinkah ini alasan mengapa alat CLI tidak menggunakan dnsmasq
server lokal ?
curl
atauwget
atau mendapatkan mereka dalam instrumen / profiler / debugger dan melihat apa yang sebenarnya terjadi menyebabkan tidak bisa kesalahan tekad.Jawaban:
Punya masalah yang sama. Saya pikir cache DNS lokal memiliki data buruk dari pengujian saya sebelumnya. Itu cepat diperbaiki oleh:
sumber
ping
dandig
terkadang mengembalikan alamat IP yang berbeda (biasanya dengan DNS split horizon) dan perintah ini memperbaikinya. Apa akar masalahnya, saya tidak yakin, sayangnya.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
: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:
tambahkan file /usr/local/etc/resolv.dnsmasq.conf dengan konten
resolv-file=/usr/local/etc/resolv.dnsmasq.conf
pada baris ~ 46 dari /usr/local/etc/dnsmasq.confaddress=/.local.pcfdev.io/192.168.11.11
di / ke baris ~ 80 dari /usr/local/etc/dnsmasq.confrestart dnsmasq dengan:
sumber
192.168.11.11
; entri DNS publik sebenarnya untuk*.local.pcfdev.io
selalu menunjuk kembali ke IP lokal yang sama, sehingga segera setelah saya terhubung ke inforwebscurl
harus mendapatkan jawaban dari yang DNS server dan dapat mengetahui apa alamat IP untuk digunakan.curl
,ping
dan binari lain saya ingin memukul hal ini menggunakan salah satu sarana mencari entri DNS (yang tidak menggunakandnsmasq
server pada localhost), dannslookup
dandig
menggunakan cara lain. Saya kira saya perlu belajar lebih banyak tentang mDNSResponder!Butuh waktu lebih lama bagi saya untuk menyelesaikan ini daripada yang seharusnya. Setelah memulai ulang mDNSResolver puluhan kali seperti yang disarankan pada utas lainnya:
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:
YMMV, tapi inilah yang akhirnya berhasil untuk saya. Mungkin seharusnya hal pertama yang saya coba.
sumber