34

Так что у меня проблемы с бродячей настройкой 'hashicorp/ точный 64' в моей книге MAC.

Во-первых, мой конфиг:

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.network "public_network", type: "dhcp", :bridge => 'en4: Thunderbolt Ethernet'
  config.vm.hostname = "mddirector"
end

Это выход "бродяги вверх"

==> default: Attempting graceful shutdown of VM...
==> default: Checking if box 'hashicorp/precise64' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: bridged
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
GuestAdditions 4.3.10 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /Users/garthm/Projects/vagrant
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: to force provisioning. Provisioners marked to run always will still run.

'ifconfig' показывает следующее:

vagrant@mddirector:~$ ifconfig
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:725 errors:0 dropped:0 overruns:0 frame:0
          TX packets:544 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:90824 (90.8 KB)  TX bytes:63375 (63.3 KB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:2f:bb:6a
          inet addr:10.0.24.118  Bcast:10.0.31.255  Mask:255.255.248.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3490 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:345981 (345.9 KB)  TX bytes:1102 (1.1 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Моя проблема в том, что я могу пропинговать виртуальную машину с хост-машины (IP: 10.0.24.112), другие люди могут пропинговать мою виртуальную машину (10.0.24.XXX), моя виртуальная машина может пропинговать мой devbox (IP: 10.10.116.254), я могу пропинговать настройки виртуальной машины других разработчиков из моего devbox (не Vagrant, IP: 10.10.116.254), но я не могу пропинговать свою виртуальную машину из своего devbox и другие разработчики не могут пропинговать мою виртуальную машину из своего devbox.

У них есть настройки виртуальной машины только с сетевым адаптером Bridged, но по какой-то причине у vagrant есть и NAT, и Bridged, хотя я указал bridged в конфигурации. Как видите, для Vagrant VM есть два IP-адреса, что кажется неправильным. Вы также можете, когда он загружается, он выполняет переадресацию порта на Adapter 1, который является адаптером NAT, что означает, что он звучит так, как будто он использует адаптер NAT по умолчанию для всего.

Как избавиться от адаптера NAT и использовать только мост?

Если я отредактирую настройки VirtualBox и отключу адаптер NAT, так что есть только адаптер с мостовыми соединениями и загружаю коробку через VirtualBox (то есть: не использую vagrant up), то у него есть только eth0 с IP-адресом, который можно проверить на моем devbox что я и ищу. Если я попытаюсь прыгнуть в окно после редактирования настроек VirtualBox и отключения адаптера NAT, я получу следующую ошибку:

There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["modifyvm", "7f1c12f7-74cd-4c6b-aa5a-16d6209cf2b3", "--natpf1", "ssh,tcp,127.0.0.1,2222,,22"]

Stderr: VBoxManage: error: A NAT rule of this name already exists
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component NATEngine, interface INATEngine, callee nsISupports
VBoxManage: error: Context: "AddRedirect(Bstr(strName).raw(), proto, Bstr(strHostIp).raw(), RTStrToUInt16(strHostPort), Bstr(strGuestIp).raw(), RTStrToUInt16(strGuestPort))" at line 1655 of file VBoxManageModifyVM.cpp

Если я немедленно снова выполню vagrant, он снова включит адаптер NAT, и мы снова столкнемся с той же проблемой.

4 ответа4

20

eth0 как NAT является фундаментальным требованием Vagrant в его текущем состоянии. Но вы можете переопределить конфигурацию маршрутизатора по умолчанию для eth1 .

Из Бродячих документов:

Маршрутизатор по умолчанию

В зависимости от настроек, вы можете переопределить конфигурацию маршрутизатора по умолчанию вручную. Это необходимо, если вам нужен доступ к Vagrant из других сетей через общедоступную сеть. Для этого вы можете использовать скрипт инициатора оболочки:

config.vm.network "public_network", ip: "192.168.0.17" # маршрутизатор по умолчанию config.vm.provision "shell", выполнить: "Always", inline: "route add default gw 192.168.0.1" # default router ipv6 config .vm.provision "shell", запустить: "always", inline: "route -A inet6 добавить gw fc00:: 1 eth1" # удалить gw по умолчанию в eth0 config.vm.provision "shell", выполнить: "always" , inline: "eval` route -n | awk '{if ($ 8 == \"eth0 \" && $ 2!= \"0.0.0.0 \") print \"route del default gw \" $ 2; } ' `»

Обратите внимание, что вышеупомянутое довольно сложно и может зависеть от гостевой ОС, но мы документируем примерное представление о том, как это сделать, потому что это общий вопрос.

9

(Извините, довольно наивно про vagrant/virtualbox, так что простите за отсутствие правильной сетевой терминологии)

Ваш выбор моста: en4) Вероятнее всего, проблема с Thunderbolt .

Вот то, что я предполагаю, что вы хотите / нужно, а не то, что вы просили:

  • Возможность входа по SSH для vagrant для управления вашим виртуальным компьютером с вашего устройства разработки (хоста). Это то, что делает NAT с переадресацией портов. Это ничего не портит, так что просить об этом не так уж и полезно. И это видно на адаптере 1 в VirtualBox.

  • Подключение из локальной сети, а не только с вашего хоста. Давайте скажем что-нибудь в диапазоне 192.168.1.xxx. Вот что важно, на адаптере 2.

  • Вы просто заботитесь о своей обычной сетевой карте / сетевой карте и у вас нет особых причин использовать Ethernet через порт Thunderbolt.

то есть, в значительной степени то, что вы получите от VirtualBox vm с Bridged и без Vagrant.

Вот SSH ifconfig с одной из тех машин VirtualBox, которые есть в моей локальной сети. Он запускает веб-сервер, к которому я могу подключиться, и мой Mac может подключиться к нему по SSH и подключиться к базе данных на нем. Я назову это ссылкой.

[root@fdm ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:9A:85:1A
          inet addr:192.168.1.143  Bcast:192.168.1.255  Mask:255.255.255.0

В VirtualBox на панели Network для этого эталонного vm отображается Adapter1 как Bridged. Все остальные адаптеры отключены.

Итак, теперь я собираюсь попробовать тот же результат подключения к локальной сети от Vagrant, но я согласен, что у меня будет NAT на адаптере 1, это механизм связи vagrant-VB ssh.

Попробуйте # 1 - что не получается.

Отправной точкой является бродячий инициат.

Затем в Vagrantfile я изменил только 2 вещи:

config.vm.box = "opscode-ubuntu-14.04"
config.vm.network "public_network"

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

==> default: Available bridged network interfaces:
1) en1: Wi-Fi (AirPort)
2) en0: Ethernet
3) en3: Thunderbolt 1
4) p2p0
5) bbptp0
6) bridge0

