Musisz zrobić Bridged Adapter tylko w Vagrant, bez NAT

36

Mam więc problem z błędną konfiguracją „hashicorp / exact64” na mojej książce MAC.

Po pierwsze, moja konfiguracja:

VAGRANTFILE_API_VERSION = „2”
Vagrant.configure (VAGRANTFILE_API_VERSION) do | config |
  config.vm.box = "hashicorp / precision64"
  config.vm.network „public_network”, wpisz: „dhcp”,: bridge => 'en4: Thunderbolt Ethernet'
  config.vm.hostname = "mddirector"
koniec

Na tym polega „włóczęgostwo w górę”

==> domyślnie: Próba płynnego zamknięcia VM ...
==> domyślnie: Sprawdzanie, czy pole „hashicorp / precision64” jest aktualne ...
==> domyślnie: Czyszczenie wszystkich wcześniej ustawionych przekierowanych portów ...
==> domyślnie: Czyszczenie wcześniej ustawionych interfejsów sieciowych ...
==> domyślnie: Przygotowanie interfejsów sieciowych na podstawie konfiguracji ...
    domyślnie: Adapter 1: nat
    domyślnie: Adapter 2: zmostkowany
==> domyślnie: porty przekazujące ...
    domyślnie: 22 => 2222 (adapter 1)
==> domyślnie: Ładowanie VM ...
==> domyślnie: Oczekiwanie na uruchomienie komputera. To może zająć parę minut...
    domyślnie: adres SSH: 127.0.0.1:2222
    domyślnie: nazwa użytkownika SSH: włóczęga
    domyślnie: metoda autoryzacji SSH: klucz prywatny
    domyślnie: Ostrzeżenie: Limit czasu połączenia. Ponawiam ...
==> domyślnie: Maszyna uruchomiona i gotowa!
GuestAdditions 4.3.10 działa --- OK.
==> domyślnie: Sprawdzanie dodawania gości na VM ...
==> domyślnie: ustawianie nazwy hosta ...
==> domyślnie: Konfigurowanie i włączanie interfejsów sieciowych ...
==> domyślnie: Montowanie folderów współdzielonych ...
    default: / vagrant => / Users / garthm / Projects / vagrant
==> domyślnie: maszyna jest już skonfigurowana. Uruchom `włóczęgowe postanowienie` lub użyj` --provision`
==> domyślnie: aby wymusić obsługę administracyjną. Dostawcy wyznaczeni do działania zawsze będą nadal działać.

„ifconfig” pokazuje, co następuje:

vagrant @ mddirector: ~ $ ifconfig
eth0 Link encap: Ethernet HWaddr 08: 00: 27: 88: 0c: a6
          adres inet: 10.0.2.15 Bcast: 10.0.2.255 Maska: 255.255.255.0
          inet6 addr: fe80 :: a00: 27ff: fe88: ca6 / 64 Zakres: Link
          UP BROADCAST RUNNING MULTICAST MTU: 1500 Metryczne: 1
          Pakiety RX: 725 błędów: 0 odrzuconych: 0 przekroczeń: 0 ramek: 0
          Pakiety TX: 544 błędy: 0 usunięte: 0 przekroczeń: 0 operator: 0
          kolizje: 0 txqueuelen: 1000
          Bajty RX: 90824 (90,8 KB) Bajty TX: 63375 (63,3 KB)

Interfejs eth1 Link: Ethernet HWaddr 08: 00: 27: 2f: bb: 6a
          adres inet: 10.0.24.118 Bcast: 10.0.31.255 Maska: 255.255.248.0
          UP BROADCAST RUNNING MULTICAST MTU: 1500 Metryczne: 1
          Pakiety RX: 3490 błędów: 0 odrzuconych: 0 przekroczeń: 0 ramek: 0
          Pakiety TX: 7 błędów: 0 odrzuconych: 0 przekroczeń: 0 nośnych: 0
          kolizje: 0 txqueuelen: 1000
          Bajty RX: 345981 (345,9 KB) Bajty TX: 1102 (1,1 KB)

lo Link encap: Lokalna pętla zwrotna
          adres inet: 127.0.0.1 Maska: 255.0.0.0
          inet6 addr: :: 1/128 Zakres: Host
          UP UP LOOPBACK RUNNING MTU: 16436 Metryczne: 1
          Pakiety RX: 0 błędów: 0 odrzuconych: 0 przekroczeń: 0 ramek: 0
          Pakiety TX: 0 błędów: 0 odrzuconych: 0 przekroczeń: 0 nośnych: 0
          kolizje: 0 txqueuelen: 0
          Bajty RX: 0 (0,0 B) Bajty TX: 0 (0,0 B)

