Потрібно виконати мостовий адаптер лише у Vagrant, без NAT


36

Тож у мене в MAC-книзі проблеми з налаштуванням Vagrant "hashicorp / preci64".

По-перше, моя конфігурація:

VAGRANTFILE_API_VERSION = "2"
Конфігурація Vagrant.configure (VAGRANTFILE_API_VERSION) do | config |
  config.vm.box = "hashicorp / preci64"
  config.vm.network "public_network", введіть: "dhcp",: bridge => 'en4: Thunderbolt Ethernet'
  config.vm.hostname = "mddirector"
кінець

Це вихід «бродячого»

==> за замовчуванням: Спроба витонченого відключення VM ...
==> за замовчуванням: Перевірка, чи не встановлено прапорець "hashicorp / preci64" ...
==> за замовчуванням: Очищення будь-яких раніше встановлених пересланих портів ...
==> за замовчуванням: Очищення будь-яких раніше встановлених мережевих інтерфейсів ...
==> за замовчуванням: підготовка мережевих інтерфейсів на основі конфігурації ...
    за замовчуванням: Адаптер 1: фіз
    за замовчуванням: Адаптер 2: мостовий
==> за замовчуванням: переадресація портів ...
    за замовчуванням: 22 => 2222 (адаптер 1)
==> за замовчуванням: завантаження VM ...
==> за замовчуванням: очікування завантаження машини. Це може зайняти кілька хвилин ...
    за замовчуванням: SSH-адреса: 127.0.0.1:2222
    за замовчуванням: ім'я SSH: vagrant
    за замовчуванням: метод auth SSH: приватний ключ
    за замовчуванням: Попередження: Час очікування з'єднання. Повторна спроба ...
==> за замовчуванням: машина завантажена і готова!
Додавання гостей 4.3.10 працює --- ОК.
==> за замовчуванням: перевірка доповнень для гостей у VM ...
==> за замовчуванням: встановлення імені хоста ...
==> за замовчуванням: Налаштування та включення мережевих інтерфейсів ...
==> за замовчуванням: монтаж спільних папок ...
    за замовчуванням: / vagrant => / Користувачі / garthm / Проекти / бродячий
==> за замовчуванням: Машина вже передбачена. Запустіть "бродяче забезпечення" або скористайтеся програмою "--provision"
==> за замовчуванням: примусово забезпечити резервування. Учасники, позначені завжди бігати, все одно будуть працювати.

'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 Маска: 255.255.255.0
          inet6 addr: fe80 :: a00: 27ff: fe88: ca6 / 64 Область застосування: Посилання
          НАГОРОДЖЕННЯ РОЗКЛАДУВАННЯ МУЛЬТИКАСТ МТУ: 1500 метрик: 1
          Пакети RX: 725 помилок: 0 випало: 0 перевитрат: 0 кадр: 0
          TX-пакети: 544 помилки: 0 випали: 0 перевитрати: 0 оператор: 0
          зіткнення: 0 txqueuelen: 1000
          RX байти: 90824 (90,8 KB) TX байт: 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 Маска: 255.255.248.0
          НАГОРОДЖЕННЯ РОЗКЛАДУВАННЯ МУЛЬТИКАСТ МТУ: 1500 метрик: 1
          Пакети RX: 3490 помилок: 0 випали: 0 перевитрати: 0 кадр: 0
          TX-пакети: 7 помилок: 0 випало: 0 перевитрат: 0 оператор: 0
          зіткнення: 0 txqueuelen: 1000
          RX байтів: 345981 (345,9 Кб) TX байт: 1102 (1,1 КБ)

lo Link encap: Local Loopback
          inet addr: 127.0.0.1 Маска: 255.0.0.0
          inet6 addr: :: 1/128 Область застосування: Хост
          НАГОРОДНЕ РОЗВ'ЯЗАННЯ МТУ: 16436 Показник: 1
          Пакети RX: 0 помилок: 0 випало: 0 перевитрат: 0 кадр: 0
          TX-пакети: 0 помилок: 0 випало: 0 перевитрат: 0 оператор: 0
          зіткнення: 0 txqueuelen: 0
          RX байти: 0 (0,0 B) TX байти: 0 (0,0 B)

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

Налаштування віртуальної машини у них є лише з Bridged NIC, але у бродяга чомусь є і NAT, і Bridged, хоча я вказав мости в конфігурації. Як бачите, для Vagrant VM є дві IP-адреси, що не здається правильним. Ви також можете, коли він завантажиться, він робить порт вперед на Адаптер 1, який є адаптером NAT, а це означає, що це звучить так, ніби він використовує NAT-адаптер за замовчуванням для всього.

Як я можу позбутися NAT-адаптера і використовувати тільки мостові?

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

Під час виконання "VBoxManage", CLI, використовуваного Vagrant, сталася помилка
для управління VirtualBox. Команда та stderr показані нижче.

Команда: ["modifyvm", "7f1c12f7-74cd-4c6b-aa5a-16d6209cf2b3", "--natpf1", "ssh, tcp, 127.0.0.1,2222,, 22"]

