Windows宿主机未配置即可通过名称访问VirtualBox中Linux虚拟机的原因
嗨,这个问题其实挺常见的,核心是**多播DNS(mDNS)**在背后默默帮你完成了自动解析,结合系统服务和VirtualBox的网络配置实现的,具体拆解一下:
Linux虚拟机的mDNS服务在“喊名字”
大多数主流Linux发行版(比如Ubuntu、Debian)默认会预装并启动avahi-daemon服务。当你在/etc/hosts里把IP和guestvm绑定后,这个服务会自动把guestvm转换成guestvm.local的形式,通过局域网的多播消息广播出去,相当于在局域网里喊:“我是guestvm.local,我的IP是192.168.22.10!”Windows宿主机能“听到这个喊声”
从Windows 10开始,系统自带了mDNS解析功能(集成在DNS Client服务里);如果是更早的Windows版本,大概率是你装过苹果的Bonjour服务(比如装iTunes时自动安装的),它专门负责监听局域网里的mDNS广播。当你在Windows里pingguestvm时,常规DNS解析失败后,系统会自动尝试查询mDNS记录,刚好抓到虚拟机广播的guestvm.local,就把IP对应上了。VirtualBox的网络保证了“喊声能传过去”
你能通过IP访问虚拟机,说明虚拟机和宿主机处于同一个可通信的网络环境(比如Host-Only模式、桥接模式),这就保证了mDNS的多播数据包能在两者之间正常传递。如果是NAT模式,默认可能会限制多播,但你这里能成功,说明网络配置是允许的。
要是想验证的话,可以试试这两个小操作:
- 在Windows命令提示符里输入
nslookup guestvm.local,应该能直接看到解析到192.168.22.10的结果; - 在Linux虚拟机里执行
systemctl status avahi-daemon,能看到这个服务是否在正常运行。
备注:内容来源于stack exchange,提问作者Ayman

