Jak połączyć się z gościem VirtualBox zewnętrznie za pośrednictwem hosta? [Zamknięte]


643

Mam maszynę Wirtualną Ubuntu uruchomioną na moim komputerze z systemem Windows 7. Jak skonfigurować, aby uzyskać dostęp do serwera zewnętrznego za pośrednictwem SSH?

Znalazłem kroki ( konfiguracja dostępu SSH między VirtualBox Host i maszynami wirtualnymi gościa ), aby móc ssh do mojego gościa z mojego hosta, ale nadal mam problem z dostępem do niego przez mój router.

Przypuszczam, że mógłbym zainstalować serwer SSH na moim komputerze z systemem Windows, a następnie kilka razy tunelować (chociaż nie jestem w 100% pewien, czego użyć w kontekście lokalnym, dynamicznym itp. Lub jak skonfigurować wiele tuneli?), ale czy istnieje sposób, aby maszyna wirtualna była bezpośrednio dostępna dla mojego routera, aby móc bezpośrednio przekierować na nią?


3
Jest o wiele łatwiejszy sposób, aby to zrobić, używając Vagrant (który tworzy gotowe maszyny wirtualne (z dostępem do ssh, z dostępem do ip) z pliku konfiguracyjnego lub GUI). Nie znam twojego przypadku użycia, ale napisałem obszerny samouczek na temat tworzenia maszyny Wirtualnej serwera Ubuntu z Vagrant , dostępnej przy pomocy ssh , przydatnej, gdy chcesz skonfigurować maszynę programistyczną opartą na LAMP.
Sliq

1
Vagrant to świetne narzędzie, ale nie jest kompatybilne z nowszymi wersjami virtualbox
LizH

2
Najlepsza odpowiedź jest dalej: stackoverflow.com/a/10410527/2214806
Michael


Odpowiedzi:


1307

Najlepszym sposobem zalogowania się do gościa Linux VirtualBox VM jest przekierowanie portów . Domyślnie powinieneś mieć już jeden interfejs, który używa NAT . Następnie przejdź do ustawień sieci i kliknij przycisk Przekierowywanie portów . Dodaj nową regułę . Jako nazwę reguły wstaw „ssh”. Jako „Port hosta” wstaw 3022. Jako „Port gościa” wstaw 22. Całą resztę reguły można pozostawić pustą.

lub z linii poleceń

VBoxManage modifyvm myserver --natpf1 "ssh,tcp,,3022,,22"

gdzie „mój serwer” to nazwa utworzonej maszyny wirtualnej. Sprawdź dodane reguły:

VBoxManage showvminfo myserver | grep 'Rule'

To wszystko! Upewnij się, że nie zapomnisz zainstalować serwera SSH na maszynie wirtualnej:

sudo apt-get install openssh-server

Aby SSH na maszynie wirtualnej gościa, napisz:

ssh -p 3022 user@127.0.0.1

Gdzie userjest twoja nazwa użytkownika w maszynie wirtualnej.


24
@Keyslinger, czy tego właśnie szukałeś? ssh -p 3022 user@127.0.0.1 To był jeden krok, którego mi brakowało i po prostu poszedłem znaleźć na innej stronie.
D. Woods,

10
Dodałem również przekierowanie portu od 2020 do 80, dzięki czemu mogę łatwo uzyskać dostęp do Apache z przeglądarki przy użyciu 192.0.0.1:2020 . VBoxManage modyfikuje mój serwer --natpf1 "ssh, tcp ,, 2020,, 80"
Eduardo Russo

4
thebigdog, możesz bezgłowy bezpośrednio: VBoxHeadless -s 'vmname'
vkostromin

4
Dlaczego używamy portu 3022, a nie domyślnego 22?
Seraphim

3
Aby ułatwić życie, otwórz ~ / .ssh / config, dodaj Host mybox HostName 127.0.0.1 User myuser Port 3022do tego pliku następujące (sam dodaj wcięcie), a potem wystarczy tylko za ssh myboxkażdym razem :)
vancexu 12.04.16

