3 votes

Comment transférer localhost + un port dans une machine virtuelle Windows

Je suis sur un Mac exécutant une machine virtuelle Windows dans Parallels, j'aimerais - depuis mon Mac - pouvoir accéder à http://localhost:44300 et que cette requête soit traitée par une application s'exécutant à l'intérieur de la machine virtuelle.

Je sais que c'est possible car lorsque j'exécute docker, c'est en effet ce qu'il fait, je peux créer une application, l'exécuter dans le conteneur docker sur le port 44300, puis accéder à localhost:44300 depuis la machine hôte. Je ne sais simplement pas comment configurer mon Windows + VM pour le faire.

J'ai donc créé un simple serveur web en nodejs qui répond simplement avec un horodatage. Cela fonctionne lorsqu'on y accède depuis la machine virtuelle :

Fonctionne depuis la VM

À ce stade, mon netstat affiche

 TCP    127.0.0.1:44300        :0                     ÉCOUTE

À ce stade, essayer de faire un curl depuis l'hôte ne fonctionne bien sûr pas

 $ curl http://localhost:44300
 curl: (7) Échec de la connexion à localhost sur le port 44300 : Connexion refusée

Donc pour ouvrir cela à la machine hôte, je redirige le port dans Parallels dans ma configuration NAT

Port redirigé dans Parallels

J'ai également créé une règle urlacl :

PS C:\Users\gmauer> netsh http show urlacl | select-string 44300 -Context 1,5

>     URL réservée            : http://*:44300/
          Utilisateur : \Everyone
              Écoute : Oui
              Délégué : Non
              SDDL : D:(A;;GX;;;WD)

Maintenant, lorsque je fais un curl j'obtiens quelque chose de différent

 $ curl http://localhost:44300 --max-time 3
 curl: (28) Le délai d'opération a expiré après 3004 millisecondes sans réception de données

Cela semble être dû à mon pare-feu Windows. Je le désactive (temporairement) :

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

et maintenant j'obtiens quelque chose de différent une fois de plus

 $ curl http://localhost:44300 --max-time 3
 curl: (56) Échec de la réception : Réinitialisation de la connexion par le correspondant

Cela me semble indiquer que la requête pénètre dans la VM mais est bloquée par quelque chose à l'intérieur de la VM (à mon avis, c'est le correspondant).

Pour confirmer cela, j'ouvre Wireshark où je vois ce qui suit :

Wireshark montre une requête qui est abandonnée

Ainsi, la VM reçoit la requête, puis quelque chose la Réinitialise avec un RST... Et là, je ne sais plus quoi faire d'autre.

On m'a suggéré que le problème vient du fait que localhost est spécial (ce qui est évident), mais je pense avoir démontré ci-dessus que la requête pénètre dans la VM, elle passe le pare-feu, elle n'arrive tout simplement pas plus loin. Que puis-je vérifier/faire d'autre ?

Édition 1: Comme cela semble fou mais je vais essayer, j'ai essayé de mapper les localhosts vers l'IP de ma machine invitée dans le fichier hosts de mon Windows - rien ne fonctionne.

Édition 2: J'ai essayé d'exécuter netcat pour configurer un serveur de socket et je peux me connecter en telnet depuis l'hôte et envoyer des messages au serveur de socket. Cela prouve sans aucun doute que les requêtes arrivent dans la VM. Un indice intéressant est que bien que Wireshark montre la requête, Fiddler ne le montre pas.

-2voto

Andy Points 1636

127.0.0.1 ou localhost est une adresse IP/nom d'hôte spécial. Cela fonctionne uniquement lorsque vous vous référez à un port ouvert sur la machine actuelle. Vous avez peut-être contourné cela en redirigeant un port de l'hôte de la machine virtuelle vers la machine virtuelle, mais probablement la solution la plus robuste est d'utiliser l'adresse IP de la machine virtuelle. Connectez-vous directement à la machine virtuelle ; passez outre toutes les règles de pare-feu, les règles de redirection et les traductions d'adresses. Vous compliquez les choses inutilement.

Il suffit d'exécuter ipconfig depuis votre machine virtuelle, d'obtenir l'adresse IP et d'utiliser celle-ci à la place.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X