VirtualBox虚拟机内部网络的路由访问配置及连通性问题
inet的连通性问题 咱们一步步排查和解决这个问题,先从最基础的配置检查开始:
1. 验证U1的enp0s8静态IP配置正确性
首先确认/etc/network/interfaces里的静态IP配置没有问题,比如可以参考这个示例(选一个内部网络常用的私网网段,比如192.168.56.x):
auto enp0s8 iface enp0s8 inet static address 192.168.56.1 netmask 255.255.255.0 network 192.168.56.0 broadcast 192.168.56.255
配置完成后重启网络服务生效:
sudo systemctl restart networking # 或者用老方法:sudo ifdown enp0s8 && sudo ifup enp0s8
然后执行ip addr show enp0s8,确认接口状态为UP,且静态IP已正确加载。
2. 检查U1上的DHCP服务器配置
既然你在enp0s8运行DHCP服务,要确保地址池和enp0s8的静态IP处于同一网段,且无冲突。比如用dnsmasq的话,配置可以这样写:
interface=enp0s8 dhcp-range=192.168.56.100,192.168.56.200,255.255.255.0,24h
重启DHCP服务后,到U2上执行ip addr show enp0s3,确认是否获取到了192.168.56.100-200区间的IP,且网关指向U1的enp0s8地址(192.168.56.1)。如果U2没自动获取到IP,手动给U2配置静态IP试试:
auto enp0s3 iface enp0s3 inet static address 192.168.56.101 netmask 255.255.255.0 gateway 192.168.56.1
之后重启U2的网络服务。
3. 确认VirtualBox内部网络配置
打开VirtualBox,进入全局设定 -> 网络 -> 内部网络,确认inet这个内部网络存在,且两台虚拟机的对应网卡(U1的enp0s8、U2的enp0s3)都正确绑定到了这个网络。VirtualBox内部网络默认允许同网段机器通信,除非手动修改过规则,这一步主要是确认绑定没出错。
4. 排查防火墙干扰(最容易踩坑的点)
U1或U2的防火墙很可能阻止了ICMP请求(ping)或者内部网络的通信。先临时关闭防火墙测试:
在U1上:
sudo ufw disable # 如果你用的是firewalld:sudo systemctl stop firewalld
同样在U2上执行关闭命令,然后再尝试ping。如果能通了,说明是防火墙的问题,需要添加规则允许内部网络通信:
在U1上添加规则:
sudo ufw allow in on enp0s8 from 192.168.56.0/24 sudo ufw allow out on enp0s8 to 192.168.56.0/24
之后重新启用防火墙:sudo ufw enable
5. 开启U1的IP转发(如果需要跨网访问)
如果U2需要通过U1访问外部网络(比如U1的enp0s3桥接的无线网卡),必须开启U1的IP转发功能。编辑/etc/sysctl.conf:
sudo nano /etc/sysctl.conf
找到net.ipv4.ip_forward=1这一行,去掉前面的注释符号,然后执行以下命令生效:
sudo sysctl -p
如果只是内部网络互相访问,这一步可能不是必须的,但前面步骤都无效时可以尝试开启。
6. 检查路由表
在U1上执行ip route show,确认存在enp0s8的网段路由:
192.168.56.0/24 dev enp0s8 proto kernel scope link src 192.168.56.1 metric 100
在U2上执行同样的命令,确认默认网关指向U1的enp0s8地址:
default via 192.168.56.1 dev enp0s3 proto dhcp src 192.168.56.101 metric 100
如果U2的网关不对,手动添加路由:
sudo ip route add default via 192.168.56.1 dev enp0s3
最后测试
完成上述步骤后,在U2上执行ping 192.168.56.1(替换成你U1的enp0s8实际IP),应该就能连通了。如果还是不通,试试在U1上ping U2的IP,判断是否是单向不通,进一步缩小问题范围。
内容的提问来源于stack exchange,提问作者Abdul Rahman