128

Zmień typ adaptera w VirtualBox na zmostkowany i ustaw gościa na używanie DHCP lub ustaw statyczny adres IP poza granicami DHCP. Spowoduje to, że maszyna wirtualna będzie działać jak normalny gość w sieci domowej. Następnie możesz przekierować.


2
Masz pomysł, jak będzie działać konfiguracja 2 adaptera? Jeden na NAT, a drugi tylko na hoście?
CantGetANick

16
Moim zdaniem udostępnienie maszyny wirtualnej w sieci lokalnej nie jest najlepszą opcją (na przykład w sieci biurowej), rozwiązanie zaproponowane przez @vkostromin utrzymuje hermetyzację maszyny wirtualnej w hoście.
Victor P.

1
@VictorP. czy możesz wyjaśnić, dlaczego nie jest to najlepsza opcja w sieci biurowej? Czy to ze względu na bezpieczeństwo czy?
mdo123

1
Nawet wiedząc, że nie jest to najlepsza opcja, w mojej bieżącej konfiguracji ustawienie adaptera jako zmostkowanego jest jedynym rozwiązaniem, które działa.
James

68

Utrzymanie adaptera NAT i dodanie drugiego adaptera tylko hosta działa niesamowicie i ma kluczowe znaczenie dla laptopów (gdzie sieć zewnętrzna zawsze się zmienia).

http://muffinresearch.co.uk/archives/2010/02/08/howto-ssh-into-virtualbox-3-linux-guests/

Pamiętaj, aby utworzyć sieć tylko dla hosta w samym virtualboxie (GUI -> ustawienia -> sieć), w przeciwnym razie nie możesz utworzyć interfejsu tylko dla hosta na gościu.


2
Tylko ta odpowiedź działała dla mnie, nic więcej nie działało. Dodałem też dodatkowy adapter i działało, nie musiałem edytować /etc/network/interfaces, dzięki!
brokenfoot

3
Zgadzam się, że to najlepsza odpowiedź. W przeciwnym razie, jesteś skoki przez obręcze każdym razem, gdy chcesz uzyskać dostęp do usługi (wspólny ssh, sftpitd), ponieważ trzeba było przejść przez niestandardowym porcie.
Kirk Woll


1
kolejne dobre źródło konfiguracji 2buntu.com/articles/1513/…
mdo123

1
@Sparkler działa sshd? Czy jest zapora zamykająca porty?
orip

23

Jak zrobić sieć tylko dla hosta ( lepszą niż zmostkowaną) dla Solaris 10 i Ubuntu 16.04

Dodaj interfejs tylko do hosta

  1. Virtualbox> Plik> Preferencje> Sieć> Sieci tylko hosta> Dodaj
  2. Zamknij vm.
  3. Ustawienia maszyny wirtualnej> Sieć. Pierwszy adapter powinien być Nat, a drugi tylko Host.
  4. Uruchom cmd.exe i uruchom ipconfig /all. Powinieneś zobaczyć linie:

    Ethernet adapter VirtualBox Host-Only Network:
       ...
       IPv4 Address. . . . . . . . . . . : 192.168.59.1
    

    Drugi adapter w gościu powinien również znajdować się w 192.168.59. *.

  5. Uruchom maszynę wirtualną.

Solaris 10

  1. Sprawdź ustawienia ifconfig -a . Powinieneś zobaczyć e1000g0 i e1000g1. Jesteśmy zainteresowani e1000g1.
  2. ifconfig e1000g down
  3. ifconfig e1000g 192.168.56.10 netmask 255.255.255.0 up
  4. Sprawdź z hosta, czy ten interfejs jest osiągalny: ping 192.168.56.10

Zachowaj te ustawienia po ponownym uruchomieniu

# vi /etc/hostname.e1000g1
192.168.56.10 netmask 255.255.255.0
# reboot