Теперь, глядя на это, я сначала выбрал 2), потому что я думал, что я хотел Ethernet и хорошо, 1) показался «слишком Apple».

Это работает, но с неподходящей записью IP 10.0.xx.xx, на которую пингует мой провайдер, см. Ниже. Я предполагаю, что они действительно подразумевают общественность, когда это говорит публичная сеть

бродячий сш

vagrant@vagrant:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:0c:41:3e
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe0c:413e/64 Scope:Link

eth1      Link encap:Ethernet  HWaddr 08:00:27:ca:f4:64
          inet6 addr: fe80::a00:27ff:feca:f464/64 Scope:Link

Попробуйте №2 - правильная версия

vagrant halt, затем удалите каталог, создайте его снова и vagrant init. (Я обнаружил, что слишком большой беспорядок с сетью может сбить с толку vagrant и / или virtualbox, который исправит полное удаление и перезапуск)

config.vm.box = "opscode-ubuntu-14.04"
config.vm.network "public_network"

Но на этот раз выберите 1) en1: Wi-Fi (AirPort).

бродячий сш

Этот eth1 с 192.168.1.123 выглядит намного лучше, не так ли?

vagrant@vagrant:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:0c:41:3e
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

eth1      Link encap:Ethernet  HWaddr 08:00:27:53:6e:1d
          inet addr:192.168.1.123  Bcast:192.168.1.255  Mask:255.255.255.0

И действительно, я могу пропинговать 192.168.1.123 из моего эталонного vm или с другого физического компьютера в моей локальной сети.

[root@fdm ~]# ping 192.168.1.123
PING 192.168.1.123 (192.168.1.123) 56(84) bytes of data.
64 bytes from 192.168.1.123: icmp_seq=1 ttl=64 time=1039 ms
64 bytes from 192.168.1.123: icmp_seq=2 ttl=64 time=40.4 ms

FWIW, VirtualBox показывает NAT на адаптере 1 и Bridged на адаптере 2.

Окончательная настройка -

Добавлен автоматический выбор интерфейса, а также статический IP (который вам не нужен). Проблема решена, по крайней мере для меня.

  config.vm.network "public_network", bridge: 'en1: Wi-Fi (AirPort)', ip: "192.168.1.201"

РЕДАКТИРОВАТЬ 201902: в моей последней сборке vagrant/virtualbox жаловались на то, что Wifi (аэропорт) не найден:

==> default: Specific bridge 'en1: Wi-Fi (AirPort)' not found. You may be asked to specify
==> default: which network to bridge to.
==> default: Available bridged network interfaces:
1) en0: Ethernet
2) en2: Thunderbolt 1
3) bridge0

изменил это на

config.vm.network "public_network", bridge: "bridge0"

Буду обновлять позже, если что-то появится, но думал, что я обновлю немного об имени адаптера.

4

Короткий ответ, кажется, нет.

Вы можете переопределить адаптер 1, но по крайней мере ожидайте проблем с vagrant ssh

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.network "public_network", :adapter=>1 , type: "dhcp", :bridge => 'en4: Thunderbolt Ethernet'
  config.vm.hostname = "mddirector"

  # In case you get the host wrong...
  config.vm.boot_timeout = 30
  config.vm.provider "virtualbox" do |vb, override|
       vb.gui = true
  end

  config.ssh.host = '192.168.148.24'

end

Производит:

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: bridged
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
    default: VirtualBox adapter #1 not configured as "NAT". Skipping port
    default: forwards on this adapter.
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...

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

Если вы это сделаете, вы всегда можете принудительно остановить и перезагрузить с исправленным ssh.host . В качестве альтернативы я слышал о vagrant dns но никогда не пробовал.

3

Я нашел это обсуждение на StackOverflow.

Мне было достаточно открыть связанный Vagrantfile и раскомментировать следующую строку:

config.vm.network "public_network"

а затем запустить vagrant reload

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .