Як у VirtualBox налаштувати віртуальну машину, лише для хоста, яка має доступ до Інтернету?


98

Встановлюючи віртуальні машини з VirtualBox, мені часто потрібні такі характеристики

  • vm має статичний ip
  • хост може отримати доступ до vm без переадресації порту
  • vm може отримати доступ до Інтернету
  • Я можу перенести свій ноутбук з мережі в мережу (наприклад, з дому в офіс до кафе-кофемашини), не переживаючи про безпеку або перенастроювання vm

Жоден із способів підключення до мережі VirtualBox не задовольняє ці вимоги самостійно.

  • NAT
    Потрібна переадресація порту, якщо ви хочете підключитися до vm від хоста.

  • Тільки для хоста
    Vm не може отримати доступ до Інтернету, якщо хост не є маршрутизатором.

  • Bridged
    Виставляє vm в мережу; не портативний.

Відповіді:


110

Я можу отримати потрібну установку, встановивши два адаптери на vm.

VirtualBox 4.2.12
Ubuntu 12.04 гість

У VirtualBox> Налаштування> Мережа налаштуйте мережу, що використовується лише для хостів.

Шахта називається vboxnet0, вона налаштована вручну:
ip 192.168.56.1
маска 255.255.255.0
немає dhcp

Конфігурація мережі VirtualBox Конфігурація мережі VirtualBox

Потім у мережевих налаштуваннях для віртуальної машини встановіть два адаптери:


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

Адаптер2
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. Служба перекладу мережевих адрес
Christian Long

4
Це мені дуже допомогло, я використовую Virtualbox для розвитку, і коли я перебуваю в своєму будинку, все працює правильно, оскільки я налаштував мережу на свій смак, кошмар починається, коли я переїжджаю в іншу мережу (сім’я, компанії ... ), Мені потрібно змінити URL-адреси веб-сайтів, видалити деякі системні файли, перезавантажити. Я не знаю, скільки разів і список продовжується. Це рішення не стосується вашої поточної мережі, тому мені це подобається ... Просто підключіть свій ПК до будь-якої мережі та зосередьтеся на вашій роботі.
Набіл Кадімі

1
Дякую. Не визначення адреси шлюзу для інтерфейсу, що використовується лише для хостів, вирішив мої проблеми.
Флоріан

2
Ідеально. / і т.д. / конфігурація мережі / інтерфейсів була ключовою СПАСИБО !!!!
Байрон Уїтлок

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.

Після перезавантаження VM все працювало нормально.


Це працює для мене, але я хочу, щоб у машин VM були статичні 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 Дякую за ваш внесок! Вгору! Вгору! Вгору! Вгору! Вгору! Вгору! = 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

Адаптер2 NAT

І це працює ідеально, я можу отримати доступ до віртуальної машини від хоста, і в мене є інтернет на vm.


2

Так, у мене була ця проблема, це був загальний біль! Але я вирішив це, просто встановивши сервер Squid Cache Proxy на свій фізичний ПК, і таким чином - мої віртуозні ПК, доступні лише для хостів, могли підключитися до Інтернету!

Я зробив тут швидкий 3-хвилинний посібник тут - для всіх, хто хоче, як це працює! http://b0zmeister.wordpress.com/allowing-host-only-virtualbox-guest-to-connect-to-the-internet/


Для мене це спрацювало чудово, дякую за обмін. Це далеко не найпростіший спосіб змусити це працювати.
Лоран

Привіт Лоран - жодних проблем - радий, що це допомогло! Мені подобається запускати ПК з віртуальними скриньками з іншої мережі, але - з підключенням до Інтернету :)
B0zmeister

Посилання зараз мертва. Розгляньте тут інструкції.
s3v3n
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.