Skonfiguruj usługę ssh ( administrowanie ), aby logowała się jako root (nie zalecane)

Sprawdź, czy ssh jest włączony

# svcs -a | grep ssh
online         15:29:57 svc:/network/ssh:default

Zmodyfikuj / etc / ssh / sshd_config, aby już istniał

PermitRootLogin yes

Uruchom ponownie usługę ssh

svcadm restart ssh

Sprawdź od hosta

ssh root@192.168.56.10

Ubuntu 16.04

Lista interfejsów:

ip addr

Powinieneś zobaczyć trzy interfejsy, takie jak lo, enp0s3, enp0s8. Użyjemy trzeciego.

Edytuj / etc / network / interfaces

auto enp0s8
iface enp0s8 inet static
    address 192.168.56.10
    netmask 255.255.255.0

Potem sudo ifup enp0s8. Sprawdź, czy enp0s8 ma poprawny adres. Powinieneś zobaczyć swój ip:

 $ ip addr show enp0s8
 ...
    inet 192.168.56.10/24 brd 192.168.56.255 scope global secondary enp0s8

Jeśli nie, możesz uciec sudo ifdown enp0s8 && sudo ifup enp0s8

/superuser/424083/virtualbox-host-ssh-to-guest/424115#424115


3
To nie działa, jeśli twoja sieć tylko dla hosta jest włączona 192.168.59.1i podasz 192.168.56.10statyczny adres IP gościa. Cały adres podsieci klasy C musi być dokładnie taki sam, więc 192.168.59.10zamiast tego musiałbyś użyć czegoś takiego jak wewnątrz gościa.
Pytania do kolonistów,

22

Można również użyć Bridged Network (lub „Most Adapter”, w nowszych wersjach) w ustawieniach sieciowych . Spowoduje to umieszczenie maszyny wirtualnej w sieci VLAN na komputerze. Możesz więc po prostu ssh na maszynie wirtualnej w ten sposób.

użytkownik ssh @ IP_OF_VM


Dzięki temu rozwiązaniu połączenie SSH przechodzi przez sieć LAN?
user2233706

16

Aby ssh do maszyny Wirtualnej Ubuntu uruchomionej w VirtualBox z komputera hosta, musisz skonfigurować dwie karty sieciowe dla maszyny wirtualnej.

Przede wszystkim zatrzymaj maszynę wirtualną, jeśli jeszcze nie.

Następnie wybierz maszynę wirtualną i kliknij menu Ustawienia na pasku narzędzi VirtualBox:

wprowadź opis zdjęcia tutaj

Skonfiguruj adapter 1

wprowadź opis zdjęcia tutaj

Skonfiguruj adapter 2

wprowadź opis zdjęcia tutaj

(Uwaga: nie trzeba konfigurować przekierowania portów).

Otóż ​​to. Po skonfigurowaniu możesz uruchomić maszynę wirtualną. Na twojej maszynie wirtualnej konfiguracja sieci będzie wyglądać jak poniżej i będziesz mieć również dostęp do Internetu:

wprowadź opis zdjęcia tutaj

Również na maszynie hosta możesz ssh na maszynie wirtualnej:

wprowadź opis zdjęcia tutaj

Upewnij się, że serwer SSH został zainstalowany i działa na maszynie wirtualnej.

$ ps aux | grep sshd
root 864 0.1 0.5 65512 5392 ? Ss 22:10 0:00 /usr/sbin/sshd -D

Jeśli nie, zainstaluj:

$ sudo apt-get install openssh-server

Również dla twojej informacji:

  • Moja wersja VirtualBox: 5.2.6 r120293 (Qt5.6.2), 2018
  • Moja wersja Ubuntu: Ubuntu 16.04.3 LTS
  • Mój komputer hosta: Windows 10

Jeśli nie masz adaptera tylko do hosta, możesz go utworzyć z:File > Host Network Manager > Create
Cirelli94

