Я работаю на Mac с виртуальной машиной Windows в Parallels, и я хотел бы - с моего Mac - иметь возможность нажать http://localhost:44300 и обработать этот запрос приложением, работающим внутри виртуальной машины.
Я знаю, что это возможно, поскольку, когда я запускаю docker, фактически это то, что он делает, я могу создать приложение, запустить его в контейнере docker на порту 44300 , а затем нажать localhost:44300 с хост-машины. Я просто не знаю, как настроить виртуальную машину Windows + для этого.
Поэтому я создал простой веб-сервер в nodejs, который просто отвечает отметкой времени. Это работает при попадании изнутри виртуальной машины:
Мой netstat в этот момент читает
 TCP    127.0.0.1:44300        :0                     LISTENING
На этом этапе попытка curl с хоста, конечно, не работает
 $ curl http://localhost:44300
 curl: (7) Failed to connect to localhost port 44300: Connection refused
Таким образом, чтобы открыть это на хост-машине, я пересылаю порт в Parallels в моей конфигурации NAT
Я также создаю правило urlacl:
PS C:\Users\gmauer> netsh http show urlacl | select-string 44300 -Context 1,5
>     Reserved URL            : http://*:44300/
          User: \Everyone
              Listen: Yes
              Delegate: No
              SDDL: D:(A;;GX;;;WD)
Теперь, когда я curl я получаю что-то другое
 $ curl http://localhost:44300 --max-time 3
 curl: (28) Operation timed out after 3004 milliseconds with 0 bytes received
Похоже, это связано с моим брандмауэром Windows. Я (временно) отключаю это:
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
и теперь я снова получаю что-то другое
 $ curl http://localhost:44300 --max-time 3
 curl: (56) Recv failure: Connection reset by peer
Что мне кажется , что запрос проходит в VM , но закрываются на что - то внутри виртуальной машины (я понимаю, что это равноправное).
Чтобы подтвердить, что я открываю wireshark, где я вижу следующее:
Итак, виртуальная машина видит запрос, затем что-то сбрасывает его с помощью RST ...И там у меня заканчиваются идеи, что еще нужно сделать.
У меня было это предложил мне , что проблема в том , что localhost специальный (это, конечно , есть), но я думаю , что я продемонстрировал выше , что запрос получает в VM, ее обходя брандмауэр, его просто не будет дальше Что еще я могу проверить / сделать?
Изменить 1: как это звучит безумно, но я попробую, я попытался сопоставить локальные хосты с моим гостевым IP-адресом в файле хостов Windows - без кубиков, тот же результат.
Редактировать 2: я попытался запустить netcat для настройки сервера сокетов и могу подключиться к серверу через telnet и отправить сообщения серверу сокетов. Это, несомненно, доказывает, что запросы попадают в VM. Интересная подсказка в том, что, хотя wireshark показывает запрос, fiddler - нет.



