Impossibile accedere al server rails sulla VM dall'host


12

Ho un server rails sulla macchina virtuale e devo accedere a localhost dall'host. Ho provato sia NAT (port forwarding - porta 80 e 3000 sul lato guest) sia un adattatore bridge ma nulla sembra funzionare.

In entrambi i casi sono stato in grado di accedere alla porta 80 ma non sono riuscito a connettermi a localhost sulla porta 3000 (quindi non si sono verificati problemi nell'accesso al server xampp).

Per favore fatemi sapere se avete idea di come si possa accedere a localhost dall'host mentre il server è sul lato ospite.

Ho Linux (debian) sul guest e Windows 7 sul lato host - Uso VirtualBox.

Risposte:


10

Ci sono almeno tre componenti separati in gioco qui, ognuno dei quali deve essere configurato correttamente.

Indirizzo vincolante rotaie

Quando Rails (o un'altra applicazione server) si apre per ricevere connessioni di rete, si collegherà sia a un IP che a una porta. Se una richiesta in arrivo non corrisponde a entrambe, non accetterà la connessione. Da 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
...

Quindi, per impostazione predefinita, Rails accetterà solo le richieste inviate alla sua localhostscheda di rete (chiamata loopback) (chiamata lo). Dato che questo adattatore è accessibile solo dallo stesso computer, le uniche richieste che accetteranno saranno dalla stessa macchina virtuale Debian: buone e sicure per i test, ma non utili per la produzione, o anche test da un altro computer.

Se vuoi che i tuoi Rails siano accessibili da qualsiasi altro computer (incluso il tuo host Windows 7), dovrai dire a Rails di collegarsi a qualsiasi indirizzo IP che Debian abbia accessibile dall'esterno (vedi sotto).

Tuttavia, un modo più semplice è dire a Rails di collegarsi allo speciale indirizzo IP 0.0.0.0, il che significa che qualsiasi scheda di rete . Quindi, avviare il server Rails in questo modo:

rails server -p 80 -b 0.0.0.0

renderà il tuo sito Web accessibile a chiunque possa vedere la tua VM in rete.

Questo è probabilmente ciò che ti ha ancora incasinato anche se gli altri due componenti funzionavano.

Indirizzo IP della macchina virtuale

Devi puntare il tuo browser verso la macchina virtuale Debian, che è il suo computer discreto.

La regola empirica localhostè che si riferisce sempre allo stesso computer. Tuttavia, per scopi di rete, la tua VM Debian è un suo computer separato. Se si utilizza un browser Web nell'host di Windows 7, localhostfare sempre riferimento a Windows 7 e nient'altro.

Hai due opzioni qui:

  • Impostare l'adattatore VM VirtualBox in modalità Bridge (come indicato nella domanda). Questo metterà il tuo Debian direttamente sulla stessa rete esterna / domestica / lavorativa del tuo host Windows 7. È quindi possibile determinare l'IP della propria VM Debian eseguendo ifconfig. Cerca l'IP del tuo eth0o eth<something>dell'adattatore. Collegalo alla barra degli indirizzi del tuo browser.

  • Utilizzare un adattatore NAT e il port forwarding di VirtualBox . IMO questo è più complicato.

Firewall Debian

È passato un po 'di tempo da quando ho lavorato su Debian, quindi non so quali siano le impostazioni predefinite correnti, ma se le due cose precedenti non funzionano, potrebbe valere la pena esaminarle. Se Debian esegue un firewall, dovrai aprire tutte le porte a cui desideri accedere da un'altra macchina.

Spero che sia di aiuto :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.