Niestety nie dociera do sieci internetowej
Cirelli94

5
SSH Powrót do twojego domu / biura VirtualBox Guest Machine Z INTERNETU

Odpowiedzi udzielone przez innych użytkowników tutaj: How to SSH to a VirtualBox guest externally through a host?

... pomógł mi wykonać zadanie połączenia z Internetu z maszyną gościa mojego komputera domowego. Powinieneś być w stanie łączyć się za pomocą komputerów, tabletów i smartfonów (Android, iPhone itp.). Dodaję jeszcze jeden krok na wypadek, gdyby mógł być pomocny dla kogoś innego:

Oto krótki schemat mojej konfiguracji:

  • Remote device ---> INTERNET --> MODEM --> ROUTER --> HOST MACHINE --> GUEST VM

  • Remote device (ssh client) ---> PASS THRU DEVICES ---> GUEST VM (ssh server)

  • Remote device (leave ssh port 3022) ---> INTERNET --> MODEM --> ROUTER (FWD frm:p3022 to:p3022)--> HOST MACHINE (FWD frm:p3022 to:p22) --> GUEST VM (arrive ssh port 22)

Kluczem było dla mnie uświadomienie sobie, że WSZYSTKIE połączenia były PASSING-THROUGHurządzeniami pośredniczącymi, które mogły dostać się z mojego zdalnego komputera do wirtualnej maszyny gościa w domu - stąd przekierowanie portów!

Uwagi: * Potrzebujesz klienta ssh do żądania bezpiecznego połączenia i działającego serwera ssh do przetworzenia bezpiecznego połączenia.

  • Prześlę port 3022 zgodnie z wybraną odpowiedzią z góry.

  • W razie potrzeby wprowadź adresy IP (modem domowy / router, adres IP hosta, adres IP gościa itp.). Wybrane nazwy to tylko przykłady użycia lub zmiany.

1. Utwórz tunel ssh do portu 3022 na zewnętrznym adresie IP / routera modemu.

ssh client/device possible commands: ssh -p 3022 user-name@home_external_IP

2.Port do przodu = przechodzimy przez połączenie z routera do hosta

  • Upewnij się także, że reguły zapory / IPtable na routerze pozwalają na przekazywanie portów (otwórz w razie potrzeby)

  • Wymagane wpisy EKRANU Pfwd routera: Nazwa aplikacji: SSH_Fwd, Port_from: 3022, Protokół: oba (UDP / TCP), Adres IP: hostIP_address, Port_to: 3022, wszystko inne może być puste

Zasoby oprogramowania routera DD-WRT / Informacje:

3.Host Machine Firewall: otwórz port 3022 # tak przekierowany port może przejść przez maszynę gościa

  • Maszyna hosta: zainstaluj VirtualBox, dodatki gości i maszynę gościa, jeśli jeszcze tego nie zrobiono

  • Skonfiguruj maszynę gościa, a następnie postępuj zgodnie z poniższą sekcją Sieć

  • Użyłem interfejsu VirtualBox GUI do skonfigurowania sieci gościa - łatwiejszej niż CLI

  • Jeśli chcesz użyć innych metod, zapoznaj się z: VirtualBox/manual/ch06.html#natforward

4. Niektórzy sugerują użycie adaptera mostka sieciowego dla gościa = dostęp do sieci LAN i innych urządzeń w sieci LAN. Stanowi to również zwiększone zagrożenie bezpieczeństwa, ponieważ teraz twoja maszyna-gość jest teraz narażona na maszyny LAN i hakerów INTERNETU, jeśli zapora ogniowa nie zostanie poprawnie skonfigurowana. Wybrałem więc adapter sieciowy podłączony do NAT, aby zmniejszyć narażenie na zmostkowane zagrożenia bezpieczeństwa.

