Valet установлен для laravel, но почему dnsmasq не разрешает правильно? - PullRequest
2 голосов
/ 16 мая 2019

Я установил камердинер для laravel, используя homebrew на моем Mac (Mojave).В соответствии с документацией laravel теперь я должен иметь возможность пинговать * .test, но когда я продолжаю получать следующую ошибку:

ping: не удается разрешить foobar.test: Неизвестный хост

Это похоже на проблему с dnsmasq.Я следовал всем советам здесь , но, похоже, ничего не помогло.

# Content of '/Users/<username>/.config/valet/dnsmasq.conf'

address=/.test/127.0.0.1
listen-address=127.0.0.1

Я вижу, что распознаватель для .test настроен нормально.Ниже приведен вывод scutil --dns

DNS configuration

resolver #1
  search domain[0] : default
  nameserver[0] : 192.168.1.1
  if_index : 6 (en0)
  flags    : Request A records
  reach    : 0x00020002 (Reachable,Directly Reachable Address)

resolver #2
  domain   : local
  options  : mdns
  timeout  : 5
  flags    : Request A records
  reach    : 0x00000000 (Not Reachable)
  order    : 300000

resolver #3
  domain   : 254.169.in-addr.arpa
  options  : mdns
  timeout  : 5
  flags    : Request A records
  reach    : 0x00000000 (Not Reachable)
  order    : 300200

resolver #4
  domain   : 8.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  flags    : Request A records
  reach    : 0x00000000 (Not Reachable)
  order    : 300400

resolver #5
  domain   : 9.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  flags    : Request A records
  reach    : 0x00000000 (Not Reachable)
  order    : 300600

resolver #6
  domain   : a.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  flags    : Request A records
  reach    : 0x00000000 (Not Reachable)
  order    : 300800

resolver #7
  domain   : b.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  flags    : Request A records
  reach    : 0x00000000 (Not Reachable)
  order    : 301000

resolver #8
  domain   : test
  nameserver[0] : 127.0.0.1
  flags    : Request A records, Request AAAA records
  reach    : 0x00030002 (Reachable,Local Address,Directly Reachable Address)

DNS configuration (for scoped queries)

resolver #1
  search domain[0] : default
  nameserver[0] : 192.168.1.1
  if_index : 6 (en0)
  flags    : Scoped, Request A records
  reach    : 0x00020002 (Reachable,Directly Reachable Address)

Я также вижу, что dnsmasq работает нормально.Вот вывод из brew services list:

dnsmasq started root /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
httpd   started root /Library/LaunchDaemons/homebrew.mxcl.httpd.plist
mysql   started root /Library/LaunchDaemons/homebrew.mxcl.mysql.plist
nginx   started root /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
php     started root /Library/LaunchDaemons/homebrew.mxcl.php.plist
php@7.1 started root /Library/LaunchDaemons/homebrew.mxcl.php@7.1.plist
php@7.2 started root /Library/LaunchDaemons/homebrew.mxcl.php@7.2.plist

Другие вещи, которые я пробовал:

  • Отключение брандмауэра в случае, если он блокировал запрос.
  • Перезапуск dnsmasq (несколько раз) с помощью: sudo brew services restart dnsmasq
  • Переустановка камердинера с использованием valet install
  • Проверка отсутствия конфликтующих путей в / etc / hosts

Кто-нибудь получил какие-либо другие предложения?

РЕДАКТИРОВАТЬ: Вывод sudo brew services restart --verbose dnsmasq

