Perlu melakukan Bridged Adapter hanya di Vagrant, tanpa NAT

36

Jadi saya mengalami masalah dengan setup Vagrant dari 'hashicorp / precision64' di buku MAC saya.

Pertama, konfigurasi saya:

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

Ini adalah kelebihan dari 'gelandangan'

==> default: Mencoba mematikan VM ...
==> default: Memeriksa apakah kotak 'hashicorp / precision64' sudah terbaru ...
==> default: Menghapus port penerusan yang diatur sebelumnya ...
==> default: Menghapus semua antarmuka jaringan yang ditetapkan sebelumnya ...
==> default: Mempersiapkan antarmuka jaringan berdasarkan konfigurasi ...
    default: Adaptor 1: nat
    default: Adaptor 2: dijembatani
==> default: Meneruskan port ...
    default: 22 => 2222 (adaptor 1)
==> default: Booting VM ...
==> default: Menunggu mesin untuk boot. Ini mungkin memakan waktu beberapa menit ...
    default: alamat SSH: 127.0.0.1.1222
    default: nama pengguna SSH: gelandangan
    default: metode auth SSH: kunci pribadi
    default: Peringatan: Batas waktu koneksi. Mencoba lagi ...
==> default: Mesin boot dan siap!
GuestAdditions 4.3.10 berjalan --- OK.
==> default: Memeriksa penambahan tamu di VM ...
==> default: Mengatur nama host ...
==> default: Mengkonfigurasi dan mengaktifkan antarmuka jaringan ...
==> default: Memasang folder bersama ...
    default: / gelandangan => / Pengguna / garthm / Proyek / gelandangan
==> default: Mesin sudah disediakan. Jalankan `ketentuan gelandangan` atau gunakan` --provisi`
==> default: untuk memaksakan provisi. Penyedia yang ditandai untuk menjalankan selalu akan tetap berjalan.

'ifconfig' menunjukkan yang berikut:

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 Topeng: 255.255.255.0
          inet6 addr: fe80 :: a00: 27ff: fe88: ca6 / 64 Lingkup: Tautan
          UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1
          Paket RX: 725 kesalahan: 0 turun: 0 overruns: 0 bingkai: 0
          Paket TX: 544 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
          tabrakan: 0 txqueuelen: 1000
          RX byte: 90824 (90,8 KB) TX byte: 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 Topeng: 255.255.248.0
          UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1
          Paket RX: 3490 kesalahan: 0 jatuh: 0 overruns: 0 bingkai: 0
          Paket TX: 7 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
          tabrakan: 0 txqueuelen: 1000
          RX byte: 345981 (345,9 KB) TX byte: 1102 (1,1 KB)

lo Link encap: Local Loopback
          inet addr: 127.0.0.1 Mask: 255.0.0.0
          inet6 addr: :: 1/128 Cakupan: Host
          MENJALANKAN LOOPBACK MTU: 16436 Metrik: 1
          Paket RX: 0 kesalahan: 0 jatuh: 0 overruns: 0 bingkai: 0
          Paket TX: 0 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
          tabrakan: 0 txqueuelen: 0
          Bita RX: 0 (0,0 B) Bita TX: 0 (0,0 B)

Masalah saya adalah, bahwa saya dapat melakukan ping VM dari mesin host saya ( IP: 10.0.24.112), orang lain juga dapat melakukan ping VM saya ( 10.0.24.XXX), VM saya dapat melakukan ping devbox saya ( IP: 10.10.116.254), saya dapat melakukan ping ke pengembang lain pengaturan mesin virtual dari devbox saya () bukan Vagrant, IP: 10.10.116.254), tapi saya tidak bisa ping VM saya dari devbox saya dan pengembang lain tidak bisa ping VM saya dari devbox mereka.

Pengaturan mesin virtual yang mereka miliki adalah dengan Bridged NIC saja, tetapi gelandangan karena alasan tertentu memiliki NAT dan Bridged, meskipun, saya telah menentukan bridged di konfigurasi. Seperti yang Anda lihat, ada dua alamat IP untuk Vagrant VM, yang sepertinya tidak benar. Anda juga dapat, saat boot up, melakukan port forward pada Adapter 1, yang merupakan adaptor NAT, yang artinya sepertinya menggunakan adaptor NAT secara default untuk semuanya.

Bagaimana cara saya menyingkirkan adaptor NAT dan hanya menggunakan bridged?