Na maszynie gościa wykonaj następujące czynności:

  • Guest Machine VirtualBox Ustawienia sieciowe: Adapter 1: Dołączony do NAT
  • Reguła przekierowania portów VirtualBox maszyny gościa: Nazwa: Zewnętrzny_SSH, Protokół: TCP, Port hosta: 3022, Port gościa 22, Adresy IP hosta i gościa: pozostaw puste
  • kliknij zaliczkę w sekcji Sieć, a następnie kliknij Przekazywanie portów, aby wprowadzić reguły
  • Zapora maszyny gościa: otwórz port 22 #so połączenie ssh może wejść
  • Maszyna gościa: Upewnij się, że serwer ssh jest zainstalowany, poprawnie skonfigurowany i działa
  • Test LINUX, aby sprawdzić, czy serwer ssh działa z poleceniem: status ssh usługi sudo
  • Może sprawdzić netstat, aby sprawdzić, czy połączenie zostało nawiązane z portem 22 na maszynie-gościu

Istnieją również różne serwery ssh i klienci w zależności od używanej platformy.

  • wikipedia/Secure_Shell
  • wikipedia/Comparison_of_SSH_servers
  • wikipedia/Comparison_of_SSH_clients

Dla użytkowników Ubuntu:

  • ubuntu community: SSHOpenSSH/Configuring
  • ubuntu/community: OpenSSH/Keys

To powinno być to. Jeśli popełniłem błąd lub chciałem coś dodać - nie krępuj się tego zrobić - nadal jestem notobem.

Mam nadzieję, że to komuś pomoże. Powodzenia!


5

W przypadku hosta Windows możesz:

  1. W programie virtualbox manager:
    1. wybierz ctrl+ Gw menedżerze virtualbox,
    2. następnie przejdź do panelu sieciowego
    3. dodaj sieć prywatną
      1. upewnij się, że aktywacja DHCP NIE jest wybrana
  2. W zarządzaniu siecią (Windows)
    1. Wybierz nowo utworzony adapter tylko hosta virtualbox i fizyczną kartę sieciową
    2. Kliknij prawym przyciskiem myszy i wybierz „Utwórz most”
  3. Cieszyć się

4

Możesz również zainicjować port przekierowujący do Gościa lub DOWOLNEGO SERWERA od Gościa. Jest to szczególnie przydatne, jeśli gość jest „zablokowany” lub w inny sposób nie może ukończyć opcji ModifyVM (np. Brak pozwolenia na VBoxManage).

Trzy drobne wymagania to: 1) jesteś / możesz zalogować się do VirtualBox Guest (poprzez GUI konsoli, inny gość itp.), 2) masz konto w VirtualBox HOST (lub innym serwerze) oraz 3) SSH i TCP przekazywanie nie jest blokowane.

Zakładając, że możesz spełnić 3 wymagania, są to następujące kroki:

  1. Na Gość uruchom netstat -rni znajdź adres bramy do domyślnego miejsca docelowego trasy 0.0.0.0. Powiedzmy, że to „10.0.2.2”. Ten adres „Bramy” to (jeden z) wirtualnych adresów IP hosta VirtualBox.
  2. Na Goście uruchom, ssh -R 2222:localhost:22 10.0.2.2gdzie „10.0.2.2” to adres IP serwera VirtualBox - LUB - dowolny inny adres IP serwera, na który chcesz przekierować.
  3. Na hoście uruchom, ssh 10.0.2.2 -p2222gdzie 10.0.2.2 jest domyślną bramą / wirtualnym adresem IP VBHost znalezionym w kroku 1. Jeśli NIE jest to host VirtualBox, do którego przekierowujesz port, wówczas polecenie tossh localhost -p2222

4

