Выяснить, что блокирует HTTP-запрос в macOS Mojave?

У меня есть простой http-сервер, работающий с index.html, который я пытаюсь обслуживать на другом устройстве по локальной сети. Я могу получить доступ к веб-сайту на хост-компьютере, используя localhost, и он записывается как успешный HTTP 200. Хотя, когда я пытаюсь получить к нему доступ с другого клиентского устройства, http-сервер не показывает никаких признаков запроса, и время ожидания устройства истекло.

Я считаю, что брандмауэр на моем Mac блокирует соединение, но я слышал, что на Mac есть несколько брандмауэров, и они могут изменять его с каждым обновлением ОС.

например

Итак, сейчас я использую macOS Mojave, и у меня очень мало опыта использования сетевых инструментов для проверки того, что происходит в моей сети (поэтому, пожалуйста, простите мое невежество).

  • Какие брандмауэры использует macOS Mojave?

  • Где я могу найти журналы (чтобы я мог видеть, был ли отклонен http-запрос моего другого устройства)?

  • Есть ли что-то еще, о чем я могу не знать, что может остановить мой http-запрос? Если да, то какие инструменты я могу использовать для проверки?

--------- Дополнительная информация ---------

  • У меня есть сервер разработки угловых веб-пакетов, обслуживающий его обычный порт 4200, а затем я использую ghostlab для прокси-сервера через порт 8005 для моих внешних устройств. (Однако это перестало работать, поэтому я сделал следующее, чтобы узнать, могу ли я получить доступ к папке dist на веб-сайте другим способом)
  • Я использовал http-сервер пакета node и обслуживал тестовый веб-сайт только с index.html. Он обслуживает как http://127.0.0.1:8080 , так и IP-адрес локальной сети http://192.168.0.28:8080 .
  • Я могу связаться с 192.168.0.28:8080 локально в браузере Chrome на хост-компьютере, но на клиентском устройстве iOS с помощью браузера Safari он никогда не получает ответа. Так что я думаю, что брандмауэр блокирует его где-то в будущем. Хотя возможность подтверждения через appfirewall.log (который, похоже, исчез) или подобные места, о которых я могу не знать, на что я должен смотреть, - это то, что я пытаюсь выяснить.

---- Дальнейшие детали -----

Спасибо, Франциск, за ответ.

Ниже показана моя таблица маршрутизации

Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            192.168.0.1        UGSc          147        0     en0
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              9   277366     lo0
169.254            link#5             UCS             0        0     en0      !
192.168.0          link#5             UCS             3        0     en0      !
192.168.0.1/32     link#5             UCS             2        0     en0      !
192.168.0.1        b0:c2:87:51:37:e7  UHLWIir        58       52     en0    583
192.168.0.2        link#5             UHLWIi          1      152     en0      !
192.168.0.13       0:71:47:32:79:99   UHLWI           0       81     en0    285
192.168.0.19/32    link#5             UCS             1        0     en0      !
192.168.0.19       80:e6:50:a:23:64   UHLWI           0        2     lo0
192.168.0.255      ff:ff:ff:ff:ff:ff  UHLWbI          0        1     en0      !
224.0.0/4          link#5             UmCS            3        0     en0      !
224.0.0.251        1:0:5e:0:0:fb      UHmLWI          0        0     en0
224.6.7.8          1:0:5e:6:7:8       UHmLWI          0        8     en0
239.255.255.250    1:0:5e:7f:ff:fa    UHmLWI          0      149     en0
255.255.255.255/32 link#5             UCS             1        0     en0      !
255.255.255.255    ff:ff:ff:ff:ff:ff  UHLWbI          0        1     en0      !

