如何从另一个 virtualbox 来宾访问 vagrant 来宾?

Posted

技术标签:

【中文标题】如何从另一个 virtualbox 来宾访问 vagrant 来宾?【英文标题】:How can I access a vagrant guest from another virtualbox guest? 【发布时间】:2015-02-09 01:37:15 【问题描述】:

场景是我的开发环境在我的笔记本电脑(主机)上的 Vagrant 盒子上,我想在 vitualbox vm 中进行浏览器测试,所以我需要从另一个 vm 中查看一个 vm。

vagrant box 的端口是:8080,它被转发到同一个端口:8080 上的主机。所以我可以从 localhost:8080 的主机看到服务器

浏览器测试虚拟机应该使用哪个地址?

测试虚拟机的默认网关? 流浪虚拟机的ip? 主机的虚拟网络ip?

我应该在浏览器测试虚拟机上使用 NAT 还是仅主机适配器?

这产生了很多组合,我相信所有这些我都尝试过。我在这里还需要了解什么?

【问题讨论】:

【参考方案1】:

在您的用例中,您应该使用桥接网络(Vagrant 中的公共网络)。如果虚拟机位于同一主机上,您甚至可以使用内部(Vagrant 中的私有网络)。

如果使用公共网络,VM 的第二个 NIC 将能够从您网络中的 DHCP 服务器(例如您的家庭路由器)获取 IP 地址。

只需在您的Vagrantfile 中添加以下代码块并执行vagrant reload

Vagrant.configure("2") do |config|
  config.vm.network "public_network"
end

您应该可以使用vagrant sshifconfig / ip addr show 获取IP 地址。

【讨论】:

【参考方案2】:

如果您不想像我一样使用public_network,那么您应该使用private_network 执行以下步骤:

    从您的项目根目录打开Vagrantfile 搜索config.vm.network 添加此行config.vm.network "private_network", ip: "192.168.33.10"。请记住,这不是您的基础机器的 IP,它是一个虚拟机 IP 地址,您的机器 IP 应该不同。您可以说这是一个假 IP 地址,因此请将其更改为其他任何名称,例如 192.168.30.20。 使用 vagrant reload 重新加载您的 vagrant。 现在转到您的另一个虚拟客人,在我的情况下是Windows Guest 2。我的基地是Linux Mint Vagrant box 在Ubuntu Guest 1。以管理员身份打开C:\Windows\System32\drivers\etc\hosts 文件并在其中输入上述IP,如192.168.33.10 local.youralias.com。并保存文件,之后您现在可以通过http://local.youralias.com/ 浏览该网站。 如果您的客人 2 也是 Linux,只需编辑此文件 sudo vi /etc/hosts,并在其顶部添加此行 192.168.33.10 local.youralias.com。现在保存并退出并浏览 URL :)

享受吧!编码愉快。

【讨论】:

【参考方案3】:

添加到接受的答案,您实际上可以设置 IP 并指定要使用的网络接口。

我通过 wifi 和静态 IP 在 linux 机器上的设置: 您可以通过运行ifconfig 命令找到您的 wifi 接口名称。

Vagrant.configure("2") do |config|
    config.vm.network "public_network", :bridge => 'wlp8s0', ip: "192.168.1.199"
end

【讨论】:

【参考方案4】:

老问题,新答案:[免责声明:我不是流浪专家]

这两种解决方案都可能有效,但“流浪思维”的解决方案是您的客人(rinetd?)中的某些组件应将任何对未知端口的请求转发到主机。然后可以从主机将请求映射(通过 vagrant 端口转发)到在另一个客户机中运行的服务。

所以,继续:

1.在 guest-1 中,我们执行 localhost:1234。 Guest-1 将检测到此端口不可用并转发给主机 2.主机会检查vagrant端口转发并转发给guest-2 3. 在 guest-2 中,我们有一些不错的服务来收听 1234 后的内容 4. 完成。

【讨论】:

【参考方案5】:

这可能有很多原因。就我而言,我使用 vagrant fedora boxe。 我试过了:

首先使用我附加到仅主机适配器的 private_network 并启动 httpd 服务来测试来宾和主机之间的连接

config.vm.network "private_network", type: "dhcp", name: "vboxnet2"
config.vm.network "forwarded_port", guest:80, host:7070

但我无法从主机 ping 我的访客机器,也无法 telnet 打开的 httpd 服务

第二次使用public_network并启动httpd服务测试连通性

config.vm.network "public_network", bridge: "en0: Wi-Fi (AirPort)", use_dhcp_assigned_default_route: true

我可以从我的主机 ping 我的客人,但我无法远程登录 httpd 服务。

对于这两个用例,问题是 Fedora 来宾主机上的端口 80 被防火墙阻止。以下是解决问题的方法,让 privat_network 和 public_ntwork 都能正常工作:

   firewall-cmd --permanent --add-port 80/tcp  #open the port permanently
   firewall-cmd --zone=public --permanent --add-service=http 
   firewall-cmd --list-port  # list to check if the port was opened   
   systemctl stop firewalld   # stop and open the firewall service
   systemctl start firewalld

【讨论】:

以上是关于如何从另一个 virtualbox 来宾访问 vagrant 来宾?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VirtualBox 上 ping ubuntu 来宾 [关闭]

Ctrl-Alt-Del 在通过 RDP 登录 VirtualBox Windows 2003 服务器来宾时不起作用

如何在 virtualbox 虚拟机上设置静态 IP? [关闭]

在virtualbox来宾中设置共享

将 Virtualbox 共享文件夹挂载为在来宾操作系统上运行的 Docker 的卷

无法使用安装了启用 Hyper-V 和 WSL2 的 VirtualBox 启动 Windows 10 来宾 [关闭]