Jika saya mengedit pengaturan VirtualBox dan menonaktifkan adaptor NAT, jadi hanya ada Adapter yang terhubung dan boot kotak melalui VirtualBox (yaitu: tidak menggunakan gelandangan), maka itu hanya memiliki eth0 dengan alamat IP yang dapat ping dari devbox saya , itulah yang saya cari. Jika saya mencoba dan menggagalkan kotak setelah mengedit pengaturan VirtualBox dan menonaktifkan adaptor NAT, saya mendapatkan kesalahan berikut:

Ada kesalahan saat menjalankan `VBoxManage`, CLI yang digunakan oleh Vagrant
untuk mengendalikan VirtualBox. Perintah dan stderr ditunjukkan di bawah ini.

Perintah: ["modvvm", "7f1c12f7-74cd-4c6b-aa5a-16d6209cf2b3", "--natpf1", "ssh, tcp, 127.0.0.1.22222, 22"]

Stderr: VBoxManage: error: Aturan NAT dari nama ini sudah ada
VBoxManage: error: Detail: kode NS_ERROR_INVALID_ARG (0x80070057), komponen NATEngine, antarmuka INATEngine, callee nsISupports
VBoxManage: error: Konteks: "AddRedirect (Bstr (strName) .raw (), proto, Bstr (strHostIp) .raw (), RTStrToUInt16 (strHostPort), Bstr (strGuestIp) .raw (), RTStrToUInt16 (strGestest)) baris 1655 dari file VBoxManageModifyVM.cpp

Jika saya segera melakukan gelandangan lagi, itu telah mengaktifkan kembali adaptor NAT lagi, dan kami kembali memiliki masalah yang sama lagi.

SynackSA
sumber

Jawaban:

21

eth0karena NAT adalah persyaratan mendasar Vagrant dalam kondisi saat ini . Tetapi Anda dapat mengganti konfigurasi router default untuk eth1.

Dari dokumen Vagrant :

Router bawaan

Tergantung pada pengaturan Anda, Anda mungkin ingin menimpa konfigurasi router default secara manual. Ini diperlukan jika Anda perlu mengakses kotak Vagrant dari jaringan lain melalui jaringan publik . Untuk melakukannya, Anda dapat menggunakan skrip penyedia shell:

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

# router default
config.vm.provisi "shell",
  jalankan: "selalu",
  inline: "route add default gw 192.168.0.1"

# router default ipv6
config.vm.provisi "shell",
  jalankan: "selalu",
  inline: "route -A inet6 tambahkan default gw fc00 :: 1 eth1"

# delete gw default di eth0
config.vm.provisi "shell",
  jalankan: "selalu",
  inline: "eval` route -n | awk '{if ($ 8 == \ "eth0 \" && $ 2! = \ "0.0.0.0 \") cetak \ "route del default gw \" $ 2;}' `"

Catatan di atas cukup rumit dan mungkin khusus untuk OS tamu, tetapi kami mendokumentasikan gagasan kasar bagaimana melakukannya karena ini adalah pertanyaan umum.

ostrokach
sumber
9

(Maaf, cukup naif tentang gelandangan / virtualbox jadi maafkan tidak adanya terminologi jaringan yang tepat)

Jembatan pilihan Anda : en4) Thunderbolt kemungkinan besar adalah masalahnya.

Inilah yang saya anggap Anda inginkan / butuhkan, daripada apa yang Anda minta:

  • Kemampuan masuk SSH untuk gelandangan untuk mengontrol vm Anda, dari kotak dev Anda (host). Itulah yang dilakukan NAT dengan port forwarding. Itu tidak mengacaukan hal lain, jadi memintanya untuk pergi tidak terlalu berguna. Dan itu muncul di Adapter 1 di VirtualBox.

  • Konektivitas dari LAN Anda, bukan hanya dari host Anda. Katakanlah sesuatu dalam kisaran 192.168.1.xxx. Itu yang penting, pada Adapter 2.

  • Anda hanya peduli dengan kartu jaringan normal / NIC dan tidak memiliki alasan khusus untuk menjalankan Ethernet melalui port Thunderbolt Anda.

yaitu cukup banyak apa yang akan Anda dapatkan dari VirtualBox vm dengan Bridged dan tidak ada Vagrant untuk dilihat.

