В VirtualBox, как мне настроить виртуальные машины только для хоста, которые могут получить доступ к Интернету?

88

При настройке виртуальных машин с VirtualBox мне часто нужны следующие характеристики

  • vm имеет статический ip
  • хост может обращаться к vm без переадресации портов
  • vm может получить доступ к интернету
  • Я могу переместить свой ноутбук из сети в сеть (например, из дома в офис в кофейный магазин), не беспокоясь о том, чтобы защитить или переконфигурировать vm

Ни один из методов сетевого подключения VirtualBox не выполняет эти требования самостоятельно.

  • NAT
    Требуется перенаправление портов, если вы хотите подключиться к vm от хоста.

  • Внутрикомпьютерная
    Vm не может получить доступ к Интернету, если хост не является маршрутизатором.

  • Мостовое
    Предоставляет vm сети; не переносится.

задан Christian Long 11.05.2013 в 08:00
источник

6 ответов

104

Я могу получить нужную настройку, установив два адаптера на vm.

VirtualBox 4.2.12
Ubuntu 12.04 гость

В VirtualBox > Предпочтения > Сеть, настройте сеть только для хоста.

Mine называется vboxnet0, он настроен вручную:
ip 192.168.56.1
netmask 255.255.255.0
нет dhcp

Затем в сетевых настройках виртуальной машины настройте два адаптера:

Адаптер 1
только хост, vboxnet0

Adapter2
NAT

Загрузите виртуальную машину и выполните вход через консоль VirtualBox.

Запустите это, чтобы увидеть свои адаптеры:

ls /sys/class/net

В моем случае адаптеры были названы eth1 и eth2 (и lo, интерфейс loopback).

Затем отредактируйте конфигурацию сети.

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

Обратите внимание, что eth1 не имеет заданного по умолчанию шлюза. eth2 получит шлюз по умолчанию из dhcp.

Обновление марта 2018 года

См. этот ответ от @ Hugo14453 для обновленной версии, которая работает с Ubuntu 17.10 и новее.

    
ответ дан Christian Long 11.05.2013 в 08:00
источник
16

Я мог бы решить свою проблему с помощью решения Christian Long. Я добавил 2 адаптера:

Адаптер 1 - NAT

Адаптер 2 - только хост, vboxnet0

Единственное отличие было в файле интерфейсов VM:

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

В конфигурации сети VirtualBox я отключил DHCP.

После перезагрузки виртуальной машины все работает нормально.

    
ответ дан Alan Camillo 09.12.2013 в 17:02
13

Существует еще один простой способ, которым нам не нужно создавать новый адаптер NAT

  1. На главном компьютере добавьте следующие правила iptables. Это отправит пакеты через хост и в Интернет:

    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. Вам также необходимо включить переадресацию IP-адресов на хосте, выполнив следующую команду:

    sudo sysctl -w net.ipv4.ip_forward=1
    
ответ дан Long Bui 03.08.2015 в 05:33
8

Конфигурация сети изменилась в Ubuntu 17.10.1. Теперь вы используете конфигурацию netplan.

Я следил за этим руководством здесь

Как переход христианского ответа, сделайте следующее:

Создайте новый файл конфигурации внутри / etc / netplan, чтобы сохранить конфигурацию адаптера только для хоста.

, например, sudo nano /etc/netplan/02-netcfg.yaml

Введите следующую конфигурацию для статического IP-адреса 192.168.56.12, где enp0s3 - имя вашего адаптера только для хоста.

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

Затем запустите следующие две команды:

sudo netplan generate
sudo netplan apply

NAT должен работать без конфигурации, запустите ifconfig , чтобы увидеть результат:

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 09.03.2018 в 19:09
2

Я просто добавил 2 адаптера:

Адаптер 1 только хост, vboxnet0

Adapter2 NAT

И он отлично работает, я могу получить доступ к виртуальной машине с хоста, и у меня есть интернет на vm.

    
ответ дан Guillermo Gonzalez 25.02.2014 в 01:52
1

Да, у меня была эта проблема, это была полная боль! Но я решил это, просто установив прокси-сервер Squid Cache на свой физический ПК, и таким образом - мои виртуальные компьютеры с виртуальным хостом только для хостинга могут подключаться к Интернету!

Я сделал быстрый 3-минутный гид здесь - для тех, кто хочет, чтобы он работал! Ссылка

    
ответ дан B0zmeister 10.08.2013 в 15:57