Mój problem polega na tym, że mogę pingować maszynę wirtualną z mojego hosta ( IP: 10.0.24.112), inni też 10.0.24.XXXmogą pingować moją maszynę wirtualną ( ), moja maszyna wirtualna może pingować moją devbox ( IP: 10.10.116.254), mogę pingować konfiguracje maszyn wirtualnych innych programistów z mojego devbox ( nie Vagrant IP: 10.10.116.254), ale nie mogę pingować mojej maszyny wirtualnej z mojego devbox, a inny programista nie może pingować mojej maszyny wirtualnej z ich devbox.

Ustawienia maszyn wirtualnych, które mają, są tylko z Bridged NIC, ale włóczęga z jakiegoś powodu ma zarówno NAT, jak i Bridged, chociaż określiłem mostek w konfiguracji. Jak widać, Vagrant VM ma dwa adresy IP, co nie wydaje się właściwe. Podczas uruchamiania można również przesłać port na adapterze 1, który jest adapterem NAT, co oznacza, że ​​wygląda na to, że domyślnie używa adaptera NAT do wszystkiego.

Jak pozbyć się adaptera NAT i używać tylko mostka?

Jeśli edytuję ustawienia VirtualBox i wyłączam adapter NAT, więc jest tylko zmostkowany adapter i uruchamiam urządzenie przez VirtualBox (tzn. Nie używam Vagrant up), to ma on tylko eth0 z adresem IP, który można pingować z mojego devbox , czego szukam. Jeśli spróbuję włóczyć się po polu po edycji ustawień VirtualBox i wyłączeniu adaptera NAT, pojawia się następujący błąd:

Wystąpił błąd podczas wykonywania `VBoxManage`, CLI używanego przez Vagrant
do kontrolowania VirtualBox. Polecenie i stderr pokazano poniżej.

Polecenie: [„modyfikvm”, „7f1c12f7-74cd-4c6b-aa5a-16d6209cf2b3”, „--natpf1”, „ssh, tcp, 127.0.0.1,2222,, 22”]

Stderr: VBoxManage: error: Reguła NAT o tej nazwie już istnieje
VBoxManage: błąd: Szczegóły: kod NS_ERROR_INVALID_ARG (0x80070057), komponent NATEngine, interfejs INATEngine, callee nsIS obsługuje
VBoxManage: error: Context: "AddRedirect (Bstr (strName) .raw (), proto, Bstr (strHostIp) .raw (), RTStrToUInt16 (strHostPort), Bstr (strGuestIp) .raw (), RTStrToUInt16 (strGuestPort)) wiersz 1655 pliku VBoxManageModifyVM.cpp

Jeśli od razu zrobię włóczęgę, ponownie włączyłem adapter NAT i znów mamy ten sam problem.

SynackSA
źródło

Odpowiedzi:

21

eth0ponieważ NAT jest podstawowym wymaganiem Vagrant w jego obecnym stanie . Możesz jednak zastąpić domyślną konfigurację routera eth1.

Z Vagrant docs :

Domyślny router

W zależności od konfiguracji możesz ręcznie zastąpić domyślną konfigurację routera. Jest to wymagane, jeśli potrzebujesz dostępu do Vagrant box z innych sieci w sieci publicznej . Aby to zrobić, możesz użyć skryptu dostawcy powłoki:

config.vm.network „public_network”, ip: „192.168.0.17”

# domyślny router
config.vm.provision „shell”,
  uruchom: „zawsze”,
  inline: „route add default gw 192.168.0.1”

# domyślny router ipv6
config.vm.provision „shell”,
  uruchom: „zawsze”,
  inline: „route -A inet6 dodaj domyślny gw fc00 :: 1 eth1”

# usuń domyślny gw na eth0
config.vm.provision „shell”,
  uruchom: „zawsze”,
  inline: "eval` route -n | awk '{if (8 $ == \ "eth0 \" && $ 2! = \ "0.0.0.0 \") print \ "route del default gw \" $ 2;}' '"

Uwaga: powyższe jest dość złożone i może być specyficzne dla systemu operacyjnego gościa, ale dokumentujemy przybliżony pomysł, jak to zrobić, ponieważ jest to częste pytanie.

ostrokach
źródło
9

(Przepraszam, dość naiwny wobec włóczęgi / virtualbox, więc wybacz brak odpowiedniej terminologii sieciowej)

Twój wybór mostu: en4) Najprawdopodobniej problemem jest Piorun .

Oto, co zakładam, że chcesz / potrzebujesz, a nie to, o co prosiłeś:

  • Możliwość logowania SSH dla włóczęgów w celu kontrolowania vm, z poziomu dev box (hosta). Tak właśnie działa NAT z przekierowaniem portów. Nie psuje nic innego, więc prośba o jego zniknięcie nie jest aż tak przydatna. I to pojawia się na adapterze 1 w VirtualBox.

  • Łączność z sieci LAN, a nie tylko z hosta. Powiedzmy coś z zakresu 192.168.1.xxx. To jest ważne na karcie 2.

  • Troszczysz się tylko o swoją normalną kartę sieciową / kartę sieciową i nie masz szczególnego powodu, aby korzystać z Ethernetu przez port Thunderbolt.

