Impossible d'accéder au serveur rails sur la machine virtuelle à partir de l'hôte


12

J'ai un serveur de rails sur une machine virtuelle et j'ai besoin d'accéder à l'hôte local depuis l'hôte. J'ai essayé à la fois le NAT (par redirection de port - port 80 et 3000 côté invité) et l'adaptateur ponté, mais rien ne semble fonctionner.

Dans les deux cas, j'ai pu accéder au port 80, mais je n'ai pas réussi à me connecter à localhost sur le port 3000 (il n'y a donc pas eu de problème d'accès au serveur xampp).

Veuillez me faire savoir si vous avez une idée de la façon dont on peut accéder à localhost depuis l'hôte pendant que le serveur est côté invité.

J'ai Linux (Debian) sur l'invité et Windows 7 sur l'hôte - j'utilise VirtualBox.

Réponses:


10

Il y a au moins trois composants distincts en jeu ici, dont chacun doit être configuré correctement.

Adresse de liaison des rails

Lorsque Rails (ou une autre application serveur) s'ouvre pour recevoir des connexions réseau, il se lie à la fois à une adresse IP et à un port. Si une demande entrante ne correspond pas aux deux, elle n'acceptera pas la connexion. De rails server --help:

Usage: rails server [mongrel, thin etc] [options]
-p, --port=port                  Runs Rails on the specified port.
                                 Default: 3000
-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost
...

Par défaut, Rails n'acceptera que les demandes envoyées à sa localhostcarte réseau (de bouclage) (appelée lo). Étant donné que cet adaptateur n'est accessible que depuis le même ordinateur, les seules demandes qu'il acceptera proviendront de la machine virtuelle Debian elle-même: bonne et sécurisée pour les tests, mais pas utile pour la production, ou même les tests à partir d'un autre ordinateur.

Si vous voulez que vos Rails soient accessibles depuis n'importe quel autre ordinateur (y compris votre hôte Windows 7), vous devrez dire à Rails de se lier à l'adresse IP Debian accessible de l'extérieur (voir ci-dessous).

Cependant, un moyen plus simple consiste à dire à Rails de se lier à l'adresse IP spéciale 0.0.0.0, ce qui signifie n'importe quelle carte réseau . Donc, démarrer votre serveur Rails comme ceci:

rails server -p 80 -b 0.0.0.0

rendra votre site Web accessible à tous ceux qui peuvent voir votre machine virtuelle sur le réseau.

C'est probablement ce qui vous a encore gâché même si vous aviez les deux autres composants en état de marche.

Adresse IP de la machine virtuelle

Vous devez pointer votre navigateur vers la machine virtuelle Debian, qui est son propre ordinateur discret.

La règle générale localhostest qu'elle fait toujours référence au même ordinateur. Cependant, à des fins de mise en réseau, votre machine virtuelle Debian est son propre ordinateur distinct. Si vous utilisez un navigateur Web dans votre hôte Windows 7, localhostse référera toujours à votre Windows 7 et à rien d'autre.

Vous avez deux options ici:

  • Réglez l'adaptateur VM VirtualBox en mode Pont (comme vous l'avez mentionné dans votre question). Cela placera votre Debian directement sur le même réseau extérieur / domestique / professionnel que votre hôte Windows 7. Vous pouvez ensuite déterminer l'IP de votre machine virtuelle Debian en exécutant ifconfig. Recherchez l'IP de votre eth0ou eth<something>adaptateur. Branchez-le dans la barre d'adresse de votre navigateur.

  • Utilisez un adaptateur NAT et une redirection de port VirtualBox . OMI, c'est plus compliqué.

Pare-feu Debian

Cela fait un moment que je n'ai pas travaillé sur Debian, donc je ne sais pas quels sont les paramètres par défaut actuels, mais si les deux choses ci-dessus ne fonctionnent pas, cela pourrait valoir la peine d'être étudié. Si Debian exécute un pare-feu, vous devrez ouvrir tous les ports auxquels vous souhaitez accéder depuis une autre machine.

J'espère que cela t'aides :)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.