Vagrant:如何在Vagrantfile中配置多个NIC?

37

官方文档仅提供了一个IP的示例:

http://docs.vagrantup.com/v2/networking/private_network.html

Vagrant.configure("2") do |config|
  config.vm.network "private_network", ip: "192.168.50.4"
end

在谷歌上搜索后,我只找到了一个多个IP的示例:

https://groups.google.com/forum/#!topic/vagrant-up/hqtdOEjjlsw

Vagrant::Config.run do |config|
  config.vm.define :web001 do |config|
    config.vm.box = "base"
    config.vm.forward_port("http", 5000, 8881)
    config.vm.forward_port("ssh", 22, 2222)
    config.vm.host_name = "web001.example.com"
    config.vm.network("33.33.33.10")
    config.vm.network("33.33.33.20", {:adapter=>2})
  end
end 

但是对我没有用...

任何帮助将不胜感激....

3个回答

40
使用Vagrant 1.6.1和Virtualbox的私有网络,您可以通过重复config.vm.network定义来创建多个私有IP地址:
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "precise64"

  config.vm.network "private_network", ip: "192.168.50.4"
  config.vm.network "private_network", ip: "192.168.50.5"
  config.vm.network "private_network", ip: "192.168.50.6"
  config.vm.network "private_network", ip: "192.168.50.7"

end

3
如何指定适配器?我只需要第二个,就像原来的问题中提到的那样。 - holms
1
你可以按照vagrant文档中的说明,或者像下面tmatilai的回答一样指定适配器。这是我刚试过的一个例子:`config.vm.network "private_network", ip: "192.168.50.4" config.vm.network "public_network", ip: "192.168.50.5" config.vm.network "public_network", bridge: 'en0: Wi-Fi (AirPort)'` - tlcowling

19

那个邮件列表的帖子早在Vagrant 1.1和新的配置API之前发布,因此语法不兼容。

但是你可以添加任意数量的config.vm.network调用,以下是一个简单的示例:

Vagrant.configure("2") do |config|
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.network "private_network", ip: "192.168.33.20"
  config.vm.network "public_network", type: "dhcp", bridge: "eth0"
end

4
私有网络需要使用IP地址,换句话说,dhcp只适用于公共网络。另外最好设置要绑定的接口:config.vm.network "public_network", type: "dhcp", :bridge => "eth0" - sumid
谢谢,我改进了这个例子。 - tmatilai
@sumid -- Vagrant文档似乎与您的说法不符。除非您提到的是将private_networkbridge组合使用时存在某些问题? - JimmidyJoo

2
确认以下配置语句的Vagrantfile

$ grep '^[ ]\+config.vm.network' Vagrantfile
  config.vm.network "private_network", ip: "192.168.56.101"
  config.vm.network "public_network", bridge: "en0: Wi-Fi (Wireless)", auto_config: false
  config.vm.network "public_network", bridge: "en0: Wi-Fi (Wireless)", auto_config: false

网络接口的结果如下所示。您可以看到存在未配置但存在的IP内部接口。

$ ip a l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:c0:42:d5 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
       valid_lft 86141sec preferred_lft 86141sec
    inet6 fe80::5054:ff:fec0:42d5/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:91:77:71 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/24 brd 192.168.56.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe91:7771/64 scope link
       valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:64:d4:68 brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:a4:f8:8e brd ff:ff:ff:ff:ff:ff

如果您尝试将以下内容添加到您的Vagrantfile

config.vm.network "private_network", auto_config: false

您会收到以下错误信息:

==> default: Destroying VM and associated drives...
/opt/vagrant/embedded/lib/ruby/2.4.0/ipaddr.rb:479:in `initialize': address family must be specified (IPAddr::AddressFamilyError)
    from /opt/vagrant/embedded/gems/2.1.5/gems/vagrant-2.1.5/plugins/providers/virtualbox/action/network.rb:263:in `new'
    from /opt/vagrant/embedded/gems/2.1.5/gems/vagrant-2.1.5/plugins/providers/virtualbox/action/network.rb:263:in `hostonly_config'
    from /opt/vagrant/embedded/gems/2.1.5/gems/vagrant-2.1.5/plugins/providers/virtualbox/action/network.rb:91:in `block in call'

似乎“private_network”设备需要一个IP地址。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接