`Stopping `dnsmasq`... (might take a while)
==> Successfully stopped `dnsmasq` (label: homebrew.mxcl.dnsmasq)
==> Generated plist for dnsmasq:
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   <plist version="1.0">
     <dict>
       <key>Label</key>
       <string>homebrew.mxcl.dnsmasq</string>
       <key>ProgramArguments</key>
       <array>
         <string>/usr/local/opt/dnsmasq/sbin/dnsmasq</string>
         <string>--keep-in-foreground</string>
         <string>-C</string>
         <string>/usr/local/etc/dnsmasq.conf</string>
       </array>
       <key>RunAtLoad</key>
       <true/>
       <key>KeepAlive</key>
       <true/>
     </dict>
   </plist>


/bin/launchctl enable system/homebrew.mxcl.dnsmasq
/bin/launchctl bootstrap system /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
==> Successfully started `dnsmasq` (label: homebrew.mxcl.dnsmasq)

РЕДАКТИРОВАТЬ 2:

Я думаю, что я где-то получаюсейчас.Я зарегистрировался в console.app для dnsmasq и увидел сообщение об ошибке:

failed to open pidfile /usr/local/var/run/dnsmasq/dnsmasq.pid: No such file or directory

..., которое привело меня сюда .Оказывается, я пропустил папку dnsmasq в cd /usr/local/var/run/, поэтому я запустил sudo mkdir dnsmasq, и теперь пинг фактически возвращает следующий ответ:

PING foobar.test (127.0.0.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
Request timeout for icmp_seq 4
Request timeout for icmp_seq 5
Request timeout for icmp_seq 6
Request timeout for icmp_seq 7
...

Я не уверен, что это значит или нетсейчас работает.

Когда я захожу в foobar.test в своем браузере, я получаю сообщение This site can’t be reached, хотя я создал проект с таким именем и связал его, используя valet link foobar.

РЕДАКТИРОВАТЬ 3:

У меня теперь пинг работает нормально, отключив стелс-режим (как описано здесь ), но я все равно получаю This site can’t be reached при переходе к foobar.test в моем браузере.

Я получаю следующую ошибку при запуске curl foobar.test --verbose

* Rebuilt URL to: foobar.test/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to foobar.test (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: foobar.test
> User-Agent: curl/7.54.0
> Accept: */*
>
* Recv failure: Connection reset by peer
* Closing connection 0
curl: (56) Recv failure: Connection reset by peer

РЕДАКТИРОВАТЬ 4

Вывод cat /usr/local/etc/dnsmasq.conf | grep -i interface:

# 10.1.2.3 to 192.168.1.1 port 55 (there must be an interface with that
# specified interfaces (and the loopback) give the name of the
# interface (eg eth0) here.
# Repeat the line for more than one interface.
#interface=
# Or you can specify which interface _not_ to listen on
#except-interface=
# If you want dnsmasq to provide only DNS service on an interface,
#no-dhcp-interface=
# even when it is listening on only some interfaces. It then discards
# working even when interfaces come and go and change address. If you
# want dnsmasq to really bind only the interfaces it is listening on,
#bind-interfaces
# that these two Ethernet interfaces will never be in use at the same
# Always give the InfiniBand interface with hardware address

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Убедитесь, что у вас есть /etc/resolver/test файл, содержащий эту строку: nameserver 127.0.0.1

Кроме того, отредактируйте файл /usr/local/etc/dnsmasq.conf, раскомментировав и изменив эту строку:

#interface=

к этому:

interface=lo0

Затем перезапустите службу с помощью sudo brew services restart dnsmasq и попробуйте снова.

Идея состоит в том, что во время установки демон dnsmasq мог быть привязан к какому-либо интерфейсу, который больше не доступен. Изменяя его на lo0, вы заставляете его обслуживать только ваш петлевой интерфейс, который всегда присутствует. И я полагаю, вам не нужно, чтобы он работал на любом из ваших внешних интерфейсов, так как я полагаю, что это все для целей разработки. Тем не менее, если вы это сделаете, вы можете добавить больше строк интерфейса, как это:

interface=lo0
interface=en0
0 голосов
/ 10 июня 2019

Убедитесь, что в нижней части вашего dnsmasq.conf есть следующая строка, указывающая на вашу конфигурацию Valet:

conf-file=/Users/urbycoz/.config/valet/dnsmasq.conf
...