Vagrant Private Network IPs funktionieren nicht, aber DHCP

Vagrant Private Network IPs funktionieren nicht, aber DHCP

Ich habe eine Vagrant-Konfigurationsdatei mit drei darin konfigurierten VMs. Alle sind identisch, außer dass eine eine statische IP hat und die anderen beiden DHCP verwenden. Die beiden, denen per DHCP IPs zugewiesen wurden, können problemlos miteinander kommunizieren, aber die mit der statischen IP kann von den anderen nicht kontaktiert werden.

Mit anderen Worten: Ping client0-> client1funktioniert

Ping client1-> client0funktioniert

ping client1-> servernicht

Dies ist meine Vagrant-Datei:

# -*- 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

Irgendwelche Ideen, wie ich es schaffe, serverdass die Maschine für die anderen über eine statische IP erreichbar ist? Ich verwende den Virtualbox-Provider.

Antwort1

Nach umfangreichen Untersuchungen und Experimenten scheint es, dass Vagrant jeder VM eine andere Submaske zugewiesen hat, sodass sie keine Verbindung miteinander herstellen konnten. Tatsächlich befanden sie sich alle in unterschiedlichen Netzwerken.

Es stellt sich jedoch heraus, dass Sie dies überschreiben können. Konfigurieren Sie dazu einfach die Netzmaske für einen wie unten gezeigt.

# -*- 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

Derzeit bin ich mir nicht sicher, ob Sie die Netzmaske für alle in der globalen Konfiguration überschreiben können, während Sie einige VMs mit DHCP und andere mit einer statischen IP verwalten. Ich werde damit experimentieren, sobald ich wieder an einem leistungsstärkeren Rechner arbeite, sodass das Löschen und Erstellen der VM jedes Mal schneller geht.

Antwort2

Sie können auch etwas wie unten tun, wenn Sie mehrere VMs mit DHCP bereitstellen. Im optionalen VM-Abschnitt können Sie mehrere VMs erwähnen/benennen, die Sie benötigen.

# -*- 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

verwandte Informationen