Internet6:
Destination                             Gateway                         Flags         Netif Expire
default                                 fe80::b2c2:87ff:fe51:37e7%en0   UGc             en0
default                                 fe80::%utun0                    UGcI          utun0
default                                 fe80::%utun1                    UGcI          utun1
::1                                     ::1                             UHL             lo0
2606:6000:609b:1200::/64                link#5                          UC              en0
2606:6000:609b:1200::4                  80:e6:50:a:23:64                UHL             lo0
2606:6000:609b:1200:14c1:e8b6:1ff0:8ef1 80:e6:50:a:23:64                UHL             lo0
2606:6000:609b:1200:81e5:bdd5:155e:a21d 80:e6:50:a:23:64                UHL             lo0
fe80::%lo0/64                           fe80::1%lo0                     UcI             lo0
fe80::1%lo0                             link#1                          UHLI            lo0
fe80::%en0/64                           link#5                          UCI             en0
fe80::14d6:6308:5edd:9f41%en0           80:e6:50:a:23:64                UHLI            lo0
fe80::b2c2:87ff:fe51:37e7%en0           b0:c2:87:51:37:e7               UHLWIir         en0
fe80::%awdl0/64                         link#7                          UCI           awdl0
fe80::74f1:5eff:fefa:3028%awdl0         76:f1:5e:fa:30:28               UHLI            lo0
fe80::%utun0/64                         fe80::1d55:b5dc:3cd5:864%utun0  UcI           utun0
fe80::1d55:b5dc:3cd5:864%utun0          link#11                         UHLI            lo0
fe80::%utun1/64                         fe80::df6e:b1c3:74ea:f75c%utun1 UcI           utun1
fe80::df6e:b1c3:74ea:f75c%utun1         link#12                         UHLI            lo0
ff01::%lo0/32                           ::1                             UmCI            lo0
ff01::%en0/32                           link#5                          UmCI            en0
ff01::%awdl0/32                         link#7                          UmCI          awdl0
ff01::%utun0/32                         fe80::1d55:b5dc:3cd5:864%utun0  UmCI          utun0
ff01::%utun1/32                         fe80::df6e:b1c3:74ea:f75c%utun1 UmCI          utun1
ff02::%lo0/32                           ::1                             UmCI            lo0
ff02::%en0/32                           link#5                          UmCI            en0
ff02::%awdl0/32                         link#7                          UmCI          awdl0
ff02::%utun0/32                         fe80::1d55:b5dc:3cd5:864%utun0  UmCI          utun0
ff02::%utun1/32                         fe80::df6e:b1c3:74ea:f75c%utun1 UmCI          utun1

-- ПФ --

pfctl -vvv -s all

=>

No ALTQ support in kernel
ALTQ related functions disabled
TRANSLATION RULES:
@0 nat-anchor "com.apple/*" all
  [ Owner : nil          Priority : 0     ]
  [ Evaluations: 1003456   Packets: 0         Bytes: 0           States: 0     ]
  [ Inserted: uid 0 pid 89 ]
@0 rdr-anchor "com.apple/*" all
  [ Owner : nil          Priority : 0     ]
  [ Evaluations: 2053469   Packets: 0         Bytes: 0           States: 0     ]
  [ Inserted: uid 0 pid 89 ]

FILTER RULES:
@0 scrub-anchor "com.apple/*" all fragment reassemble
  [ Owner : nil          Priority : 0     ]
  [ Evaluations: 3848799   Packets: 0         Bytes: 0           States: 0     ]
  [ Inserted: uid 0 pid 89 ]
@0 anchor "com.apple/*" all
  [ Owner : nil          Priority : 0     ]
  [ Evaluations: 2053469   Packets: 0         Bytes: 0           States: 0     ]
  [ Inserted: uid 0 pid 89 ]

DUMMYNET RULES:
@0 dummynet-anchor "com.apple/*" all
  [ Owner : nil          Priority : 0     ]
  [ Evaluations: 0         Packets: 0         Bytes: 0           States: 0     ]
  [ Inserted: uid 0 pid 89 ]

INFO:
Status: Enabled for 1 days 15:36:27           Debug: Urgent

Hostid:   0x995c6c3b
Checksum: 0x79872649e3817f920d20509d6509b712

State Table                          Total             Rate
  current entries                        0
  searches                         2551721           17.9/s
  inserts                                0            0.0/s
  removals                               0            0.0/s
Source Tracking Table
  current entries                        0
  searches                               0            0.0/s
  inserts                                0            0.0/s
  removals                               0            0.0/s
Counters
  match                            2053469           14.4/s
  bad-offset                             0            0.0/s
  fragment                               0            0.0/s
  short                                  0            0.0/s
  normalize                              0            0.0/s
  memory                                 0            0.0/s
  bad-timestamp                          0            0.0/s
  congestion                             0            0.0/s
  ip-option                           1451            0.0/s
  proto-cksum                            0            0.0/s
  state-mismatch                         0            0.0/s
  state-insert                           0            0.0/s
  state-limit                            0            0.0/s
  src-limit                              0            0.0/s
  synproxy                               0            0.0/s
  dummynet                               0            0.0/s
Limit Counters
  max states per rule                    0            0.0/s
  max-src-states                         0            0.0/s
  max-src-nodes                          0            0.0/s
  max-src-conn                           0            0.0/s
  max-src-conn-rate                      0            0.0/s
  overload table insertion               0            0.0/s
  overload flush states                  0            0.0/s

TIMEOUTS:
tcp.first                   120s
tcp.opening                  30s
tcp.established           86400s
tcp.closing                 900s
tcp.finwait                  45s
tcp.closed                   90s
tcp.tsdiff                   30s
udp.first                    60s
udp.single                   30s
udp.multiple                 60s
icmp.first                   20s
icmp.error                   10s
grev1.first                 120s
grev1.initiating             30s
grev1.estblished           1800s
esp.first                   120s
esp.estblished              900s
other.first                  60s
other.single                 30s
other.multiple               60s
frag                         30s
interval                     10s
adaptive.start             6000 states
adaptive.end              12000 states
src.track                     0s

