【问题标题】:How to emulate Internet in multi machine environment with Vagrant如何使用 Vagrant 在多机环境中模拟 Internet
【发布时间】:2015-01-22 17:18:13
【问题描述】:

我正在创建一个 vagrant 多机配置文件。这是一个块:

Vagrant.configure(2) do |config|

  config.vm.box = "chef/centos-7.0"

  config.vm.define "radius" do |radius|
    radius.vm.hostname = "radius-server"
  end

  config.vm.define "mysql" do |mysql|
    mysql.vm.hostname = "mysql-server"
  end
end

如何模拟上述两台虚拟机在不同网络中的情况,被Internet隔开? 我可以创建两个不同的专用网络,它们具有两个不同的专用 IP 地址,例如第一个虚拟机的 192.168.1.3 和第二个虚拟机的 192.168.2.3。在这种情况下,机器将位于不同的网络中。但是他们可以互相交谈吗?

【问题讨论】:

    标签: virtual-machine vagrant simulation


    【解决方案1】:

    是的,他们会说话。

    您需要一个连接到这两个网络的路由器(第三个节点)。

    路由器充当(迷你)互联网:

    A=[192.168.1.3] <=> [*.*.1.1]=router=[*.*.2.1] <=> [192.168.2.3]=B
    

    详情

    最简单的方法是将路由器角色分配给物理主机,因为它在这两个网络上都有 IP 地址(我猜在您的示例中它们是 192.168.1.1192.168.2.1)。否则,它们只是数字,如果 Vagrant 没有抱怨,网络也将使用公共范围的 IP 地址运行(请注意断开物理网络以进行干净测试)。

    • 只需在物理主机上的操作系统中启用路由(转发) - googled example for Linux
    • 并确保通过此路由器在两个虚拟机上配置路由:

      A's shell> ip route add default via 192.168.1.1
      B's shell> ip route add default via 192.168.2.1
      

    注意:从技术上讲,由于网络使用私有 IP 地址,它们在 Internet 上不可路由(AFAIK,真正的 Internet 路由器丢弃具有这些私有 IP 地址的数据包,而家庭路由器对它们进行 NAT)。

    工作Vagrant 文件

    使用libvirt 提供程序的测试示例。 请注意,VM 连接到两个不同的网络。

    VAGRANTFILE_API_VERSION = "2"
    
    Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    
      config.vm.provider "libvirt"
    
      config.vm.define "rhel7_minion" do |rhel7_minion|
        rhel7_minion.vm.box = "uvsmtid/centos-7.1-1503-gnome"
        rhel7_minion.vm.synced_folder '.', '/vagrant', disabled: true
        rhel7_minion.vm.network 'private_network',
            :libvirt__network_name => 'primary_vagrant_private_net',
            ip: '192.168.1.2',
            :libvirt__netmask => '255.255.255.0',
            :libvirt__forward_mode => 'route',
            :libvirt__dhcp_enabled => true
      end
    
      config.vm.define "rhel5_minion" do |rhel5_minion|
        rhel5_minion.vm.box = "uvsmtid/centos-5.5-minimal"
        rhel5_minion.vm.synced_folder '.', '/vagrant', disabled: true
        rhel5_minion.vm.network 'private_network',
            :libvirt__network_name => 'secondary_vagrant_private_net',
            ip: '192.168.2.3',
            :libvirt__netmask => '255.255.255.0',
            :libvirt__forward_mode => 'route',
            :libvirt__dhcp_enabled => true
      end
    
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 2018-03-28
      • 2013-11-21
      • 2010-09-15
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多