如何通过Windows虚拟机访问Vagrant(Ubuntu)虚拟机部署的网站?
解决Vagrant Ubuntu虚拟机与VirtualBox Windows虚拟机的网络互通问题
我之前也碰到过类似的跨虚拟机网络不通的坑,给你几个针对性的排查和解决步骤,应该能帮你搞定:
1. 在Vagrantfile里定义统一的内部网络,避免Vagrant覆盖配置
Vagrant启动时会接管虚拟机的网络设置,所以手动在VirtualBox里改的配置肯定会被冲掉。正确的做法是直接在Vagrantfile里指定内部网络,这样Vagrant启动时就会用这个配置,不会再覆盖:
# 在Vagrantfile中添加这段配置 config.vm.network "private_network", type: "dhcp", virtualbox__intnet: "my-dev-network"
这里的my-dev-network是自定义的内部网络名称,你可以改成自己喜欢的。配置好后,执行vagrant reload让Vagrant重新加载网络设置。
然后打开VirtualBox,找到你的Windows虚拟机,进入设置 -> 网络,把网络连接方式改成内部网络,并且选择刚才定义的my-dev-network名称,保存后重启Windows虚拟机。
2. 确认两台虚拟机在同一网段
- 在Ubuntu虚拟机里执行
ip a,找到对应的内部网络接口(一般是enp0s8之类的),记下它的IP地址,比如192.168.56.101。 - 在Windows虚拟机里打开命令提示符,执行
ipconfig,找到内部网络的IP,确保它和Ubuntu的IP在同一网段(比如192.168.56.x)。如果Windows没自动获取到IP,可以手动设置一个同网段的静态IP,子网掩码设为255.255.255.0。
3. 检查Ubuntu的防火墙设置
Ubuntu默认启用的ufw防火墙可能会阻止Windows虚拟机的请求,先临时关闭防火墙测试:
sudo ufw disable
如果关闭后能ping通或者访问网站了,再针对性地开放网站需要的端口(比如80、443):
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
4. 排查跨虚拟机通信的链路
如果上面的步骤还没解决,可以逐步排查:
- 先在Mac主机上ping Ubuntu虚拟机的IP,如果能通,说明Vagrant的网络配置在主机侧是正常的。
- 再在Windows虚拟机里ping Mac主机的IP,如果能通,说明Windows和主机的网络是连通的。
- 如果前两步都正常,但Windows ping不通Ubuntu,检查Mac的系统防火墙:打开系统设置 -> 网络 -> 防火墙,确保允许VirtualBox相关的网络流量通过。
5. 尝试静态IP配置(可选)
如果DHCP方式有问题,可以在Vagrantfile里指定静态IP,这样更稳定:
config.vm.network "private_network", ip: "192.168.56.101", virtualbox__intnet: "my-dev-network"
然后把Windows虚拟机的IP手动设为192.168.56.102,子网掩码255.255.255.0,不需要设置网关,因为是内部网络直接通信。
按照这些步骤走下来,应该能让Windows虚拟机正常访问Vagrant里的网站了。
内容的提问来源于stack exchange,提问作者Crantzington
相关产品推荐
相关产品推荐

