Bridged Adapter'ü sadece Vagrant'ta, NAT yapmadan yapmanız gerekir.


36

Bu yüzden MAC kitabımda Vagrant 'hashicorp / precise64' kurulumunda sorun yaşıyorum.

İlk olarak, config:

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure (VAGRANTFILE_API_VERSION) yapmak | config |
  config.vm.box = "hashicorp / precise64"
  config.vm.network "public_network", şunu yazın: "dhcp",: bridge => 'en4: Thunderbolt Ethernet'
  config.vm.hostname = "mddirector"
son

Bu 'sersemlemiş' in çıkması

==> varsayılan: VM’nin zarif kapatılması deneniyor ...
==> varsayılan: 'hashicorp / precise64' kutusunun güncel olup olmadığını kontrol ediyor ...
==> varsayılan: Önceden ayarlanmış herhangi bir iletilmiş bağlantı noktasının temizlenmesi ...
==> default: Önceden ayarlanmış tüm ağ arayüzlerini temizle ...
==> varsayılan: Konfigürasyona göre ağ arayüzleri hazırlanıyor ...
    varsayılan: Adaptör 1: nat
    varsayılan: Adaptör 2: köprülü
==> varsayılan: Bağlantı noktaları iletiliyor ...
    varsayılan: 22 => 2222 (adaptör 1)
==> varsayılan: VM'de Önyükleme ...
==> varsayılan: Makinenin önyüklenmesi bekleniyor. Bu bir kaç dakika alabilir...
    varsayılan: SSH adresi: 127.0.0.1:2222
    varsayılan: SSH kullanıcı adı: serseri
    varsayılan: SSH auth yöntemi: özel anahtar
    varsayılan: Uyarı: Bağlantı zaman aşımına uğradı. Tekrar deniyor ...
==> varsayılan: Makine açıldı ve hazır!
Misafir Ekleri 4.3.10 çalışıyor --- Tamam.
==> varsayılan: VM'de misafir eklemeleri kontrol ediliyor ...
==> varsayılan: Ana bilgisayar adı ayarlanıyor ...
==> default: Ağ arayüzlerini yapılandırma ve etkinleştirme ...
==> varsayılan: Paylaşılan klasörlerin takılması ...
    varsayılan: / vagrant => / Kullanıcılar / garthm / Projeler / vagrant
==> varsayılan: Makine zaten hazır. “Serseri hükmü” çalıştırın veya `--provision` kullanın.
==> varsayılan: hazırlığı zorlamak için. Çalışmak için işaretlenmiş hazırlayıcılar her zaman çalışmaya devam eder.

'ifconfig' aşağıdakileri gösterir:

vagrant @ mddirector: ~ $ ifconfig
eth0 Link encap: Ethernet Hızı 08: 00: 27: 88: 0c: a6
          inet addr: 10.0.2.15 Yayın: 10.0.2.255 Maske: 255.255.255.0
          inet6 addr: fe80 :: a00: 27ff: fe88: ca6 / 64 Kapsam: Bağlantı
          YAYIN YAYINLI ÇALIŞMA ÇOKLU MTU: 1500 Metrik: 1
          RX paketleri: 725 hataları: 0 bırakıldı: 0 aşıldı: 0 çerçeve: 0
          TX paketler: 544 hatalar: 0 düşürüldü: 0 aşıldı: 0 taşıyıcı: 0
          çarpışmalar: 0 txqueuelen: 1000
          RX bayt: 90824 (90,8 KB) TX bayt: 63375 (63,3 KB)

eth1 Link encap: Ethernet Hızı 08: 00: 27: 2f: bb: 6a
          giriş adresi: 10.0.24.118 Yayın: 10.0.31.255 Maske: 255.255.248.0
          YAYIN YAYINLI ÇALIŞMA ÇOKLU MTU: 1500 Metrik: 1
          RX paketleri: 3490 hataları: 0 bırakıldı: 0 aşıldı: 0 çerçeve: 0
          TX paketleri: 7 hata: 0 bırakıldı: 0 aşıldı: 0 taşıyıcı: 0
          çarpışmalar: 0 txqueuelen: 1000
          RX bayt: 345981 (345,9 KB) TX bayt: 1102 (1,1 KB)

lo Bağlantı encap: Yerel Geri Döngü
          inet addr: 127.0.0.1 Maske: 255.0.0.0
          inet6 addr: :: 1/128 Kapsam: Ev sahibi
          UP LOOPBACK ÇALIŞMA MTU: 16436 Metrik: 1
          RX paketleri: 0 hata: 0 bırakıldı: 0 aşıldı: 0 çerçeve: 0
          TX paketleri: 0 hata: 0 bırakıldı: 0 aşıldı: 0 taşıyıcı: 0
          çarpışmalar: 0 txqueuelen: 0
          RX bayt: 0 (0.0 B) TX bayt: 0 (0.0 B)

Benim sorunum benim ana makinede (den VM ping olabilir, yani IP: 10.0.24.112), diğer insanlar (benim de benim VM ping olabilir 10.0.24.XXX, benim VM benim devbox (ping olabilir) IP: 10.10.116.254(benim devbox diğer geliştiricilere sanal makine kurulumları ping olabilir) Vagrant değil, IP: 10.10.116.254), ancak VM'mi devbox'ımdan pingleyemiyorum ve diğer geliştiriciler VM'mi devbox'larından pingleyemiyorum.

Sahip oldukları Sanal makine ayarları yalnızca Bridged NIC ile yapılır, ancak bazı nedenlerden ötürü sicim NAT ve Bridged'a sahiptir. Gördüğünüz gibi Vagrant VM için doğru görünmeyen iki IP adresi var. Ayrıca, önyükleme yaparken, NAT bağdaştırıcısı olan Bağdaştırıcı 1'de ileriye bir bağlantı noktası yapar; bu, NAT bağdaştırıcısını her şey için varsayılan olarak kullanıyor gibi göründüğü anlamına gelir.

NAT adaptöründen nasıl kurtulurum ve sadece köprüyü kullanırım?

VirtualBox ayarlarını düzenlersem ve NAT bağdaştırıcısını devre dışı bırakırsam, yalnızca köprülenmiş Bağdaştırıcı var ve kutuyu VirtualBox aracılığıyla başlatırsanız (yani: sersem yukarı kullanmazsanız), o zaman sadece benim devbox'ımdan pingable olan bir IP adresi olan eth0 olur. , aradığım şey bu. VirtualBox ayarlarını düzenledikten ve NAT bağdaştırıcısını devre dışı bıraktıktan sonra kutuyu ayarlayıp denersen, aşağıdaki hatayı alıyorum:

Vagrant tarafından kullanılan bir CLI olan “VBoxManage” yürütülürken bir hata oluştu.
VirtualBox'ı kontrol etmek için. Komut ve stderr aşağıda gösterilmiştir.

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

Stderr: VBoxManage: error: Bu ismin NAT kuralı zaten var
VBoxManage: error: Ayrıntılar: kod NS_ERROR_INVALID_ARG (0x80070057), NATEngine bileşeni, INATEngine arabirimi, callee nsISupports
VBoxManage: error: Bağlam: "AddRedirect (Bstr (strName) .raw (), proto, Bstr (strHostIp) .raw (), RTStrToUInt16 (strHostPort), Bstr (strGuestIp) .raw (), RTStrToUInt16 (strGuestIp) .raw () VBoxManageModifyVM.cpp dosyasının satır 1655

Hemen hemen bir sersemletirirsem, NAT adaptörünü yeniden etkinleştirdi ve yine aynı sorunu yaşamaya geri döndük.

Yanıtlar:


21

eth0NAT, halihazırdaki haliyle Vagrant'ın temel bir gereğidir . Ancak, için varsayılan yönlendirici yapılandırmasını geçersiz kılabilirsiniz eth1.

Gönderen Serseri docs :

Varsayılan yönlendirici

Kurulumunuza bağlı olarak, varsayılan yönlendirici yapılandırmasını el ile geçersiz kılmak isteyebilirsiniz. Vagrant kutusuna ortak ağ üzerindeki diğer ağlardan erişmeniz gerekiyorsa , bu gereklidir . Bunu yapmak için, bir kabuk hazırlayıcı komut dosyası kullanabilirsiniz:

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

# Varsayılan yönlendirici
config.vm.provision "kabuk",
  koşmak: "her zaman",
  satır içi: "rota ekleme varsayılan gw 192.168.0.1"

# varsayılan yönlendirici ipv6
config.vm.provision "kabuk",
  koşmak: "her zaman",
  satır içi: "rota-Bir inet6 varsayılan gw fc00 :: 1 eth1 ekle"

# eth0 üzerinde varsayılan gw silmek
config.vm.provision "kabuk",
  koşmak: "her zaman",
  satır içi: "eval` route -n | awk '{if ($ 8 == \ "eth0 \" && $ 2! = \ "0.0.0.0 \") \ "rota varsayılanı gw \" $ 2;}' `"

Yukarıdakilerin oldukça karmaşık olduğunu ve konuk işletim sistemine özgü olabileceğini unutmayın, ancak bunun nasıl yapılacağına dair kaba fikirleri belgeliyoruz, çünkü bu ortak bir soru.


9

(Üzgünüm, serseri / virtualbox konusunda oldukça saf, bu yüzden uygun ağ terminolojisinin eksikliğini affedin)

Köprü seçiminiz : tr4) Thunderbolt büyük olasılıkla sorun.

