如何在公共网络中访问Vagrant Box

35

我在vagrant中创建了一个盒子。在Vagrantfile中,我已经指定了网络为

     Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network :private_network, ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
   config.vm.network :public_network

我无法在VLAN外访问VagrantBox。我需要在公共网络中访问Vagrant Box。如何配置vagrantfile以便我可以在公共网络中访问?

6个回答

24

取消注释Vagrantfile中的以下行:

config.vm.network :public_network

修改后的文件如下所示:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "box_name"
  config.vm.network :public_network
end

保存后,使用vagrant reload重启虚拟机。

对于VirtualBox,它将使用桥接模式进行网络连接,这意味着虚拟机将从VLAN的DHCP服务器获取IP地址。

您也可以使用以下命令设置VLAN IP:config.vm.network :public_network, ip: "192.168.0.160"

请参考 => 公共网络


任何在本地网络中的人都可以使用vagrant用户名和密码访问我的虚拟机吗? - Robert
是的,使用 ssh vagrant@<guest_ip> - Ricardo García
对我而言,只有使用 config.vm.network "public_network", :bridge => "eth0", auto_config: false 才能正常工作,然后使用 shell provisioners 手动添加 eth1 的设置。任何包含 config.vm.network 中的 'ip' 的组合在这里都不起作用。 - Nikos Alexandris

7

默认情况下,Vagrant会在虚拟机内的其他桥接网络上删除默认(工作)路由。我的问题是特定于DHCP的,只能通过以下配置桥接网络来解决:

config.vm.network :public_network, :bridge => 'em1',:use_dhcp_assigned_default_route => true

感谢https://groups.google.com/forum/#!msg/vagrant-up/yNhWV42pcgk/NbOck1xqtFQJ提供的帮助。

可能存在一种静态IP地址的等价物。


这个drop_nat_interface_default_route => false是否相关? - Nikos Alexandris
@Nikos 我不确定,但它仍然可以正常工作。 - gs_za

2
我无法通过阅读(持续了几个小时)找到答案。我是这样解决的:
以下是我的Vagrantfile文件,对我而言,重要的部分是config.vm.network :public_network。重新加载Vagrant后使用vagrant reload,我选择了4个可用桥接网络接口中的第一个选项(我不确定是否只是靠运气选择了正确的一个,或者其他选项也可以,我将进一步尝试),然后在使用vagrant ssh进入vagrant Box后,运行ifconfig命令,在输出的3个IP地址中选择其中之一,将其粘贴到浏览器中,然后就可以使用了。
似乎没有人谈论过需要使用vagrant ssh进入Vagrant Box并找到其中一个IP地址的事情。希望这对未来的网络新手有所帮助。
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "bahmni-team/bahmni"
  config.vm.box_check_update = true
  config.ssh.insert_key = false
  config.vm.network :public_network

  config.vm.synced_folder "..", "/bahmni", :owner => "vagrant"
  config.vm.provider "virtualbox" do |v|
     v.customize ["modifyvm", :id, "--memory", 4092, "--cpus", 2, "--name", "Bahmni-RPM"]
  end
end

0
根据Vagrant文档中的公共网络,我在Vagrantfile的shell provisioner中添加了route add default gw [路由器的私有IP]。这告诉我的虚拟机将我的路由器设置为默认网关。然后,我使用ip route del default via 10.0.2.2删除了先前创建的默认网关。我在虚拟机上打开了所需的端口。通过将我的ISP网关设置为IP透传模式到我的路由器,我将所需的端口转发到了我的虚拟机。使用Curl命令访问您的公共IP地址,就完成了!

0

终于!这是多年以后,但我找不到更多的当前信息。对我来说,问题不仅在于我定义了一个私有网络,还有一个转发端口,而且所有这些都很好地工作。然后我注释掉了private_network,用public_network替换它,却无法访问任何内容。尝试了这里和其他地方找到的所有方法,都不行。只有当我注释掉端口转发时,事情才重新开始工作,而不需要任何手动桥接/ DHCP配置。


-8
  1. 单个虚拟机环境

    您可以使用命令:vagrant ssh

  2. 多个虚拟机环境

    您可以使用命令:vagrant ssh {hostname}


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