Бродяга: не может пинговать гостевую машину от хоста

У меня есть Mac OS с установленным бродягой. На гостевой машине у меня Ubuntu 12. Итак, что бы я хотел сделать, это ping guest machine от хоста.

Гостевой аппарат, подключенный к NAT (в соответствии с настройками VirtualBox)

Я нашел только один интерфейс на гостевой машине (кроме lo):

eth0      Link encap:Ethernet  HWaddr 08:00:27:88:0c:a6  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe88:ca6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:581 errors:0 dropped:0 overruns:0 frame:0
          TX packets:410 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:61376 (61.3 KB)  TX bytes:51599 (51.5 KB)

Дело в том, что нет IP-адреса в сети 10.0.2. * на хосте. Хост-машина имеет несколько интерфейсов vboxnet, но у всех их нет IP-адресов:

vboxnet0: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
          ether 0a:00:27:00:00:00 
vboxnet1: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
          ether 0a:00:27:00:00:01 
vboxnet2: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
          ether 0a:00:27:00:00:02 
vboxnet3: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
          ether 0a:00:27:00:00:03 

Есть ли у вас какие-либо идеи, почему ip-адрес не назначается на хост-машину VirtualBox? Что я могу сделать, чтобы иметь возможность ping gust machine?

Вот мой бродячий файл (я удалил некоторые прокомментированные строки, которые я не использую):

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com.

# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "hashicorp/precise64"

# The url from where the 'config.vm.box' box will be fetched if it
# doesn't already exist on the user system.
# config.vm.box_url = "http://domain.com/path/to/above.box"

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 3306, host: 8086
config.vm.network "forwarded_port", guest: 27017, host: 27017

config.vm.synced_folder "/Users/KoulSlou/Documents/Cloudware12.10", "/vagrant", owner:     "www-data", group: "www-data"
config.vm.synced_folder "/Users/KoulSlou/Documents/Cloudware/public","/cloudware", owner: "www-data", group: "www-data"

# Create a private network, which allows host-only access to the machine
# using a specific IP.
#config.vm.network "private_network", ip: "192.168.1.2"

# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"

# If true, then any SSH connections made will enable agent forwarding.
# Default value: false
# config.ssh.forward_agent = true
...

end

Ответ 1

По умолчанию (т.е. когда вы не трогаете какие-либо сетевые конфигурации), Vagrant настраивает виртуальные машины в VirtualBox для присоединения своего первого интерфейса (eth0) к " NAT" (не путайте его с помощью NAT Network, который является другим вариантом в VirtualBox).

Когда ваш интерфейс VM подключен к NAT, гость получит 10.0.2.15 IP. На стороне хоста вы увидите только интерфейс vboxnet # без IP. Вы можете подумать об этом интерфейсе как о частном маршрутизаторе для этого гостя.

ВМ, подключенные к NAT, не маршрутизируются из внешнего мира. Это по дизайну и что одна из причин, почему vboxnet # интерфейс не имеет IP. Виртуальные машины могут получить доступ к "внешнему миру", таким как Интернет и хост-компьютер, но не могут быть доступны из внешнего мира без переадресации портов.

Если поведение по умолчанию не является тем, что вы ищете, Vagrant обеспечивает абстракцию сетевого уровня на уровне высокого уровня:

  • Частная сеть. Это создаст новую подсеть, которая не должна сталкиваться с подсети хоста (или в любых других подсетях, к которым может иметь место хост). В VirtualBox это будет настроено путем присоединения дополнительного интерфейса к " Только для хоста".
  • Общая сеть. Ваши виртуальные машины будут получать IP-адрес из той же подсети, что и ваш хост. В основном это похоже на создание новой машины в той же сети, что и ваш хост. В VirtualBox это будет настроено путем присоединения дополнительного интерфейса к " Бридж-адаптеру".

Более сложные сетевые конфигурации возможны путем настройки сети через конкретную конфигурацию поставщика.

У каждой конфигурации есть свои плюсы и минусы, и это действительно зависит от того, что вы планируете достичь. Для дополнительной информации проверьте документы VirtualBox о сети.

Ответ 2

Я был точно в одном и том же случае, вот решение, которое сработало для меня.

Если ваш vm встал, остановите его:

vagrant halt

Затем перейдите в свою бродячую коробку и откройте VagrantFile. Раскомментируйте (или добавьте вручную) следующую строку внутри него

 config.vm.network "public_network"

Это позволит убедиться, что в следующий раз, когда вы "vagrant up" vm, он будет убедиться, что ваш vm получит IP-адрес из той же подсети, что и ваш хост (подробнее см. @m1keil answer).

Затем сделайте свой vm снова:

vagrant up

В моем случае он спросил, какой интерфейс я должен использовать для сетевого моста, вот отрывок из того, что у меня было:

==> default: Available bridged network interfaces:
1) en0: Ethernet
2) en1: Wi-Fi (AirPort)
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
    default: Which interface should the network bridge to? 1
==> default: Preparing network interfaces based on configuration...

Обратите внимание, что он сообщает вам, какие у вас доступные интерфейсы. Введите число, соответствующее требуемому интерфейсу, в моем случае я набрал 1 (для en0: Ethernet).

И, наконец, подключитесь к своей бродяжнейшей коробке. В моем случае:

vagrant ssh

Затем с хоста, если вы наберете ifconfig, вы все равно не сможете увидеть ip-адрес своего vm, НО, если вы наберете ifconfig из своего vm, он предоставит вам IP-адрес, который вы можете выполнить ping/доступ с вашего хоста.

Примечание. Если вы хотите выполнить ping/access ваш хост от вашего гостя, убедитесь, что ваш брандмауэр выключен ( "Система" > "Настройки" > "Безопасность" ). Брандмауэр не влияет на пинг с хоста на vm, хотя.

Ответ 3

Я не уверен, почему вы видите IP-адрес у гостя, но вы вообще не настраиваете какие-либо виртуальные сети, учитывая этот бродячий файл. Вам нужно раскомментировать строку config.vm.network "private network", а затем настроить IP-адрес.

Настройка по умолчанию для виртуального бокса заключается в том, чтобы разместить хост в 10.0.0.2 и выставить весь диапазон 10.0.0.0/8 в качестве локального адреса, поэтому я думаю, что что-то в диапазоне 10.xxx будет работать для клиента vm.