İstediğin / ihtiyacın olduğunu düşündüğüm şey, istediğin şey değil:

  • Serseri için vm, kontrol etmek için dev kutusundan (ev sahibi) SSH giriş yeteneği. Bağlantı noktası yönlendirmeli NAT işlevi budur. Başka hiçbir şeyi karıştırmaz, bu yüzden gitmesini istemek o kadar da kullanışlı değil. Ve bu VirtualBox'daki Adaptör 1'de görünüyor.

  • Yalnızca ana makineniz yerine LAN'ınızdan bağlantı. 192.168.1.xxx aralığında bir şey söyleyelim. Adaptör 2'de önemli olan bu.

  • Normal ağ kartınızı / NIC'nizi önemsiyorsunuz ve Ethernet'i Thunderbolt bağlantı noktanız üzerinde çalıştırmak için özel bir nedeniniz yok.

yani Bridged'lı bir VirtualBox vm'sinden ve görünecek Vagrant’tan elde edemediğiniz şeylerden hemen hemen fazlası.

İşte, LAN'ımda sahip olduğum yalnızca VirtualBox olan sanal makinelerden birinin ifconfig'si. Bağlanabildiğim bir web sunucusunu çalıştırıyor ve Mac'im SSH'ye bağlayabiliyor ve bunun üzerine bir veritabanına bağlanabiliyor. Buna referans diyeceğim .

[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'ta, bu vm referansı için Ağ paneli, Adaptör1'i Köprülü olarak gösterir. Diğer tüm adaptörler devre dışıdır.

Tamam, şimdi Vagrant'ın aynı LAN bağlantı sonucunu deneyeceğim, ancak adaptör 1'de NAT sahibi olduğumu kabul ediyorum, bu vagrant-VB ssh iletişim mekanizması.

Deneyin # 1 - başarısız olan.

Başlangıç ​​noktası serseri bir init .

Sonra Vagrantfile'de sadece 2 şeyi değiştirdim:

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

Bunu aşağılarsam , hangi arayüzü kullanacağımı soran bir iletişim kutusu alıyorum:

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

Şimdi, ona bakarken ilk önce 2'yi seçtim çünkü Ethernet'i istediğimi sanıyordum, ve 1) 'fazla Elma' gibi görünüyordu.

Bu çalışır, ancak ISS'imin ping'lerini engellediği uygun olmayan bir IP 10.0.xx.xx girişi ile aşağıya bakın. Kamu ağı dediği zaman gerçekten halk demek.

serseri 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 deneyin - doğru sürüm

serseri dur , sonra dizini sil, tekrar oluştur ve serseri init . (Ağ ile çok fazla uğraşmanın, tamamen kaldırmanın ve yeniden başlatmanın çözeceği serseri ve / veya sanal kutuyu karıştırmayacağını buldum)

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

Ancak, bu kez, 1) en1: Wi-Fi (AirPort) seçin.

serseri ssh

192.168.1.123 ile bu eth1 çok daha güzel görünüyor, değil mi?

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

Gerçekten de 192.168.1.123’e referans vm’mden veya LAN’ımdaki başka bir fiziksel makineden ping işlemi yapabilirim.

[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, Adaptör 1'de bir NAT ve Adaptör 2'de bir Bridged gösteriyor.

Son kurulum -

Arayüz otomatik seçimi ve statik bir IP (gerek duymadığınız) eklendi. En azından benim için sorun çözüldü.

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

EDIT 201902: En son yaptığımda, serseri / virtualbox, Wifi (Havaalanı) bulunamadığından şikayet ediyordu :

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

olarak değiştirildi

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

Bir şey ortaya çıkarsa daha sonra güncellenir, ancak adaptör adı ile ilgili bit güncelleme yapacağımı düşündüm.


Cevabı daha fazla kredi hak ediyor, ekstra bir adaptör eklemek çok basit, ben bile menü alamadım (sadece 1 aktif kart var).
Glenn Plas

4

Kısa cevap öyle gözükmüyor.

Bağdaştırıcı 1'i geçersiz kılabilir, ancak en azından 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

üretir:

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

Maalesef ağ bağdaştırıcısını yapılandırmayı kilitlemiş gibi görünüyor ama benden daha fazla şansınız olacak.

Bunu yaparsanız her zaman durmaya zorlayabilir ve düzeltilmiş bir şekilde yeniden yükleyebilirsiniz ssh.host. Alternatif olarak duydum vagrant dnsama hiç denemedim.


3

Bu tartışmayı StackOverflow'ta buldum .

Benim için, ilgili açmak Vagrantfileve aşağıdaki satırı yorumlamak yeterliydi :

config.vm.network "public_network"

ve sonra koş vagrant reload


2
Vagrantfile config'üme bakarsanız, config ayarının zaten orada olduğunu göreceksiniz.
SynackSA

Ay pardon! Onu özledim.
Tyler

3
Her zaman bir NAT bağlantısına sahip olacağına inanıyorum, çünkü serseri ssh veya herhangi bir provizyon yaptığınızda, 127.0.0.1:2222 veya konuk kutusunda 22'ye hangi port için yönlendireceğini her zaman erişecek.
Hayden,

Bu benim için cevap nokta. sadece bir nezaket ekliyor
Glenn Plas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.