如何使用Vagrant定义网络设置

5

我正在vagrant内运行Ubuntu,这是Vagrantfile:

# 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 = "ubuntu/trusty64"
  config.vm.network :private_network, ip: "192.168.99.4", :netmask => "255.255.255.0", auto_config: false
end

所以我期望的IP地址是192.168.99.4,但实际上我总是得到:
eth0      Link encap:Ethernet  HWaddr 08:00:27:88:ba:8f  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe88:ba8f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1      Link encap:Ethernet  HWaddr 08:00:27:9c:a9:9f 
          inet6 addr: fe80::a00:27ff:fe9c:a99f/64 Scope:Link 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

有什么线索我做错了吗?
对于这个问题,我有一些进展,它几乎像这一个: 如何在VirtualBox下使用Vagrant切换网络适配器的顺序? 它是关于不使用“10.0.2.15”,从我所理解的来看,它需要在virutalbox的“NAT”设置中更改,无法由Vagrant管理。

你要查看哪个接口? - DonCallisto
3个回答

13
vagrant book中得知: 作为VirtualBox的第一个网络接口,Vagrant要求连接到虚拟机的第一个网络设备必须是NAT设备。NAT设备用于端口转发,这样Vagrant才能访问虚拟机的SSH。 因此,任何主机专用或桥接网络都将被添加为其他网络设备,并暴露给虚拟机作为“eth1”、“eth2”等。“eth0”或“en0”通常总是NAT设备。 目前无法覆盖此要求,但重要的是要理解它的存在。
因此,您汇报的内容是关于NAT。 此外,由于在您的Vagrantfile中设置了auto_config: false ,因此未定义eth1,这基本上告诉Vagrant您将自己完成所有设置。所以你应该将此参数设置为true(或删除),或者您自己设置/etc/network/interfaces。 您可以查看vagrant公共网络,并查看是否可以使用代码片段示例从配置中删除eth0网关。
  config.vm.network "public_network", ip: "192.168.0.17"

  # default router
  config.vm.provision "shell",
    run: "always",
    inline: "route add default gw 192.168.0.1"

  # default router ipv6
  config.vm.provision "shell",
    run: "always",
    inline: "route -A inet6 add default gw fc00::1 eth1"

  # delete default gw on eth0
  config.vm.provision "shell",
    run: "always",
    inline: "eval `route -n | awk '{ if ($8 ==\"eth0\" && $2 != \"0.0.0.0\") print \"route del default gw \" $2; }'`"

显示:HostName 127.0.0.1 - Gurvan
好的,我错过了关于auto_config的部分,你告诉vagrant不要创建接口,而是由你自己创建 - 我也删除了ssh-config,因为它仍然在寻找vb,它仍然是127.0.0.1(我正在使用vmware,在私有网络中显示IP)。 - Frederic Henri
谢谢,我删除了auto_disable并将eth0设置为10.0.2.15,eth1设置为192.168.99.4。但我的初衷是想摆脱与外部本地网络冲突的10.0.2.15。有什么办法吗? - Gurvan
@Gurvan - 从上述描述来看,使用Vagrant似乎不可行。 - slm
@slm 这正是我想做的! VPN 隧道另一端的地址范围也是 10.0.x.x,无法到达它会对我的计划造成一些阻碍。 - Dave Hodgkinson
是的,这是一个问题,因为一些工具,比如Nomad,会选择第一个可用的IP地址。在这种情况下,它选择的是10.x.x.x而不是定义的192.x.x.x范围。 - mirageglobe

6

要更改默认的NAT,您应该在Vagrantfile中设置它。

例如:

 config.vm.define "bs" do |bvtserver|
  bvtserver.vm.hostname = "bvt-server"
  bvtserver.vm.network "private_network", ip: "192.168.50.3",
      virtualbox__intnet: "gcptest-network"
  bvtserver.vm.provider :virtualbox do |vbox|
    vbox.customize ["modifyvm", :id, "--natnet1", "10.3/16"]
  end
end

更多信息和信誉请参考:Li Chao的博客


0

我可以打赌你正在查看 eth0(那是另一个接口)。看看 eth1,你就会得到你正在寻找的东西。此外,在 vagrant 外部,尝试使用

进行 ping 测试。
ping 192.168.99.4

上面已更新,eth1没有显示出来,所以我将其启用了,并且不接受我的IP。 - Gurvan

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