Stderr: VBoxManage: помилка: правило NAT такого імені вже існує
VBoxManage: помилка: подробиці: код NS_ERROR_INVALID_ARG (0x80070057), компонент NATEngine, інтерфейс INATEngine, виклик nsISпідтримка
VBoxManage: помилка: контекст: "AddRedirect (Bstr (strName) .raw (), proto, Bstr (strHostIp). рядок 1655 файлу VBoxManageModifyVM.cpp

Якщо я негайно знову зроблю бродягу, він знову ввімкне NAT-адаптер, і ми знову повернемося до тієї ж проблеми.

Відповіді:


21

eth0оскільки NAT - це фундаментальна вимога Вагранта в його нинішньому стані . Але ви можете змінити конфігурацію маршрутизатора за замовчуванням для eth1.

З Документів Вагранта :

Маршрутизатор за замовчуванням

Залежно від налаштувань, ви можете вручну змінити конфігурацію маршрутизатора вручну. Це потрібно, якщо вам потрібно отримати доступ до коробки Vagrant з інших мереж через загальнодоступну мережу . Для цього можна скористатися сценарієм оболонки оболонки:

config.vm.network "public_network", ip: "192.168.0.17"

# маршрутизатор за замовчуванням
config.vm.provision "оболонка",
  запустити: "завжди",
  inline: "маршрут додати за замовчуванням gw 192.168.0.1"

# маршрутизатор за замовчуванням ipv6
config.vm.provision "оболонка",
  запустити: "завжди",
  inline: "route -A inet6 додати типовий gw fc00 :: 1 eth1"

# видалити типовий gw на eth0
config.vm.provision "оболонка",
  запустити: "завжди",
  inline: "eval` route -n | awk "{if ($ 8 == \" eth0 \ "&& $ 2! = \" 0.0.0.0 \ ") print \" route del default gw \ "$ 2;} '` "

Зауважимо, що вище є досить складним і може бути специфічним для гостьової ОС, але ми документуємо грубу ідею, як це зробити, оскільки це звичайне питання.


9

(Вибачте, досить наївне щодо бродячого / віртуальної скриньки, тож пробачте відсутність належної термінології для мереж)

Ваш вибір моста: en4) Thunderbolt - це, швидше за все, проблема.

Ось що я припускаю, що ви хочете / потребуєте, а не те, що ви просили:

  • Можливість входу в SSH для бродячого для керування вашим vm, із вікна розробки (хоста). Ось що робить NAT з переадресацією портів. Це більше не псує нічого іншого, тому просити його пропасти не все так корисно. І це відображається на Adapter 1 у VirtualBox.

  • Підключення до вашої локальної мережі, а не тільки від вашого хоста. Скажімо, щось у діапазоні 192.168.1.xxx. Ось що важливо, на Adapter 2.

  • Ви просто дбаєте про свою звичайну мережеву карту / NIC і не маєте особливих причин запускати Ethernet через ваш порт Thunderbolt.

тобто майже все, що ви отримаєте від VirtualBox vm з мостом, і жодного бродячого не побачити.

Ось 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 на панелі «Мережа» для цього посилання vm показано Adapter1 як мостовий. Усі інші адаптери вимкнено.

Гаразд, тому я зараз спробую отримати той самий результат підключення до локальної мережі від Vagrant, але я погоджуюся, що у мене буде NAT на адаптері 1, це механізм зв’язку бродячого-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, на який блокується мій Інтернет-провайдер, дивіться нижче. Я здогадуюсь, що вони справді мають на увазі публіку, коли це говорить публічна мережа.

бродячий ssh

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 , потім видаліть каталог, створіть його знову і бродячий init . (Я виявив, що занадто велике возитися з мережею може заплутати бродячого та / або віртуальну скриньку, яке виправить повне видалення та перезапуск)

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

Але цього разу виберіть 1) en1: Wi-Fi (AirPort).

бродячий ssh

Цей 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 і мостовому на адаптері 2.

Остаточна установка -

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

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

EDIT 201902: у моїй останній збірці, бродяга / віртуальні скарги скаржилися на те, що Wi-Fi (аеропорт) не знайдено:

==> 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"

Буде оновлено пізніше, якщо щось з’явиться, але я подумав, що я оновлю трохи про назву адаптера.


його відповідь заслуговує на більше кредиту, так що просто додати додатковий адаптер, я навіть не отримав меню (у мене лише 1 активна карта).
Glenn Plas

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


2
Якщо ви подивитесь на мою конфігурацію Vagrantfile, ви побачите, що налаштування конфігурації вже є.
SynackSA

Ой, вибачте! Я пропустив це.
Тайлер

3
Я вважаю, що це завжди матиме NAT-з'єднання, тому що коли ви робите бродячий ssh ​​або будь-яке резервування, він завжди отримуватиме доступ до нього через 127.0.0.1:2222 або будь-який інший порт, який пересилає до 22 на поле гостей.
Гайден

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