tzn. prawie to, co można uzyskać z VirtualBox vm z Bridged i nie widać Vagrant.

Oto ifconfig SSH z jednej z tych maszyn VirtualBox, które mam w mojej sieci LAN. Działa z serwerem internetowym, z którym mogę się połączyć, a mój Mac może na nim SSH i połączyć się z bazą danych na nim. Nazwie to referencją .

[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

W VirtualBox, panel Sieć dla tego odniesienia vm pokazuje Adapter1 jako Bridged. Wszystkie inne adaptery są wyłączone.

OK, więc teraz spróbuję uzyskać ten sam wynik połączenia LAN z Vagrant, ale akceptuję, że będę mieć NAT na adapterze 1, to jest mechanizm komunikacji ssh Vagrant-VB.

Spróbuj # 1 - co się nie powiedzie.

Punktem wyjścia jest włóczęga wtajemniczony .

Następnie w Vagrantfile zmieniłem tylko 2 rzeczy:

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

jeśli się z tym nie zgadzam, pojawia się okno dialogowe z pytaniem, którego interfejsu użyć:

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

Teraz, patrząc na to, najpierw wybrałem 2), ponieważ myślałem, że chcę Ethernet i cóż, 1) wydawało się „zbyt Apple”.

Działa to, ale z nieodpowiednim wpisem IP 10.0.xx.xx, na którym mój dostawca usług internetowych blokuje pingowanie, patrz poniżej. Sądzę, że naprawdę mają na myśli publiczny, kiedy mówi sieć publiczna.

włóczęga 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

Spróbuj # 2 - poprawna wersja

vagrant halt , następnie usuń katalog, utwórz go ponownie i włóczęga init . (Odkryłem, że zbyt duże zamieszanie w sieci może dezorientować włóczęgę i / lub wirtualną skrzynkę, którą naprawiłoby pełne usunięcie i ponowne uruchomienie)

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

Ale tym razem wybierz 1) en1: Wi-Fi (AirPort).

włóczęga ssh

Ten eth1 z 192.168.1.123 wygląda o wiele ładniej, prawda?

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

I rzeczywiście mogę pingować 192.168.1.123 z mojego referencyjnego vm lub z innej fizycznej maszyny w mojej sieci LAN.

[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 pokazuje NAT na adapterze 1 i Bridged na adapterze 2.

Ostateczna konfiguracja -

Dodano automatyczny wybór interfejsu oraz statyczny adres IP (który nie jest potrzebny). Problem rozwiązany, przynajmniej dla mnie.

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

EDYCJA 201902: w mojej najnowszej wersji włóczęga / virtualbox skarżyli się na brak Wi-Fi (lotniska) :

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

zmieniłem na

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

Zaktualizuję później, jeśli coś się pojawi, ale pomyślałem, że zaktualizuję nieco nazwę adaptera.

JL Peyret
źródło
jego odpowiedź zasługuje na większe uznanie, więc łatwo było dodać dodatkowy adapter, nawet nie dostałem menu (mam tylko 1 aktywną kartę).
Glenn Plas,
4

Krótka odpowiedź wydaje się brzmieć „nie”.

Możesz zastąpić adapter 1, ale oczekuj przynajmniej problemów 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

Produkuje:

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...

Niestety wydaje się wtedy, że blokuje się konfiguracja karty sieciowej, ale może będziesz mieć więcej szczęścia niż ja.

Jeśli to zrobisz, zawsze możesz wymusić zatrzymanie i przeładować z poprawionym ssh.host. Alternatywnie słyszałem, vagrant dnsale nigdy nie próbowałem.

KCD
źródło
3

Znalazłem tę dyskusję na StackOverflow.

Dla mnie wystarczyło otworzyć powiązaną Vagrantfilei odkomentować następujący wiersz:

config.vm.network "public_network"

a następnie biegnij vagrant reload

Tyler
źródło
2
Jeśli spojrzysz na moją konfigurację Vagrantfile, zobaczysz, że ustawienie konfiguracji już tam jest.
SynackSA
Przepraszam! Tęsknie za tym.
Tyler
3
Wierzę, że zawsze będzie miało połączenie NAT, ponieważ kiedy robisz włóczęgę ssh lub jakiekolwiek inne udostępnianie, zawsze będzie uzyskiwać do niego dostęp poprzez 127.0.0.1:2222 lub jakikolwiek port, który przekierowuje do 22 na polu gościa.
Hayden
To jest dla mnie miejsce na odpowiedź. po prostu dodaje ładną
Glenn Plas