IP Jaringan Pribadi Vagrant tidak berfungsi, tetapi DHCP tidak

6

Saya memiliki file konfigurasi gelandangan dengan tiga VM yang dikonfigurasi di dalamnya. Semua identik kecuali memiliki IP statis dan dua lainnya pada DHCP. Dua yang ditugaskan IP oleh DHCP dapat berbicara satu sama lain tanpa masalah, tetapi yang dengan IP statis tidak dapat dihubungi oleh yang lain.

Dengan kata lain ping client0-> client1berfungsi

ping client1-> client0berfungsi

ping client1-> servertidak

Ini adalah Vagrantfile saya:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"

  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = "provision/cookbooks"
    chef.add_recipe "apt"
    chef.add_recipe "python"
  end

  config.vm.provision :shell, :path => "provision/python-modules.py"

  config.vm.define :server do |server|
    server.vm.hostname = "server"
    server.vm.network :private_network, ip: "172.28.128.2"
  end

  config.vm.define :client0 do |client0|
    client0.vm.hostname = "client0"
    client0.vm.network :private_network, type: :dhcp
  end

  config.vm.define :client1 do |client1|
    client1.vm.hostname = "client1"
    client1.vm.network :private_network, type: :dhcp
  end
end

Adakah ide bagaimana saya bisa membuat servermesin itu dapat dihubungi oleh orang lain pada IP statis? Saya menggunakan penyedia virtualbox.

Daniel Groves
sumber

Jawaban:

13

Setelah penelitian dan eksperimen yang luas, tampak bahwa Vagrant menugaskan masing-masing VM ke submask yang berbeda, karenanya mereka tidak dapat terhubung satu sama lain. Akibatnya, mereka semua berada di jaringan yang berbeda.

Ternyata Anda bisa, bagaimanapun, menimpa ini. Untuk melakukannya, cukup konfigurasikan netmask untuk satu seperti yang ditunjukkan di bawah ini.

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"

  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = "provision/cookbooks"
    chef.add_recipe "apt"
    chef.add_recipe "python"
  end

  config.vm.provision :shell, :path => "provision/python-modules.py"

  config.vm.define :server do |server|
    server.vm.hostname = "server"
    server.vm.network :private_network, ip: "172.28.128.2", :netmask => "255.255.0.0"
  end

  config.vm.define :client0 do |client0|
    client0.vm.hostname = "client0"
    client0.vm.network :private_network, type: :dhcp, :netmask => "255.255.0.0"
  end

  config.vm.define :client1 do |client1|
    client1.vm.hostname = "client1"
    client1.vm.network :private_network, type: :dhcp, :netmask => "255.255.0.0"
  end
end

Pada saat ini saya tidak yakin apakah Anda dapat menimpa netmask untuk semua di konfigurasi global, sambil mempertahankan beberapa VM dengan DHCP dan lainnya dengan IP statis. Saya akan bereksperimen dengan itu begitu saya kembali ke mesin yang lebih kuat sehingga menghancurkan dan membuat VM setiap kali lebih cepat.

Daniel Groves
sumber
Terima kasih, ini memecahkan masalah yang saya miliki di mana saya tidak bisa ssh antar tamu di OSX.
ah
Menggunakan Vagrant 1.9.7, OSX 10.12.6, VirtualBox 5.1.24r117012, saya mengalami masalah yang sama - tidak dapat terhubung antar tamu. Netmask tampaknya berfungsi, bahkan dengan IP pribadi. Terima kasih atas jawabannya!
karlos
3

Anda juga dapat melakukan sesuatu seperti di bawah ini, jika Anda menyediakan beberapa VM dengan DHCP. Di bagian VM opsional, Anda dapat menyebutkan / menyebutkan beberapa VM yang diperlukan.

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = '2'

DOMAIN = '.example.com'
PUPPETMASTER_HOSTNAME = 'puppet' + DOMAIN

#Requires box with puppetlabs repo setup, but puppet not installed
DEFAULT_BOX = 'precise64'
DEFAULT_BOX_URL = 'http://files.vagrantup.com/precise64.box'

REQUIRED_HOSTS = [
  'puppetdb',
  'puppetdb-postgres'
]

OPTIONAL_HOSTS = [
  'ldap01',
  'ldap02'

]

HOSTS = REQUIRED_HOSTS + OPTIONAL_HOSTS

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  #VBox config to avoid mac address collisions
  config.vm.provider :virtualbox do |vb|
    vb.customize ['modifyvm', :id, '--natnet1', '10.200/16']
    #vb.gui = true
  end

  config.vm.box = DEFAULT_BOX
  config.vm.box_url = DEFAULT_BOX_URL

  #Add network interface
  config.vm.network :private_network, :type => :dhcp, :netmask => '255.255.0.0'

  #Defines puppet master
  config.vm.define :puppet_master do |puppetmaster|
    puppetmaster.vm.hostname = PUPPETMASTER_HOSTNAME
    puppetmaster.vm.synced_folder '../puppet/', '/vagrant_sync/puppet', :create => true
    puppetmaster.vm.provision :shell, :path => 'scripts/bootstrap_puppetmaster.sh'
  end

  HOSTS.each do |host_name, opts|
    config.vm.define host_name do |box|
      fqdn = host_name + DOMAIN

      box.vm.hostname = fqdn
      box.vm.provision :shell, :inline => 'yum install -y puppet'
      box.vm.provision :puppet_server do |puppet|
        puppet.puppet_server = PUPPETMASTER_HOSTNAME
      end
    end
  end
end
ramesh.mimit
sumber
Solusi luar biasa, terima kasih telah berbagi ini. Saya harus memperbarui file konfigurasi lokal saya sekarang, ini adalah solusi yang jauh lebih bersih ketika beberapa klien identik diperlukan untuk pengujian. Terima kasih!
Daniel Groves