Je sais que je suis en train de nécroser une question d'il y a quatre ans, mais je suis tombé sur ce sujet et je suis heureux de ne pas avoir été découragé par le post de Frank Thomas (si je l'ai lu comme il l'entendait, en disant qu'il n'y a pas de moyen possible pour qu'une VM uniquement hôte se connecte à l'extérieur de la machine hôte). J'ai essayé pendant un certain temps de comprendre comment créer une VM totalement isolée, en dehors de certaines fonctionnalités comme le bureau à distance et FTP (également Apache). J'ai configuré l'adaptateur hôte seulement avec DHCP. L'objectif était de faire en sorte que la machine hôte (Windows) reçoive des connexions sur des ports spécifiques, puis transmette ces connexions à l'adaptateur hôte uniquement, et donc à la VM isolée (Ubuntu-Linux). J'ai trouvé un moyen fiable de le faire en utilisant netsh.
Disons que l'adresse IP publique de ma machine hôte est 47.74.47.74, et que l'adresse IP privée de ma machine invitée est 192.168.47.74 : Sur l'invité, j'ai configuré Apache pour écouter son port par défaut (80), et XRDP (bureau à distance) pour écouter son port par défaut (3389). J'ai choisi des ports aléatoires à utiliser pour les connexions à mon hôte. Tant que vous vous souvenez des ports que vous utilisez, et que rien d'autre ne les utilise, ils peuvent être ce que vous voulez. Je voulais que les connexions à 47.74.47.74:12567 soient redirigées vers l'invité et affichent index.html depuis Apache, donc j'ai fait en sorte que le port 12567 soit redirigé vers le port 80 de l'invité en utilisant (ceci doit être fait dans CMD, la console de commande Windows) :
netsh interface portproxy add v4tov4 listenport=12567 listenaddress=0.0.0.0 connectaddress=192.168.47.74 connectport=80 protocol=tcp
(Explication : Cela ajoute une règle de transfert sur un port spécifique pour envoyer à un autre endroit. "v4tov4" fait référence à la réception d'une adresse IPV4, et au transfert vers une adresse IPV4. "listenaddress=0.0.0.0" signifie qu'il écoute toute adresse IPV4 passant par ce port. Vous pouvez le limiter aux connexions provenant d'une adresse IPV4 spécifique si vous le souhaitez. "connectaddress" et "connectport" sont les informations de la machine invitée).
Après avoir fait suivre le port 12567 à mon hôte dans mon routeur, cela m'a permis d'accéder à index.html sur l'invité de n'importe où en utilisant un navigateur web. De même,
netsh interface portproxy add v4tov4 listenport=12568 listenaddress=0.0.0.0 connectaddress=192.168.47.74 connectport=3389 protocol=tcp
me permet de me connecter à distance à partir de n'importe où en utilisant Windows Remote Desktop et en me connectant à 47.74.47.74:12568.
FTP implique la redirection de plusieurs autres ports de cette manière, et la configuration du serveur FTP à l'aide de ports spécifiques (vous ne pouvez pas utiliser une plage de ports à l'aide de netsh portproxy), mais je ne l'expliquerai que si quelqu'un me le demande.