关于python:使用DHCP在公共网络上具有唯一IP地址的Vagrant多个VM

关于python:使用DHCP在公共网络上具有唯一IP地址的Vagrant多个VM

主机:Ubunutu 服务器 20.04

工具: 流浪汉

正在使用的框/图像 自定义 ubuntu 服务器映像。

Vagrant文​​件:

# -*- mode: ruby -*-
# vi: set ft=ruby :


$veh= 1
$vehCount = 2

$vehList ={}


while $veh<= $vehCount do
  $vehList["veh_#{$veh}"] = "525400" + Array.new(6){[*"A".."F", *"0".."9"].sample}.join
  $veh+=1
end

Vagrant.configure("2") do |config|

  $vehList.each do |vehName, macADDR|
   
    config.vm.define vehName do |v|

      v.vm.box = "vehserver"
     
      v.vm.network "public_network", :mac => macADDR 
    end
  end
end

目标:我想要做的是启动多个虚拟机,每个虚拟机都有一个唯一的 IP 地址,使它们可以相互通信,并允许 LAN 上的其他物理机器也可以访问它们。

实际情况是:不是每个虚拟机都有自己的 IP 地址,而是所有虚拟机都使用相同的 IP 地址。

我尝试过的:

  • 将虚拟机创建从循环中拉出。我认为这可能与循环的工作方式有关。但如果我将它们分开,仍然是同样的问题。
  • 可能是因为他们使用了相同的 Vagrantfile。所以我创建了第二个目录,并在两个 Vagrantfile 上运行了所有相同的设置,然后再次运行。所有虚拟机都有相同的 IP 地址。
  • 我正在运行自定义 Box 镜像,所以我认为是镜像的问题。因此,我ubuntu/trusty64从 vagrant repo 中下载了该镜像,并针对单个或多个文件构建进行了测试。所有 IP 地址都相同
  • 我发现的第一个解决方案是确保 MAC 地址不同。我能够毫无问题地做到这一点。从上面的 Vagrantfile 中可以看到,我为每个虚拟机生成了一个唯一的 MAC。然而,这并没有改变什么。
  • 确保 VB 使用的是桥接适配器而不是主机专用适配器。我已验证我正在使用的适配器“eno1”实际上是桥接适配器。我使用 vboxmanage list bridgedifs 列出了所有桥接适配器。
  • 管理默认路由器。因此在页面底部此链接他们谈到在公共网络上使用 DHCP 来利用 public_nework 上的 DHCP。该命令似乎正在删除默认网关。但我不确定它到底在做什么。无论哪种情况,我都尝试了说明,但没有任何结果。两个 VM 都看到了 LAN 的默认网关。
  • 最后,我尝试再次执行上述所有操作,但首先删除了 .vagrant 文件。

什么方法有效,但却不能解决我的问题。 有一件事虽然有效但不能解决我的问题,那就是如果我使用两个不同的盒子图像。例如,ubuntu/trusty64在两个不同的文件上,我的自定义图像将创建两个具有不同 IP 地址的不同 VM。虽然它可以工作,但它对我没有任何好处,因为我的项目需要预配置的自定义盒子。

如何配置 Vagrant 以向 DHCP 服务器询问两个虚拟机的唯一 IP 地址?

相关内容