【问题标题】:Vagrant: how to configure multiple NICs within a Vagrantfile?Vagrant:如何在 Vagrantfile 中配置多个 NIC?
【发布时间】:2014-05-30 15:06:52
【问题描述】:

官方文档仅针对 1 个 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

四处搜索,我只能找到 1 个多 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 

但它对我不起作用......

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

【问题讨论】:

    标签: networking vagrant


    【解决方案1】:

    使用 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
    

    【讨论】:

    • 我如何指定适配器?我只需要第二个,就像原来的问题一样
    • 您可以按照vagrant doc 指定适配器,类似于下面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)'
    【解决方案2】:

    那个邮件列表的帖子早在 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
    

    【讨论】:

    • An IP is required for a private network. 换句话说,dhcp 仅适用于公众。最好设置要绑定到哪个接口:config.vm.network "public_network", type: "dhcp", :bridge => "eth0"
    • 谢谢,我改进了这个例子。
    • @sumid -- vagrant docs 似乎不同意你的观点。除非将您指的 private_networkbridge 组合起来有一些复杂性?
    【解决方案3】:

    使用以下配置语句确认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。

    【讨论】:

      猜你喜欢
      • 2018-10-27
      • 1970-01-01
      • 2015-09-13
      • 2023-04-05
      • 2020-07-03
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多