Berikut ini adalah ifconfig SSH dari salah satu dari hanya mesin-mesin VirtualBox yang saya miliki di LAN saya. Ini menjalankan server web yang dapat saya sambungkan dan Mac saya dapat SSH ke dalamnya dan terhubung ke database di atasnya. Saya akan menyebutnya referensi .

[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

Di VirtualBox, panel Jaringan, untuk referensi itu vm, menunjukkan Adapter1 sebagai Bridged. Semua adaptor lain dinonaktifkan.

OK, jadi saya sekarang akan mencoba untuk hasil konektivitas LAN yang sama dari Vagrant, tetapi saya menerima bahwa saya akan memiliki NAT pada adaptor 1, itulah mekanisme komunikasi ssh-gelandangan-VB.

Coba # 1 - yang gagal.

Titik awal adalah init gelandangan .

Kemudian di Vagrantfile, saya hanya mengubah 2 hal:

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

jika saya Vagrant up ini, saya mendapatkan meminta dialog yang antarmuka untuk digunakan:

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

Sekarang, melihatnya, saya pertama kali memilih 2) karena saya pikir saya ingin Ethernet dan, 1) sepertinya 'terlalu Apple'.

Ini berfungsi, tetapi dengan entri IP 10.0.xx.xx yang tidak sesuai, yang diblokir oleh ISP saya, lihat di bawah. Saya kira mereka benar-benar berarti publik ketika mengatakan jaringan publik.

gelandangan 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

Coba # 2 - versi yang benar

gelandangan berhenti , lalu hapus direktori, buat lagi dan gelarkan init . (Saya menemukan bahwa terlalu banyak bermain-main dengan jaringan dapat membingungkan gelandangan dan / atau kotak virtual yang akan dihapus dan dihidupkan ulang secara penuh)

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

Tapi, kali ini, pilih 1) en1: Wi-Fi (AirPort).

gelandangan ssh

Et1 dengan 192.168.1.123 terlihat jauh lebih bagus, bukan?

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

Dan, memang, saya bisa melakukan ping 192.168.1.123 dari referensi saya vm, atau dari mesin fisik lain di LAN saya.

[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 menunjukkan NAT pada Adapter 1 dan Bridged on Adapter 2.

Penyiapan akhir -

Menambahkan pilihan antarmuka otomatis serta IP statis (yang tidak Anda perlukan). Masalah terpecahkan, setidaknya bagi saya.

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

EDIT 201902: pada build terbaru saya, gelandangan / virtualbox mengeluh tentang Wifi (Bandara) tidak ditemukan:

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

mengubahnya menjadi

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

Akan memperbarui nanti jika sesuatu muncul, tetapi saya pikir saya akan memperbarui sedikit tentang nama adaptor.

JL Peyret
sumber
jawabannya layak mendapat kredit lebih banyak, sangat mudah untuk menambahkan adaptor tambahan, saya bahkan tidak mendapatkan menu (hanya memiliki 1 kartu aktif).
Glenn Plas
4

Jawaban singkatnya adalah jangan.

Anda dapat mengesampingkan adaptor 1 tetapi mengharapkan masalah setidaknya 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

Menghasilkan:

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

Sayangnya sepertinya mengunci konfigurasi network adapter tetapi mungkin Anda akan lebih beruntung dari saya.

Jika Anda melakukannya, Anda selalu dapat menghentikan dan memuat ulang dengan benar ssh.host. Atau saya pernah mendengar vagrant dnstetapi tidak pernah mencobanya.

KCD
sumber
3

Saya menemukan diskusi ini di StackOverflow.

Bagi saya, itu sudah cukup untuk membuka terkait Vagrantfiledan menghapus komentar pada baris berikut:

config.vm.network "public_network"

dan kemudian jalankan vagrant reload

Tyler
sumber
2
Jika Anda melihat konfigurasi Vagrantfile saya, Anda akan melihat bahwa pengaturan konfigurasi sudah ada.
SynackSA
Oh maaf! Saya melewatkan itu.
Tyler
3
Saya percaya itu akan selalu memiliki koneksi NAT karena ketika Anda melakukan gelandangan ssh atau ketentuan apa pun, itu selalu akan mengaksesnya melalui 127.0.0.1.1222 atau port apa pun yang diteruskan ke 22 di kotak tamu.
Hayden
Ini tepat untuk saya. itu hanya menambahkan nic
Glenn Plas