Бродяга: не может пинговать гостевую машину от хоста
У меня есть 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.