W programie VirtualBox, jak skonfigurować maszyny wirtualne dostępne tylko dla hosta, które mają dostęp do Internetu?

98

Podczas konfigurowania maszyn wirtualnych za pomocą VirtualBox często chcę mieć następujące cechy

  • VM ma statyczny adres IP
  • host może uzyskać dostęp do VM bez przekierowania portów
  • VM może uzyskać dostęp do Internetu
  • Mogę przenosić laptopa z sieci do sieci (np. Z domu do biura do kawiarni) bez obawy o zabezpieczenie lub ponowną konfigurację vm

Żadna z metod połączenia sieciowego VirtualBox sama nie spełnia tych wymagań.

  • NAT
    wymaga przekierowania portów, jeśli chcesz połączyć się z maszyną wirtualną z hosta.

  • Tylko host
    Vm nie może uzyskać dostępu do Internetu, chyba że host jest routerem.

  • Bridged
    Udostępnia vm w sieci; nieprzenośny.

Christian Long
źródło

Odpowiedzi:

110

Mogę uzyskać konfigurację, którą chcę, konfigurując dwa adaptery w maszynie wirtualnej.

VirtualBox 4.2.12
Gość Ubuntu 12.04

W VirtualBox> Preferencje> Sieć skonfiguruj sieć tylko dla hosta.

Mój nazywa się vboxnet0, jest konfigurowany ręcznie:
ip 192.168.56.1
maska ​​sieci 255.255.255.0
nie dhcp

Konfiguracja sieci VirtualBox Konfiguracja sieci VirtualBox

Następnie w ustawieniach sieciowych maszyny wirtualnej skonfiguruj dwie karty:


Tylko host adaptera 1 , vboxnet0

Adapter2
NAT

Uruchom maszynę wirtualną i zaloguj się za pomocą konsoli VirtualBox.

Uruchom to, aby zobaczyć swoje adaptery:

ls /sys/class/net

W moim przypadku adaptery zostały nazwane eth1 i eth2 (i lo - interfejs pętli zwrotnej).

Następnie edytuj konfigurację sieci.

sudoedit /etc/network/interfaces


# The loopback network interface
auto lo
iface lo inet loopback

# Host-only interface
auto eth1
iface eth1 inet static
        address         192.168.56.20
        netmask         255.255.255.0
        network         192.168.56.0
        broadcast       192.168.56.255

# NAT interface
auto eth2
iface eth2 inet dhcp

Zauważ, że eth1nie określono domyślnej bramy. eth2dostanie domyślną bramę z dhcp.


Aktualizacja marca 2018 r

Zobacz tę odpowiedź z @ Hugo14453, aby uzyskać zaktualizowaną wersję, która współpracuje z Ubuntu 17.10 i nowszymi.

Christian Long
źródło
1
Aktualizacja: VirtualBox 4.3 wprowadził usługę NAT, która wygląda jakby mogła wyeliminować potrzebę użycia dwóch interfejsów. 6.4 Usługa tłumaczenia adresów sieciowych
Christian Long
4
Bardzo mi to pomogło, używam Virtualboksa do programowania, a kiedy jestem w domu, wszystko działa poprawnie, ponieważ mam konfigurację sieci według moich upodobań, koszmar zaczyna się, gdy przeprowadzam się do innej sieci (rodziny, firm ... ), Muszę zmienić adresy URL stron internetowych, usunąć niektóre pliki systemowe, uruchomić ponownie Nie wiem ile razy i lista jest długa. To rozwiązanie nie dba o twoją obecną sieć, dlatego mi się podoba ... Po prostu podłącz komputer do dowolnej sieci i skoncentruj się na swojej pracy.
Nabil Kadimi
1
Dzięki. Brak zdefiniowania adresu bramy dla interfejsu tylko hosta rozwiązał moje problemy.
Florian
2
Doskonały. Konfiguracja / etc / network / interfaces była kluczem DZIĘKI !!!!
Byron Whitlock,
1
„Zauważ, że eth1 nie ma domyślnej bramy. Eth2 dostanie domyślną bramę z dhcp.” <- KOMENTARZ JEST KLUCZEM.
Pere Pages
16

Mógłbym rozwiązać mój problem za pomocą rozwiązania Christian Long. Dodałem 2 adaptery:

Adapter 1 - NAT

Adapter 2 - tylko host, vboxnet0

Jedyna różnica dotyczyła pliku interfejsów maszyny wirtualnej:

sudoedit /etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback
# NAT
auto eth0
iface eth0 inet dhcp
# Host only
auto eth1
iface eth1 inet dhcp

W konfiguracji sieci VirtualBox pozostawiłem zaznaczone DHCP.

Po ponownym uruchomieniu VM wszystko działało dobrze.

