Ich arbeite an einer Webdienstarchitektur. Ich habe eine Software, die ich auf dem nativen Host-Computer ausführen muss, nicht in Vagrant. Aber ich möchte einige Client-Services für den Gast ausführen.
Der config.vm.forwarded_port
Parameter von Vagrant öffnet einen Port auf dem Host und sendet die Daten an den Gast. Aber wie kann ich einen Port für den Gast öffnen und die Daten an den Host senden? (Es ist immer noch Portweiterleitung, aber in umgekehrter Richtung.)
vagrant
portforwarding
Dan Fabulich
quelle
quelle
Antworten:
Beim Ausführen
vagrant ssh
wird tatsächlich der zugrunde liegende Befehl verwendet:ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key [email protected]
SSH unterstützt die Weiterleitung von Ports in die gewünschte Richtung mit der
-R guestport:host:hostport
Option. Wenn Sie also eine Verbindung zum Port12345
des Gasts herstellen und an diesen weiterleitenlocalhost:80
möchten, verwenden Sie diesen Befehl:ssh -p 2222 -R 12345:localhost:80 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key [email protected]
Wie Eero richtig kommentiert, können Sie auch den Befehl verwenden
vagrant ssh -- -R 12345:localhost:80
, der den gleichen Effekt in einem viel präziseren Befehl hat.quelle
vagrant ssh -- -R 12345:localhost:80
Dies folgt der Syntax der ssh-Option -R [bind_address:] port: host: hostport , wobei die erste Nummer die Portnummer ist, die auf dem Gastcomputer abgehört werden soll, und die letzten beiden die Dienstadresse sind wie vom Host-Computer aus sichtbar.vagrant ssh-config | ssh -F /dev/stdin $BOX -R $PORT_VM:localhost:$PORT -N
In dem
Vagrant: Up and Running
vom Ersteller von Vagrant verfassten Buch ( Veröffentlichungsdatum : 12. Juni 2013) erwähnte er, dass Gastcomputer nicht auf Dienste zugreifen können, die auf dem Hostcomputer ausgeführt werden.Anstatt zu verwenden
Forwarded Ports
, können Sie mit ein privates Netzwerk einrichtenHost-Only Networks
.Vorteile der Verwendung
Host-Only Networks
überForwarded Ports
Gastcomputer können auf die Dienste zugreifen, die auf dem Hostcomputer ausgeführt werden
Diese Funktion würde Ihr Problem lösen.
Gastcomputer können auf die Dienste zugreifen, die auf einem anderen Gastcomputer ausgeführt werden
Diese Funktion ist sehr nützlich, um Dienste auf mehrere Maschinen zu verteilen und eine Produktionsumgebung genauer nachzuahmen.
Sichern
Externe Computer haben keine Möglichkeit, auf die auf den Gastcomputern ausgeführten Dienste zuzugreifen
Weniger Arbeit
Sie müssen nicht jeden einzelnen konfigurieren
Forwarded Port
So konfigurieren Sie
Host-Only Networks
config.vm.network :"hostonly", "192.168.0.0"
# Vagrant Version # 1config.vm.network :private_network, ip: "192.168.0.0"
# Vagrant Version # 2Wenn Sie diese Zeile in Ihrem
Vagrantfile
Testament haben, wird vagrant angewiesen, ein privates Netzwerk mit einer statischen IP-Adresse zu erstellen:192.168.0.0
Die IP-Adresse des Hosts ist immer dieselbe IP-Adresse, jedoch mit dem letzten Oktett als 1. Im vorherigen Beispiel hätte der Host-Computer die IP-Adresse
192.168.0.1
.quelle
Vagrant: Up and Running
) können Sie ein überbrücktes Netzwerk einrichten. In einem überbrückten Netzwerk können andere Maschinen in Ihrem lokalen Netzwerk auf Ihre virtuelle Maschine zugreifen und umgekehrt. Da die IP-Adresse jedoch über DHCP zugewiesen wird, müssen Sieifconfig
in der virtuellen Maschine die IP-Adresse ermitteln.192.168.0.0
nicht funktioniert hat - das Einrollen / Pingen des Host-Computers führte zu Verbindungs-T / O's. Die Verwendung der Adresse von @ Nucleon (in Übereinstimmung mit den Vagrant-Dokumenten zum Thema) funktionierte wie angegeben.config.vm.network :private_network, ip: "192.168.0.0"
und das Einrollen / Pingen des Hosts192.168.0.1
führte zu Verbindungszeitüberschreitungen. Konfigurieren des zu lösenden Netzwerks,192.168.50.4
dh Host verfügbar unter192.168.50.1
.Sie können über das Standard-Gateway im Gastbetriebssystem auf Ports auf dem Hostcomputer zugreifen. (Was normalerweise eine IP von hat
10.0.2.2
.)Zum Beispiel, wenn auf Ihrem Host-Computer ein Webserver auf Port 8000 ausgeführt wird ...
Sie können von der Vagrant-VM aus darauf zugreifen
10.0.2.2:8000
(vorausgesetzt, es10.0.2.2
handelt sich um die IP-Adresse des Standard-Gateways des Gasts):Um die IP des Standard-Gateways im Gastbetriebssystem zu ermitteln, führen Sie
netstat -rn
(oderipconfig
einen Windows-Gast) aus und suchen Sie nach der Zeile mit der Ziel-IP von0.0.0.0
(oder dem Feld "Standard-Gateway" unter Windows):Sie können diese IP programmgesteuert mit extrahieren
netstat -rn | grep "^0.0.0.0 " | tr -s ' ' | cut -d " " -f2
.Quellen: Herstellen einer Verbindung mit dem Host PostgreSQL von einer vagabundierenden Virtualbox-Maschine aus ; Von einem VirtualBox-Gastbetriebssystem aus eine Verbindung zum Host-Computer herstellen?
quelle
ifconfig
undip address
bekam mir nicht das, was ich brauchte,netstat -rn
tat es aber.Fügen Sie Ihrem
~/.ssh/config
Host auf dem Host-Computer Folgendes hinzu :Sie können von Vagrant aus auf einen Dienst am Hostcomputer-Port 52698 zugreifen, sofern Sie sich über angemeldet haben
vagrant ssh
.Sie können bestätigen, dass es funktioniert, indem Sie es
netstat -lt
auf einer vagabundierenden VM ausführen und in den folgenden Zeilen eine Notiz machen:quelle
Ich kann über die lokale IP-Adresse (nicht über die Loopback-Adresse) auf Dienste zugreifen, die auf meinem Host-Computer ausgeführt werden. Ich habe getestet, indem ich einen http-Server auf Port 80 (und dann auf Port 987) erstellt und
curl
197.45.0.10:80 und 197.45.0.10:987 (die tatsächliche IP-Adresse wurde geändert, um die Unschuldigen zu schützen). Es hat beide Male funktioniert und ich habe keine spezielle Vagabundkonfiguration (kein öffentliches Netzwerk, kein weitergeleiteter Port) und obwohl ich einige Ports über PuTTY weitergeleitet habe, habe ich keine Ports 80 und 987 weitergeleitet. Versuchen Sie also möglicherweise, die lokale oder öffentliche IP-Adresse des Host-Computers zu verwenden.Und wenn Sie von einer anderen aus auf eine Gast-Vagabund-Instanz zugreifen (ssh in diese zugreifen) möchten, können Sie
public_network
Port 22 wie folgt aktivieren und weiterleitenVagrantfile
:Solange dieser Port geöffnet ist (dh in Ihrer Routerkonfiguration weitere Portweiterleitungen durchführen), können Sie von überall auf diesen Computer zugreifen, auch von außen.
quelle