Wykonaj poniższe kroki, aby zalogować się do maszyny wirtualnej Ubuntu działającej w wirtualnym pudełku z komputera hosta za pomocą putty (bez przekierowywania portów):

  1. W menedżerze Virtualbox wybierz maszynę wirtualną, kliknij ikonę ustawień. Następnie przejdź do Sieci i włącz dwie karty, jak poniżej:

    • Adapter 1 (do dostępu do Internetu): Podłączony do -> NAT, Advanced -> Sprawdź podłączony kabel.
    • Adapter 2: Podłączony do -> Adapter tylko hosta, Zaawansowany -> Sprawdź podłączony kabel i tryb Promiscuous -> Pozwól wszystkim.
  2. Uruchom Ubuntu VM.

  3. Zaloguj się do maszyny wirtualnej jako root.
  4. Zmodyfikuj plik „/ etc / network / interfaces” jak poniżej i zapisz:

    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    
    auto eth1
    iface eth1 inet dhcp
    
  5. Uruchom ponownie maszynę wirtualną.

  6. Zaloguj się do maszyny wirtualnej i uruchom poniższe polecenie, aby sprawdzić adres IP przypisany do eth1:

    ifconfig
    
  7. Użyj tego adresu IP, aby otworzyć sesję Kit dla maszyny wirtualnej.



2

Ubuntu 18.04 LTS

Konfiguracja z mostkiem, aby zobaczyć adres IP serwera i połączyć się bez „przekierowywania portów”

VirtualBox> kliknij prawym przyciskiem myszy na serwerze> ustawienia> Sieć> włącz adapter 2> wybierz „zmostkowany”> Tryb rozwiązły: zezwól wszystkim> Sprawdź podłączony kabel> uruchom serwer

Na serwerze Ubuntu edytuj sudo nano /etc/netplan/*init.yamlplik,

Mój przykładowy plik:

network:
    ethernets:
        enp0s3:
            addresses: []
            dhcp4: true
        enp0s8:
            addresses: [192.168.0.200/24]
            dhcp4: no
            dhcp6: no
            nameservers:
               addresses: [8.8.8.8, 8.8.4.4]
    version: 2

Polecenia, które ci pomogą

nano /etc/netplan/file.yaml     # file to specify the rules of network
reboot now                      # restart ubuntu server right now
netplan apply                   # do after edited *.yaml, to apply changes
ifconfig -a                     # show interfaces with ip, netmask, broadcast, etc...
ping google.com                 # to see if there is internet

Konfiguruj statyczne adresy IP na serwerze Ubuntu 18.04 LTS - za pomocą NetPlan


0

Po prostu ustawienie Mostka na Ustawienia sieciowe pomogło mi.

Twoje IP zmieni się, gdy to zrobisz. Jednak w moim przypadku nie zmieniło się to natychmiast. ifconfigzwrócił ten sam adres IP. Uruchomiłem ponownie vm i boom, sam ip ustawił się na jeden od 192. * i natychmiast uzyskałem dostęp do ssh.


Te informacje, które, jak sądzę, są częściowo lub nawet całkowicie niedokładne w pewnym sensie ogólnym, nie mam pojęcia. downvoter nie zawracał sobie głowy powiedzeniem.
boulder_ruby

Mówiąc „dla niektórych nie działa”.
boulder_ruby

0

W sieciach bezpiecznych ustawienie sieci jako mostka może nie działać. Administratorzy mogą zezwolić tylko na jeden adres MAC na port lub, co gorsza, blokować port, jeśli przełączniki wykryją wiele Mac na jednym porcie.

Moim zdaniem najlepszym rozwiązaniem jest skonfigurowanie dodatkowych interfejsów sieciowych do obsługi dodatkowych usług, które chcesz uruchomić na swoich komputerach. Mam więc interfejs mostka, który pozwala na mostkowanie, kiedy zabieram laptopa do domu i mogę SSH do niego z innych urządzeń w mojej sieci, a także adapter tylko hosta, gdy chcę SSH do mojej maszyny wirtualnej z mojego laptopa, gdy jestem podłączony do sieci Wi-Fi eduroam w kampusie.


0

Użyj karty sieciowej NAT i dodaj port do przodu. Podaj rzeczywisty host ip. Nie używaj 127.0.0.1 ani hosta lokalnego.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.