LIMITS:
states        hard limit    10000
app-states    hard limit    10000
src-nodes     hard limit    10000
frags         hard limit     5000
tables        hard limit     1000
table-entries hard limit   200000

OS FINGERPRINTS:
696 fingerprints loaded

Примечания к интерфейсу:

Я не смог выполнить полную команду для

for DUDE in $( ifconfig -lu ); do ifconfig ${DUDE} | grep -q “192.168.0.19” && echo ${DUDE}; 

Команды, которые выполнялись с веб-сервером node http на порту 8080

ifconfig ${DUDE}

=>

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
    inet 127.0.0.1 netmask 0xff000000
    inet6 ::1 prefixlen 128
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
    nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC20: flags=0<> mtu 0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 80:e6:50:0a:23:64
    inet6 fe80::14d6:6308:5edd:9f41%en0 prefixlen 64 secured scopeid 0x5
    inet 192.168.0.19 netmask 0xffffff00 broadcast 192.168.0.255
    inet6 2606:6000:609b:1200:14c1:e8b6:1ff0:8ef1 prefixlen 64 autoconf secured
    inet6 2606:6000:609b:1200:d9dc:a4c3:7c4b:14e4 prefixlen 64 autoconf temporary
    inet6 2606:6000:609b:1200::4 prefixlen 64 dynamic
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
    ether 02:e6:50:0a:23:64
    media: autoselect
    status: inactive
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
    ether 76:f1:5e:fa:30:28
    inet6 fe80::74f1:5eff:fefa:3028%awdl0 prefixlen 64 scopeid 0x7
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=60<TSO4,TSO6>
    ether 72:00:05:09:7f:80
    media: autoselect <full-duplex>
    status: inactive
en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=60<TSO4,TSO6>
    ether 72:00:05:09:7f:81
    media: autoselect <full-duplex>
    status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=63<RXCSUM,TXCSUM,TSO4,TSO6>
    ether 72:00:05:09:7f:80
    Configuration:
        id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
        maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
        root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
        ipfilter disabled flags 0x2
    member: en1 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 8 priority 0 path cost 0
    member: en2 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 9 priority 0 path cost 0
    nd6 options=201<PERFORMNUD,DAD>
    media: <unknown type>
    status: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
    inet6 fe80::1d55:b5dc:3cd5:864%utun0 prefixlen 64 scopeid 0xb
    nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
    inet6 fe80::df6e:b1c3:74ea:f75c%utun1 prefixlen 64 scopeid 0xc
    nd6 options=201<PERFORMNUD,DAD>

netstat -an | grep 8080

=>

tcp4       0      0  *.8080                 *.*                    LISTEN

Я все еще изучаю, что означают некоторые из этих выходных данных, и буду работать над подключением удаленного устройства к моему Mac. Скоро будут предоставлены дальнейшие обновления.

------- Следующее обновление ---------

Поэтому я попытался подключиться к произвольному порту как на локальной, так и на удаленной машине.

Начать прослушивание на порту 54321

nc -v -b en0 -l 54321

Подключение к нему..

nc -v -z 192.168.0.19 54321

Местный ответ =>

found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif lo0
    src 192.168.0.19 port 49845
    dst 192.168.0.19 port 54321
    rank info not available
    TCP aux info available

