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

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

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

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

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

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

  • Соединенный
    Предоставляет доступ к виртуальной машине в сети; не переносится.

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

VirtualBox 4.2.12
Ubuntu 12.04 гость

>>В настройках сети VirtualBox настройте сеть только для хоста.

Мой называется vboxnet0, он настраивается вручную:
ip 192.168.56.1
маска сети 255.255.255.0
нет dhcp

VirtualBox network configurationVirtualBox network configuration

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

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

Адаптер2
натуральный

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

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

ls /sys/class/net

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

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

sudoedit /etc/network/interfaces# The loopback network interfaceauto loiface lo inet loopback# Host-only interfaceauto eth1iface eth1 inet static        address         192.168.56.20        netmask         255.255.255.0        network         192.168.56.0        broadcast       192.168.56.255# NAT interfaceauto eth2iface eth2 inet dhcp

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


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

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

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

Адаптер 1 - NAT

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

Единственное различие было в файле интерфейсов виртуальной машины:

sudoedit /etc/network/interfaces# The loopback network interfaceauto loiface lo inet loopback# NATauto eth0iface eth0 inet dhcp# Host onlyauto eth1iface eth1 inet dhcp

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

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

Конфигурация сети изменилась в 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 generatesudo 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 0enp0s8: 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

Есть еще один простой способ, с помощью которого нам не нужно создавать новый адаптер 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 ACCEPTsudo iptables -A POSTROUTING -t nat -j MASQUERADE
  2. Вам также нужно будет включить переадресацию IP-адресов на хосте, выполнив следующую команду:

    sudo sysctl -w net.ipv4.ip_forward=1

Я только что добавил 2 адаптера:

Только адаптер 1host, vboxnet0

Адаптер2NAT

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

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

Я сделал краткое 3-минутное руководство для всех, кто хочет знать, как это работает.