Il port forwarding di Vagrant non funziona [chiuso]


108

Sto riscontrando un piccolo problema alla fine della guida introduttiva pervagrant . Sto lavorando su una scatola base CentOS con Apache2 in esecuzione (provisioning tramite Puppet). Ho impostato il port forwarding per le richieste web utilizzando la seguente riga in Vagrantfile:

 config.vm.forward_port "web", 80, 4567

Ma quando faccio richieste a quella porta, falliscono. L'errore segnalato da Safari è "Safari non può aprire la pagina" http: // localhost: 4567 / "perché il server ha interrotto inaspettatamente la connessione."

Ho fatto un vagrant reloade ho visto "[default] - web: 80 => 4567 (adattatore 1)" nella pergamena, quindi dove dovrei iniziare a risolvere questo problema? Grazie.


1
Cosa curl -v 'http://localhost:4567/'dice? A volte Safari è un po 'troppo gentile nel nascondere i messaggi di errore.
Steve Losh

2
Inoltre, curl 'http://localhost:80'dalla VM stessa funziona? In caso contrario, il problema non è il port forwarding.
Steve Losh

4
@Steve Losh curldall'interno della VM sta funzionando. curldall'ospite mi dà (52) Empty reply from server.
Hank Gay

La ricarica vagabonda mi aiuta su una domanda simile ...
haudoing

Per me il caso era con symfony 3: - quando esegui sudo php bin / console server: run che rende il server in esecuzione su 127.0.0.1:8000, quindi non posso accedere dal browser web, arricciare la macchina virtuale a cui si accede. Quando ho eseguito sudo php -S 0.0.0.0:8000 nella directory web, ho potuto accedere a 127.0.0.1:8082/app_dev.php . Non capisco perché questo accada, ma funziona.
Darius.V

Risposte:


80

Farò in modo che questa sia una risposta effettiva invece di ulteriori commenti.

Prima cosa: prova curl 'http://localhost:80'dall'interno della VM. Se non funziona, non è sicuramente il port forwarding.

Avanti: prova curl -v 'http://localhost:4567/'dal tuo computer host. Curl potrebbe darti un messaggio di errore migliore di Safari.

Controllerei che non ci siano firewall configurati che limitano l'accesso alla porta 80. La VM Vagrant predefinita (Ubuntu) non viene fornita con un firewall configurato, ma hai detto che stai usando qualcos'altro, quindi potrebbe valerne la pena controllare.

Se non è così, prova a creare qualcosa di diverso da Apache elencato sulla porta 80. Python viene fornito con un semplice server HTTP che puoi usare: vai nella cartella con index.htmled esegui sudo python -m SimpleHTTPServer 80, quindi prova a colpirlo con curl da entrambe le caselle. Se funziona, probabilmente è un problema di configurazione di Apache. Non ho abbastanza esperienza con Apache per aiutare se è così (io uso nginx).


14
Fondamentalmente, faccio schifo a RedHat e iptables. Ho controllato per assicurarmi che la politica predefinita fosse ACCEPTper le connessioni in entrata, ma non ho prestato attenzione alla catena di regole personalizzate di RedHat, che ha una REJECTregola generale come ultima regola della catena. tl; dr Avevo un firewall sulla strada e non me ne sono accorto.
Hank Gay

Grazie! Quella subdola regola del firewall è ciò che ha causato i miei problemi su RHEL 5.5.
Roosh

Ristampo il commento di Robert di seguito perché è un modo così banale per controllare: Esegui service iptables stopcome root per escludere rapidamente un problema del firewall Guest. Riattivalo più tardi, se necessario.
Arnaud Meuret

1
ha avuto lo stesso problema con una strana immagine di centos; iptableslimitava quasi tutto. Ho seguito questa guida iptable centos (soluzione nella sezione 3 Scrivere un semplice set di regole ) e ha funzionato a meraviglia :)
GabLeRoux

per me curl funzionava all'interno, quindi ho abilitato la rete Vagrantfilee ho eseguito il comandovagrant reload
abhirathore2006

266

Volevo aggiungere una nota aggiuntiva che spesso questo è causato dal server all'interno della VM perché si lega a 127.0.0.1, che è loopback. Ti consigliamo di assicurarti che il server sia associato a in 0.0.0.0modo che tutte le interfacce possano accedervi.

Alcuni server di app incorporati come i server di sviluppo di Django e alcuni server Ruby sono predefiniti per impostazione 127.0.0.1predefinita, quindi questo è qualcosa a cui prestare attenzione.

Oltre a questo, quello che ha detto Steve è vero: assicurati che funzioni dall'interno della VM e prova altri semplici server per cercare di capire se si tratta di un problema di configurazione.


8
Questa era la soluzione necessaria per il fucile a pompa con Webrick.
Ronze

Questo ha risolto il problema per me. Per associare Torquebox a 0.0.0.0 eseguirlo con: torquebox run -b 0.0.0.0
Bartek Skwira

3
Sì, questo era il problema. È necessario eseguire il binding a 0.0.0.0. Mi chiedo se c'è un modo in cui Vagrant può automaticamente risolvere questo problema in futuro?
CMCDragonkai

1
lo stesso problema con sinatra e webrick: "set: bind, '0.0.0.0'" ha risolto il problema
pragmatic_programmer

questa è stata la soluzione per me
sixty4bit

33

Ho avuto lo stesso problema su CentOS 6.3 con NGINX e ho trovato la risposta in iptables sulla scatola vagabonda.

Da bash on the vagrant box, segui questi passaggi:

Primo elenco delle attuali regole di iptable

iptables -L -v

Quindi svuota le regole attuali:

iptables -F

Consenti connessioni SSH sulla porta tcp 22

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Imposta criteri predefiniti per le catene INPUT, FORWARD e OUTPUT

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Imposta l'accesso per localhost

iptables -A INPUT -i lo -j ACCEPT

Accetta pacchetti appartenenti a connessioni stabilite e correlate

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Salva le impostazioni

/sbin/service iptables save

Elenca le regole modificate

iptables -L -v

Curl localhost: [port #] o premilo nel tuo browser dall'esterno di vagrant

Maggiori informazioni sulle configurazioni di iptable di CentOS trovate qui:

http://wiki.centos.org/HowTos/Network/IPTables

In bocca al lupo.


2
Grazie per aver scritto questo. Ho avuto lo stesso problema su Fedora 18, quindi non è specifico per CentOS. Spero che aiuti qualcun altro. :)
Benjamin Oakes

4
Questo ero io su CentOS. service iptables stop
Robert,

2
iptables -Fda solo l'ha fatto per me
code_monk

Ho trovato una soluzione solida a questo con alcuni comandi exec elencati in questo post del blog per risolvere lo stesso problema techie-notebook.blogspot.com/2014/05/… Ho dovuto sostituire il mio percorso con le sezioni $ {os_path} come ho fatto non ho quella variabile disponibile.
Joshua Fricke

27

Una soluzione migliore per me è disabilitare il firewall

service iptables stop
chkconfig iptables off

+1 ha funzionato per me. Per l'utilizzo di un'istanza VirtualBox locale, non avevo bisogno di un firewall.
Eduardo

è un buon trucco se vuoi una soluzione temporanea
brrystrw

0

Voglio aggiungere anche un'altra nota come Mitchell. se il mio caso lo inoltro al 6789 da 80

$ curl -v http://localhost:6789

E ho ottenuto

<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>

Quindi, ho usato invece l'indirizzo IP, ha ricevuto il messaggio html corretto.

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.