Pracuję nad architekturą usług internetowych. Mam oprogramowanie, które muszę uruchomić na komputerze macierzystym, a nie w Vagrant. Ale chciałbym uruchomić niektóre usługi klienta na gościu.
config.vm.forwarded_port
Parametr Vagranta otworzy port na hoście i wyśle dane do gościa. Ale jak mogę otworzyć port gościa i wysłać dane do hosta? (Nadal jest to przekazywanie portów, ale w odwrotnym kierunku).
vagrant
portforwarding
Dan Fabulich
źródło
źródło
Odpowiedzi:
Kiedy uruchamiasz
vagrant ssh
, faktycznie używa tego podstawowego polecenia: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 obsługuje przekazywanie portów w wybranym kierunku z
-R guestport:host:hostport
opcją. Tak więc, jeśli chcesz połączyć się z portem12345
gościa i przekazać go dolocalhost:80
, użyj tego polecenia: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]
Jak słusznie komentuje Eero, możesz również użyć polecenia
vagrant ssh -- -R 12345:localhost:80
, które ma ten sam efekt w znacznie bardziej zwięzłym poleceniu.źródło
vagrant ssh -- -R 12345:localhost:80
sposób, używając To jest zgodne ze składnią opcji ssh -R [adres_powiązania:] port: host: hostport , gdzie pierwsza liczba to numer portu do nasłuchiwania na komputerze gościa, a ostatnie dwa to adres usługi widoczne z komputera hosta.vagrant ssh-config | ssh -F /dev/stdin $BOX -R $PORT_VM:localhost:$PORT -N
W książce
Vagrant: Up and Running
(data publikacji: 12 czerwca 2013 r.), Napisanej przez twórcę Vagranta, wspomniał, że maszyna gościa nie może uzyskać dostępu do usług działających na maszynie hosta.Zamiast używać
Forwarded Ports
, możesz skonfigurować prywatną sieć za pomocąHost-Only Networks
.Zalety używania
Host-Only Networks
ponadForwarded Ports
Maszyny-gości mogą uzyskiwać dostęp do usług działających na komputerze-hoście
Ta funkcja rozwiąże Twój problem.
Maszyny-gości mogą uzyskiwać dostęp do usług działających na innym komputerze-gościu
Ta funkcja jest bardzo przydatna do rozdzielania usług na wiele maszyn, aby dokładniej naśladować środowisko produkcyjne.
Bezpieczne
Komputery zewnętrzne nie mają możliwości uzyskania dostępu do usług działających na komputerach-gościach
Mniej pracy
Nie ma potrzeby konfigurowania wszystkich
Forwarded Port
Jak skonfigurować
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 # 2Posiadanie tej linii w
Vagrantfile
testamencie poinstruuje włóczęgę, aby utworzyć prywatną sieć, która ma statyczny adres IP:192.168.0.0
Adres IP hosta jest zawsze tym samym adresem IP, ale z ostatnim oktetem jako 1. W poprzednim przykładzie komputer hosta miałby adres IP
192.168.0.1
.źródło
Vagrant: Up and Running
) można skonfigurować sieć mostkową. W sieci z mostem inne maszyny w sieci lokalnej mogą uzyskać dostęp do maszyny wirtualnej i odwrotnie. Ale ponieważ adres IP jest przypisywany przez DHCP, musiszifconfig
znaleźć jego adres IP na maszynie wirtualnej.192.168.0.0
nie działa - zwijanie / pingowanie komputera hosta powodowało problemy z połączeniem. Korzystanie z adresu @ Nucleon (zgodne z dokumentami Vagrant na ten temat) działało zgodnie z reklamą.config.vm.network :private_network, ip: "192.168.0.0"
i zawijanie / pingowanie hosta192.168.0.1
powodowało przekroczenie limitu czasu połączenia. Konfiguracja sieci do192.168.50.4
rozwiązania problemu, tj. Host dostępny pod adresem192.168.50.1
.Dostęp do portów na komputerze hosta można uzyskać za pośrednictwem bramy domyślnej w systemie-gościu. (Który zwykle ma adres IP
10.0.2.2
.)Na przykład, jeśli masz serwer WWW działający na porcie 8000 na komputerze głównym ...
Możesz uzyskać do niego dostęp z wnętrza maszyny wirtualnej Vagrant pod adresem
10.0.2.2:8000
(podany10.0.2.2
jest adres IP domyślnej bramy gościa):Aby znaleźć adres IP bramy domyślnej w systemie gościa, uruchom
netstat -rn
(lubipconfig
na komputerze gościa systemu Windows) i poszukaj wiersza z docelowym adresem IP0.0.0.0
(lub pola oznaczonego „Brama domyślna” w systemie Windows):Możesz wyodrębnić ten adres IP programowo za pomocą
netstat -rn | grep "^0.0.0.0 " | tr -s ' ' | cut -d " " -f2
.Źródła: Jak połączyć się z hostem PostgreSQL z wirtualnej maszyny wirtualnej ; Połączyć się z hostem z systemu gościa VirtualBox?
źródło
ifconfig
iip address
nie dostałem tego, czego potrzebowałem, alenetstat -rn
zrobiłem.Dodaj następujące elementy do swojego
~/.ssh/config
na komputerze hosta:Umożliwia dostęp do usługi na porcie 52698 hosta firmy Vagrant, o ile jesteś zalogowany przez
vagrant ssh
.Możesz potwierdzić, że działa, uruchamiając
netstat -lt
na vagrant VM i notując w następujących wierszach:źródło
Mogę uzyskać dostęp do usług działających na moim komputerze głównym za pośrednictwem lokalnego adresu IP (nie adresu sprzężenia zwrotnego). Testowałem, tworząc serwer http na porcie 80 (a następnie na porcie 987) i
curl
197.45.0.10:80 i 197.45.0.10:987 (rzeczywisty adres IP został zmieniony, aby chronić niewinnych). To działało za każdym razem i nie mam żadnej specjalnej konfiguracji włóczęgi (brak public_network, brak forwarded_port) i chociaż mam kilka portów przekierowanych przez PuTTY, nie mam przekierowanych portów 80 i 987. Więc może spróbuj użyć lokalnego lub publicznego adresu IP komputera hosta.A jeśli chcesz uzyskać dostęp (ssh do) jednej instancji wędrowca gościa z innej, możesz włączyć,
public_network
a także przekierować z portu 22 wVagrantfile
następujący sposób:Dopóki ten port jest otwarty (tj. Przekierowuj więcej portów w konfiguracji routera), możesz uzyskać dostęp do tej maszyny z dowolnego miejsca, nawet ze świata zewnętrznego.
źródło