Connection to 192.168.0.19 port 54321 [tcp/*] succeeded!

Удаленный ответ =>

nc: connectx to 192.168.0.19 port 54321 (tcp) failed: Operation timed out

Попытка подключения к веб-серверу...

echo -n "GET / HTTP/1.0\r\n\r\n" | nc 192.168.0.19 8080

Местный ответ =>

HTTP/1.1 400 Неверный запрос

Ответ веб-сервера от локального запроса =>

  • никаких изменений в логах

Удаленный ответ =>

HTTP/1.1 400 Bad Request

Ответ веб-сервера от удаленного запроса =>

  • никаких изменений в логах
Как получить доступ к веб-странице с другого компьютера? Используя IP-адрес серверной машины? Используете имя хоста Bonjour сервера? Какой HTTP-сервер используется? Встроенный апач? Что-то другое?
@Gummibando - Спасибо за ответ. Я обновил вопрос с дополнительной информацией.
Правильно ли настроен веб-сервер? При попытке устранить подобные проблемы часто лучше всего найти и отключить все сложное, что вы пытаетесь сделать — отключить брандмауэр OSX, отключить прокси и т. д. и т. д. Как только это сработает, вы можете снова начать усложнять. .
Вы можете попробовать curl, чтобы получить код состояния. curl -I [webserver IP Here] -o >(cat >&1) -w "%{http_code}" 1>&2 superuser.com/questions/272265/…

Ответы (2)

Друг мой, приступим к делу:

  1. В окне, на котором запущен веб-сервер, откройте приложение «Терминал» и станьте суперпользователем, набрав sudo -sи введя пароль пользователя.

  2. Покажите мне конфигурацию вашего брандмауэра и таблицу маршрутизации. Опубликовать вывод pfctl -vvv -s all, а такжеnetstat -nr

  3. Запустите веб-сервер и убедитесь, что он правильно настроен для обслуживания. Неправильная конфигурация выходит за рамки этого ответа. Я предполагаю, что веб-сервер работает на хосте с IP-адресом NAT/внутренней сети 192.168.0.28.

  4. Определите сетевой интерфейс в интрасети и запустите прослушиватель на произвольном порту 54321:

    for DUDE in $( ifconfig -lu ) ; do ifconfig ${DUDE}  | grep -q “192.168.0.28” && echo ${DUDE} ; done
    

    Это даст вам сетевой интерфейс. Затем убедитесь, что что-то привязано к порту 8080.

    netstat -an | grep 8080
    

    Если здесь ничего не возвращается, ваш веб-сервер не привязан к интерфейсу с портом 8080, и, вероятно, существует неправильная конфигурация веб-сервера или условие гонки процесса, привязанное к этому интерфейсу с этим номером порта. Последнее может произойти, когда другой процесс уже привязан к определенному интерфейсу/порту. Сделайте, lsof -i | grep 8080чтобы увидеть, что занимает этот порт, если что-то.

    Запустите прослушиватель на произвольном порту 54321 с помощьюnc -v -b [network interface] -l 54321

  5. На удаленном хосте Mac, BSD, Linux или даже UNIX, который подключен к той же сети NAT/интрасеть, запустите командную строку для доступа к системной оболочке — открыв приложение «Терминал» в «Утилитах» на Mac... Или на в окне Windoze запустите cmd.exe и подключитесь по телнету к 192.168.0.28:8080. Не уверен, что двоеточие является правильным синтаксисом для оболочки CMD.

  6. Попытка подключиться к слушателю, который мы только что установили на порт 54321 с помощьюnc -v -z 192.168.0.28 54321

  7. Попытайтесь подключиться к проблемному веб-серверу через

    echo -n "GET / HTTP/1.0\r\n\r\n" | nc 192.168.0.28 8080
    

Это должно помочь изолировать проблему, пока я не увижу конфигурацию брандмауэра и таблицу маршрутизации, которую я запросил выше...


В вашем наборе правил PF нет правил фильтрации, при условии, что якорь com.apple ничего не задал — дважды проверьте с помощью

sudo pfctl -vvv -a com.apple -sr

И прошу простить меня за такую ​​оплошность:

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate

Скорее всего он включен. Не заморачиваясь с его конфигурацией, давайте временно отключим его, а затем повторно протестируем тесты nc, которые я описал выше...:

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off

Затем повторите тесты выше. Измените «выкл.» выше на «вкл.», чтобы после этого снова включить брандмауэр приложения. Я вполне уверен, что это решит проблему. Если это так, то нам просто нужно настроить брандмауэр приложения - прогулка в парке, и я посоветую, узнав результаты...

Ф.

Большое спасибо за этот ответ, я обновил вопрос, добавив дополнительные подробности, показывающие результаты таблиц маршрутизации.
Хорошо, интерфейс en0, вы ошиблись IP-адресом. Используйте 192.168.0.19 и повторно запустите pfctl -vvv -s all. Не забудьте включить «все» в конце. Маршрутизация на первый взгляд выглядит нормально. Пожалуйста, выполните команды nc.
Хорошо, обновил вопрос с информацией о pfctl. Да, после обратного подключения к сети NAT изменил IP-адрес моего устройства на 192.168.0.19, но в первый раз это было 192.168.0.28. :)
Я также добавил результаты команды nc
Пожалуйста, посмотрите на нижнюю часть моего ответа выше - и дайте мне знать о результатах. Я по-прежнему уверен, что мы близки к решению вопроса...

Моя первая мысль заключается в том, что у вас нет четкого сетевого пути от вашего устройства iOS до Mac с самого начала. Загрузите утилиту, например https://apps.apple.com/us/app/ping-network-utility/id576773404 , и пропингуйте свой Mac. Сообщите, работает ли пинг.

Если вы даже не можете пропинговать Mac, маловероятно, что вы сможете к нему подключиться. Прежде чем погрузиться в брандмауэры, убедитесь, что ваш маршрутизатор настроен так, чтобы устройства могли взаимодействовать друг с другом. Некоторые не разрешают подключения между устройствами по умолчанию, только к устройствам в Интернете.

Спасибо за это. Я загрузил приложение, и оно продолжает говорить, что время запроса истекло.