如何从另一个 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 ssh
和ifconfig
/ 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? [关闭]