为何两个仅主机网络无法互通?附VirtualBox+Linux Mint实验配置
为什么两个仅主机网络的虚拟机无法互相访问?
嘿,我来帮你拆解下这个问题,结合你的环境配置,核心原因和解决办法如下:
问题根源
虽然你的宿主机上已经有了192.168.56.0/24和192.168.57.0/24两个子网的路由条目,但默认情况下:
- Linux系统的IP转发功能是关闭的:宿主机不会自动把一个仅主机适配器的流量转发到另一个,这是Linux的安全默认设置。
- 防火墙可能拦截了转发流量:哪怕IP转发开了,默认的防火墙规则(比如ufw)通常会拒绝跨接口的转发请求。
解决步骤
1. 开启宿主机的IP转发功能
临时生效(重启后失效)
在宿主机终端执行:
sudo sysctl -w net.ipv4.ip_forward=1
永久生效(重启后依然有效)
编辑/etc/sysctl.conf文件:
sudo nano /etc/sysctl.conf
找到(或者添加)这一行:
net.ipv4.ip_forward=1
保存退出后,让配置立即生效:
sudo sysctl -p
2. 配置防火墙允许跨接口转发
因为你用的是Linux Mint,默认防火墙是ufw,按以下步骤操作:
- 编辑ufw的默认配置文件:
把sudo nano /etc/default/ufwDEFAULT_FORWARD_POLICY="DROP"修改为:DEFAULT_FORWARD_POLICY="ACCEPT" - 重启ufw让配置生效:
sudo ufw reload
如果你的环境用的是iptables而不是ufw,就添加以下转发规则:
sudo iptables -A FORWARD -i vboxnet0 -o vboxnet1 -j ACCEPT sudo iptables -A FORWARD -i vboxnet1 -o vboxnet0 -j ACCEPT
想要永久保存iptables规则的话,可以执行:
sudo iptables-save > /etc/iptables/rules.v4
3. 验证虚拟机的路由配置
确保两个虚拟机的默认网关指向宿主机对应仅主机适配器的IP:
- 对于vboxnet0子网的虚拟机,默认网关应该是
192.168.56.1(VirtualBox默认给仅主机适配器分配的网关IP) - 对于vboxnet1子网的虚拟机,默认网关应该是
192.168.57.1
你可以在虚拟机里执行ip route查看路由表,确认有类似这样的条目:
default via 192.168.56.1 dev enp0s3
额外检查点
- 先确认宿主机能ping通两个虚拟机的IP,确保宿主机和单个虚拟机的通信正常
- 用
ip link show查看宿主机的vboxnet0和vboxnet1接口是否处于UP状态
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