Alan Camillo
źródło
To działa dla mnie, ale chcę, aby maszyny wirtualne miały statyczne adresy IP. Gdy tylko to zrobię, Internet przestaje działać. Jeśli skonfiguruję oba z DHCP, działa dobrze. Jak sprawić, aby interfejs tylko hosta uzyskał statyczny adres IP?
Umar Farooq Khawaja,
Tylko jeden działał. Dzięki. +1
Jorge Campos
14

Istnieje inny prosty sposób, w jaki nie musimy tworzyć nowego adaptera NAT

  1. Na komputerze hosta dodaj następujące reguły iptables. Spowoduje to przekazanie pakietów przez host i do Internetu:

    sudo iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT 
    
    sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    
    sudo iptables -A POSTROUTING -t nat -j MASQUERADE
    
  2. Będziesz także musiał włączyć przekazywanie IP na hoście, wydając następujące polecenie:

    sudo sysctl -w net.ipv4.ip_forward=1
    
Long Bui
źródło
Działa to tylko na hoście Linux.
Derek Mahar
Potrzebujemy usługi „dnsmasq”. W linku unix.stackexchange.com/a/384187/61742 mamy pełne informacje na temat tego, co zasugerował @Danatela. Dzięki!
Eduardo Lucio,
1
@EduardoLucio prosimy o uznanie Long Bui. Właśnie edytowałem ten post, aby był bardziej czytelny.
Danatela,
@ Long Bui Dziękujemy za Twój wkład! W górę! W górę! W górę! W górę! W górę! W górę! = D
Eduardo Lucio,
12

Konfiguracja sieci uległa zmianie w Ubuntu 17.10.1. Teraz używasz konfiguracji netplan.

Śledziłem ten przewodnik tutaj

Jako migrację odpowiedzi chrześcijanina wykonaj następujące czynności:

Utwórz nowy plik konfiguracyjny w / etc / netplan, aby przechowywać konfigurację adaptera tylko na hoście.

na przykład sudo nano /etc/netplan/02-netcfg.yaml

Wpisz następujące informacje, aby skonfigurować statyczny adres IP 192.168.56.12, gdzie enp0s3jest nazwa adaptera tylko do hosta.

network:
    version: 2
    renderer: networkd
    ethernets:
        enp0s3:
            addresses:
                - 192.168.56.12/24
            dhcp4: no

Następnie uruchom następujące dwa polecenia:

sudo netplan generate
sudo netplan apply

NAT powinien działać bez konfiguracji, uruchom, ifconfigaby zobaczyć wynik:

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.12  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::a00:27ff:fe06:6cdd  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:06:6c:dd  txqueuelen 1000  (Ethernet)
        RX packets 252  bytes 23076 (23.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 208  bytes 30015 (30.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.3.15  netmask 255.255.255.0  broadcast 10.0.3.255
        inet6 fe80::a00:27ff:fe4d:a6b8  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:4d:a6:b8  txqueuelen 1000  (Ethernet)
        RX packets 95  bytes 94894 (94.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 85  bytes 7436 (7.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
Hugo
źródło
1
Dzięki! Dodałem sekcję aktualizacji do mojej starej odpowiedzi i podłączyłem do tej nowej informacji.
Christian Long
Śledziłem twoje rozwiązanie, ale brakuje mi wsparcia dla enp0s8. Dodałem ręcznie opcję Enable dhcp4 dla enp0s8 w netplan i wreszcie uruchomiłem enp0s3 i enp0s8. Mam nadzieję, że to komuś pomoże.
Dzmitry Prakapenka
3

Właśnie dodałem 2 adaptery:

Tylko host adaptera 1, vboxnet0

Adapter2 NAT

I działa idealnie, mogę uzyskać dostęp do maszyny wirtualnej z hosta i mam internet na vm.

Guillermo Gonzalez
źródło
2

Tak, miałem ten problem, to był całkowity ból! Ale rozwiązałem to, po prostu instalując serwer proxy Squid Cache na moim fizycznym komputerze i w ten sposób - moje komputery z wirtualną skrzynką tylko na hoście mogły połączyć się z Internetem!

Zrobiłem szybki 3-minutowy przewodnik tutaj - dla każdego, kto chce, jak to działa! http://b0zmeister.wordpress.com/allowing-host-only-virtualbox-guest-to-connect-to-the-internet/

B0zmeister
źródło
To działało dla mnie świetnie, dziękuję za dzielenie się. To zdecydowanie najprostszy sposób, aby wszystko działało.
laurent
Cześć Laurent - bez problemów - cieszę się, że pomógł! Uwielbiam uruchamiać komputery Virtualbox w innej sieci - ale - z działającym połączeniem internetowym :)
B0zmeister
Link jest już martwy. Rozważ przeniesienie instrukcji tutaj.
s3v3n