1 votos

Cómo reenviar localhost + un puerto a una máquina virtual de Windows

Estoy en un Mac con un VM de Windows en paralelo, me gustaría desde mi mac - ser capaz de golpear http://localhost:44300 y tienen que solicitar servido por una aplicación que se ejecuta dentro de la máquina virtual.

Sé que esto es posible ya que cuando ejecuto la ventana acoplable, que es en realidad lo que hace, puedo crear una aplicación, se ejecuta en la ventana acoplable de contenedores en el puerto 44300, a continuación, golpeó localhost:44300 desde el host de la máquina. Sencillamente, no sé cómo configurar mi Windows + VM para hacerlo.

Así que he creado un sencillo servidor web en nodejs que sólo responde con una marca de tiempo. Esto funciona cuando es golpeado desde el interior de la máquina virtual:

Works from inside the VM

Mi netstat en este punto se lee

 TCP    127.0.0.1:44300        :0                     LISTENING

En este punto, tratando curl desde el host de curso no funciona

 $ curl http://localhost:44300
 curl: (7) Failed to connect to localhost port 44300: Connection refused

Así que para abrir esto a la máquina host puedo reenviar el puerto de Parallels en mi configuración de NAT

Forwarded port in Parallels

Yo también crear un urlacl regla:

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)

Ahora, cuando me curl obtener algo diferente

 $ curl http://localhost:44300 --max-time 3
 curl: (28) Operation timed out after 3004 milliseconds with 0 bytes received

Esto parece ser debido a que mi firewall de Windows. Yo desactivar (temporalmente):

Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False

y ahora me sale algo diferente y nuevo

 $ curl http://localhost:44300 --max-time 3
 curl: (56) Recv failure: Connection reset by peer

Que a mí me parece que la petición está pasando en la VM, pero de que se cierre algo en el interior de la máquina virtual (en mi entendimiento es que el peer).

Para confirmar que no se abra hasta wireshark donde veo la siguiente:

Wireshark shows a request being killed

Así que la VM ve la solicitud, entonces algo se Restablece con un PRIMERO...Y ahí me he quedado sin ideas ¿qué más hay que hacer.

Yo he tenido me sugirió que la cuestión es que localhost es especial (que por supuesto lo es), pero creo que he demostrado anteriormente que la petición es entrar en la VM, su pasar por el firewall, es sólo que no vaya a más. ¿Qué más puedo comprobar?

Edit 1: Como esto suena loco pero voy a intentar hacerlo, traté de mapa localhosts a mi invitado IP en mi archivo hosts de windows - no hay dados, mismo resultado.

Edit 2: He intentado correr netcat para configurar un servidor de socket y puede hacer telnet desde el host y enviar mensajes al servidor de socket. Esto más allá de una duda demuestra que las solicitudes están entrando en la vm. Una pista interesante es que mientras wireshark muestra la solicitud, el violinista no.

-1voto

Andy Puntos 121

127.0.0.1 o localhost es un especial de la IP/nombre de host. Sólo funciona cuando se hace referencia a un puerto que está abierto en la máquina actual. Usted puede han eludido este mediante el reenvío de un puerto en el host de máquina virtual para la máquina virtual invitada, pero probablemente la solución más eficaz es el uso de la dirección IP de la máquina virtual. Conectar directamente al huésped; saltarse todas las reglas de firewall, reglas de reenvío, y la dirección de las traducciones. Usted está haciendo esto demasiado difícil.

Sólo tiene que ejecutar ipconfig desde dentro de su huésped, y obtener la IP, y utilizar en su lugar.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: