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


99

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

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

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

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

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

  • Bridged
    Экспонирует VM в сеть; не портативный

Ответы:


110

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

VirtualBox 4.2.12
Ubuntu 12.04 гость

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

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

Конфигурация сети VirtualBox Конфигурация сети VirtualBox

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


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

Adapter2
NAT

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

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

ls /sys/class/net

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

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

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 и новее.


1
Обновление: VirtualBox 4.3 представил службу NAT, которая выглядит так, как будто она может устранить необходимость в двух интерфейсах. 6.4. Служба трансляции сетевых адресов
Кристиан Лонг

4
Это мне очень помогло, я использую Virtualbox для разработки, и когда я нахожусь в моем доме, все работает правильно, так как у меня есть настройки сети, которые мне нравятся, кошмар начинается, когда я перехожу в другую сеть (семью, компании ... ), Я должен изменить URL-адреса веб-сайтов, удалить некоторые системные файлы, перезагрузить компьютер, я не знаю, сколько раз, и этот список можно продолжить. Это решение не заботится о вашей текущей сети, поэтому мне это нравится ... Просто подключите ваш ПК к любой сети и сосредоточьтесь на своей работе.
Набиль Кадими

1
Благодарю. Не определение адреса шлюза для интерфейса только для хоста решило мои проблемы.
Флориан

2
Отлично. / etc / network / interfaces config был ключ СПАСИБО !!!!
Байрон Уитлок

1
«Обратите внимание, что у eth1 не указан шлюз по умолчанию. Eth2 получит шлюз по умолчанию от dhcp». <- ЭТО КОММЕНТАРИЙ КЛЮЧ.
Pere Pages

16

Я мог бы решить мою проблему с помощью решения Кристиана Лонга. Я добавил 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.

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


Это работает для меня, но я хочу, чтобы у виртуальных машин были статические IP-адреса. В ту минуту, когда я это делаю, интернет перестает работать. Если я настроил оба с DHCP, он работает нормально. Как заставить интерфейс только для хоста получить статический IP?
Умар Фарук Хаваджа

Только тот, который работал. Благодарю. +1
Хорхе Кампос

14

Существует еще один простой способ, при котором нам не нужно создавать новый адаптер 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
    

Это работает только на хосте Linux.
Дерек Махар,

Нам нужен сервис "dnsmasq". В ссылке unix.stackexchange.com/a/384187/61742 у нас есть полная информация о том, что было предложено @Danatela. Спасибо!
Эдуардо Лусио

1
@EduardoLucio, пожалуйста, дайте кредиты Long Bui. Я только что отредактировал этот пост, чтобы сделать его более читабельным.
Данатела

@ Long Bui Спасибо за ваш вклад! Up! Up! Up! Up! Up! Up! = D
Эдуардо Лусио

12

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

1
Спасибо! Я добавил раздел обновления в свой старый ответ и связался с этой новой информацией.
Кристиан Лонг

Я следовал за вашим решением, но пропускаю поддержку nat для enp0s8. Я вручную добавил включение dhcp4 для enp0s8 в netplan и, наконец, поднял оба enp0s3 и enp0s8. Надеюсь, это кому-нибудь поможет.
Дмитрий Пракапенка,

3

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

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

Adapter2 NAT

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


2

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

Я сделал краткое 3-х минутное руководство - для всех, кто хочет узнать, как это работает! http://b0zmeister.wordpress.com/allowing-host-only-virtualbox-guest-to-connect-to-the-internet/


Это отлично сработало для меня, спасибо, что поделились. Это, безусловно, самый простой способ заставить все это работать.
Лоран

Привет Лоран - никаких проблем - рад, что помог! Должен любить запуск ПК с
виртуальной коробкой

Ссылка сейчас мертва. Подумайте о переносе инструкций здесь.
s3v3n
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.