Vagrant不允许在适配器1上使用NatNetwork

时间:2016-07-20 19:50:08

标签: vagrant virtualbox

即使我在Virutalbox中将网络设置为nat,Vagrant也会在适配器1(eth0)上强制网络类型natnetwork
我可以通过Virtualbox手动设置所有内容,我的所有虚拟机都可以根据需要通过eth0相互通信,端口转发也可以。我想让Vagrant以同样的方式工作,以便在同事之间轻松分配。

看起来其他人有这个问题,并且Vagrant没有解决这个问题: https://github.com/mitchellh/vagrant/issues/2779

有人知道解决方法吗?

详细信息:

$ VBoxManage list natnetworks
NetworkName:    ff_mgmt
IP:             10.0.2.1
Network:        10.0.2.0/24
IPv6 Enabled:   No
IPv6 Prefix:    fd17:625c:f037:2::/64
DHCP Enabled:   No
Enabled:        Yes
Port-forwarding (ipv4)
    https1:tcp:[]:4441:[10.0.2.11]:443
    https2:tcp:[]:4442:[10.0.2.12]:443
    https3:tcp:[]:4443:[10.0.2.13]:443
    ssh1:tcp:[]:2221:[10.0.2.11]:22
    ssh2:tcp:[]:2222:[10.0.2.12]:22
    ssh3:tcp:[]:2223:[10.0.2.13]:22
loopback mappings (ipv4)
    127.0.0.1=2

Vagrantfile的相关部分:

boxes = [
{
    :name => "ff1",
    :ip => "10.0.2.11",
    :ssh_port => "2221",
    :https_port => "4441",
    :mac =>  "0800270fa302",
    :memory => "8192",
    :cpus => "4"
},
{
    :name => "ff2",
    :ip => "10.0.2.12",
    :ssh_port => "2222",
    :https_port => "4442",
    :mac =>  "0800270fb302",
    :memory => "8192",
    :cpus => "4"
},
{
    :name => "ff3",
    :ip => "10.0.2.13",
    :ssh_port => "2223",
    :https_port => "4443",
    :mac =>  "0800270fc302",
    :intnet2 => "seg5a",
    :memory => "8192",
    :cpus => "4"
}
]

Vagrant.configure(2) do |config|
boxes.each do |opts|
    config.vm.define opts[:name] do |config|

        config.vm.box = "ff"
        #config.vm.box_version = 402

        config.vm.hostname = opts[:name]

        config.ssh.username = 'niska'
        config.ssh.private_key_path = '/home/niska/.ssh/id_rsa'
        config.vm.network :private_network, ip: opts[:ip]
        config.vm.network :forwarded_port, guest: 22, guest_ip: opts[:ip], host: opts[:ssh_port], id: 'ssh'
        config.vm.network :forwarded_port, guest: 443, host: opts[:https_port]

        config.vm.provider "virtualbox" do |vb|
            vb.gui = false
            vb.memory = opts[:memory]
            vb.cpus = opts[:cpus]

            vb.customize ["modifyvm", :id, "--nic1", "natnetwork"]
            vb.customize ["modifyvm", :id, "--nictype1", "virtio"]
            vb.customize ["modifyvm", :id, "--macaddress1", opts[:mac]]
            #vb.customize ["modifyvm", :id, "--intnet1", "ff_mgmt"]

        end
    end
end

vagrant up的输出。注意覆盖natnetwork。此外,端口转发选择不同的端口,因此无法连接。

$ vagrant reload ff1
==> ff1: Attempting graceful shutdown of VM...
    ff1: Guest communication could not be established! This is usually because
    ff1: SSH is not running, the authentication information was changed,
    ff1: or some other networking issue. Vagrant will force halt, if
    ff1: capable.
==> ff1: Forcing shutdown of VM...
==> ff1: Clearing any previously set network interfaces...
==> ff1: Preparing network interfaces based on configuration...
->>>     ff1: Adapter 1: nat                       <<<--- (overrode w/ 'nat')
    ff1: Adapter 2: hostonly
==> ff1: Forwarding ports...
    ff1: 22 (guest) => 2221 (host) (adapter 1)
    ff1: 443 (guest) => 4441 (host) (adapter 1)
==> ff1: Running 'pre-boot' VM customizations...
==> ff1: Booting VM...
==> ff1: Waiting for machine to boot. This may take a few minutes...
    ff1: SSH address: 127.0.0.1:22
    ff1: SSH username: niska
    ff1: SSH auth method: private key
    ff1: Warning: Authentication failure. Retrying...
    ...
    Vagrant never connects

1 个答案:

答案 0 :(得分:0)

不要将nic1(eth0)设置为除NAT之外的任何其他内容。 virtualbox要求第一个接口为NAT。

    error[E0308]: match arms have incompatible types
  --> main.rs:34:13
   |
34 | /             match res.status() {
35 | |                 StatusCode::TemporaryRedirect => handle_redirect(&res),
36 | |                 StatusCode::PermanentRedirect => handle_redirect(&res),
37 | |                 StatusCode::Ok => {
...  |
44 | |                 }
45 | |             }
   | |_____________^ expected struct `futures::FutureResult`, found struct `futures::AndThen`
   |
   = note: expected type `futures::FutureResult<FetchResult, hyper::Error>`
              found type `futures::AndThen<futures::stream::Concat2<hyper::Body>, std::result::Result<FetchResult, hyper::Error>, [closure@main.rs:38:51: 40:22]>`
note: match arm with an incompatible type
  --> main.rs:37:35
   |
37 |                   StatusCode::Ok => {
   |  ___________________________________^
38 | |                     res.body().concat2().and_then(move |body| {
39 | |                         Ok(FetchResult::NothingUseful())
40 | |                     })
41 | |                 },
   | |_________________^

如果你将nic的网络类型更改为natnetwork,那么vagrant就无法弄清楚如何ssh到这台机器。

如果您首先需要设置流浪者,请在完成配置后更改网络设置。然而;在那之后,你无法使用流浪汉。