Я использую DNSMasq в качестве локального DNS-сервера, поэтому могу решить *.local.pcfdev.io
(как обсуждено здесь Использование PCF Dev Offline с Mac OS X ). Все работало, когда я впервые все настраивал.
Пару дней спустя, после нескольких перезагрузок моего MacBook, в то время как в автономном режиме я больше не могу разрешать такие вещи, как api.local.pcfdev.io
использование curl
или ping
. Однако dig
поступает правильно.
$ 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
Я попытался добавить -AlwaysAppendSearchDomains
в качестве аргумента /usr/sbin/mDNSResponder
в /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
и перезапустил mDNSResponder с launchctl
, но безрезультатно.
ОБНОВЛЕНИЕ 1
Определенно что-то прослушивается на правильном локальном IP:
$ 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.
ОБНОВЛЕНИЕ 2
После попытки предложенного ниже предложения об удалении всех DNS-серверов из сетевых настроек, кроме как 127.0.0.1
, я ничего не могу решить. Мне удалось получить некоторые отладочные журналы 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)
Я также заметил это, как объяснено в предложенном ответе, nslookup
и dig
не вызывал ничего, чтобы регистрироваться mDNSResponder
, но другие инструменты ( ping
, curl
) делают.
Похоже, по какой-то причине dnsmasq
он не работает (я могу установить TCP-соединение 127.0.0.1:53
) или mDNSResponder
не использует его.
ОБНОВЛЕНИЕ 3
etc/resolve.conf
перестает существовать, когда мой адаптер Wi-Fi активен, но я не подключен к сети. Может быть, поэтому инструменты CLI не используют локальный dnsmasq
сервер?
curl
илиwget
или получить их в инструменты / профилировщика / отладчик и посмотреть , что на самом деле происходит , чтобы вызвать не может ошибка решительность.Ответы:
Была такая же проблема. Я думаю, что локальный кэш DNS имел плохие данные из моего предыдущего тестирования. Это было быстро исправлено:
источник
ping
иdig
иногда возвращаю разные IP-адреса (обычно с разделенным горизонтом DNS), и эта команда исправляет это. Какова основная причина, я не уверен, к сожалению.dig с одной стороны и curl / ping с другой стороны получают данные с разных хостов:
dig запрашивает DNS-сервер - в вашем случае ваш localhost (127.0.0.1) - для записи базы данных: IP-адрес, связанный с полным доменным именем api.local.pcfdev.io. Сам хост не должен запускаться или вообще существовать.
curl / ping пытается разрешить IP-адрес с помощью mDNSResponder или другими способами и, наконец, работать на / взаимодействовать с удаленным хостом. Если хост 192.168.11.11 не запускается или не существует вообще, оба не удастся.
Теперь либо запись DNS неверна (api.local.pcfdev.io имеет другой IP-адрес, чем 192.168.11.11), либо запись DNS верна, но хост 192.168.11.11 не работает.
Добавление -AlwaysAppendSearchDomains в качестве аргумента для / usr / sbin / mDNSResponder в /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist не рекомендуется. Вместо этого вы должны добавить его в /Library/Preferences/com.apple.mDNSResponder.plist (source:)
man mDNSResponder
:В вашем случае совсем не обязательно устанавливать этот ключ, потому что это не причина вашей проблемы.
После копания в VirtualBox, PCF Dev (неоднократный сбой с некоторыми «неправильными учетными данными» при попытке войти в виртуальную машину) и dnsmasq я рекомендую передавать DNS-запросы только в dnsmasq:
добавьте файл /usr/local/etc/resolv.dnsmasq.conf с содержимым
resolv-file=/usr/local/etc/resolv.dnsmasq.conf
в строку ~ 46 файла /usr/local/etc/dnsmasq.confaddress=/.local.pcfdev.io/192.168.11.11
в / на строку ~ 80 из /usr/local/etc/dnsmasq.confперезапустите dnsmasq с помощью:
источник
192.168.11.11
; фактическая публичная запись DNS*.local.pcfdev.io
всегда указывает на один и тот же локальный IP-адрес, поэтому, как только я подключаюсь к информационным сетям, яcurl
должен получить ответ от этого DNS-сервера и определить, какой IP-адрес использовать.curl
,ping
и другие исполняемые файлы , я хочу , чтобы поразить эту вещь использует одно средство из отрываясь записей DNS (который не используетсяdnsmasq
сервером на локальном хосте), а такжеnslookup
иdig
используют другие средства. Я думаю, мне нужно узнать больше о mDNSResponder!Мне потребовалось гораздо больше времени, чтобы решить эту проблему, чем следовало бы. После перезапуска mDNSResolver десятки раз, как рекомендуется для других потоков:
Я наконец попробовал что-то еще. Я отключил Wi-Fi и удалил все мои любимые сети. Затем я восстановил соединение Wi-Fi, и все заработало:
YMMV, но это то, что, наконец, сработало для меня. Вероятно, это должно было быть первым, что я попробовал.
источник