Vagrant Private Network IPは機能しませんが、DHCPは機能します


6

3つのVMが構成されたvagrant configファイルがあります。onには静的IPがあり、他の2つはDHCPにあることを除いて、すべて同じです。DHCPによってIPが割り当てられた2つは問題なく相互に通信できますが、静的IPを持つ1つは他のユーザーと通信できません。

言い換えれば、ping- client0> client1動作します

ping- client1> client0動作

ping- client1> serverしません

これは私のVagrantfileです:

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

server静的IP上で他の人がマシンに接続できるようにする方法はありますか?virtualboxプロバイダーを使用しています。

回答:


13

広範な調査と実験の結果、Vagrantは各VMを異なるサブマスクに割り当てていたため、相互に接続できません。実際には、それらはすべて異なるネットワーク上にありました。

ただし、これをオーバーライドすることができます。これを行うには、以下に示すようにネットマスクを設定します。

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

現時点では、一部のVMをDHCPで維持し、他のVMを静的IPで維持しながら、グローバル構成のすべてのネットマスクをオーバーライドできるかどうかはわかりません。より強力なマシンに戻ったら、それを試してみるので、毎回VMを破壊して作成する方が速くなります。


おかげで、OSXでゲスト間でsshできなかった問題が解決しました。
ああ

Vagrant 1.9.7、OSX 10.12.6、VirtualBox 5.1.24r117012を使用すると、同じ問題が発生しました-ゲスト間で接続できませんでした。ネットマスクは、プライベートIPでも機能するように見えました。答えてくれてありがとう!
カルロス

3

DHCPで複数のVMをプロビジョニングする場合は、次のようなこともできます。オプションのVMセクションでは、必要な複数のVMに言及/名前を付けることができます。

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

これを共有してくれてありがとう。ここでローカル構成ファイルを更新する必要があります。これは、テストのために複数の同一のクライアントが必要な場合のはるかにクリーンなソリューションです。ありがとう!
ダニエルグローブス14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.