Hyper-V环境下Vagrant Box无法启动问题求助
解决Hyper-V下Vagrant虚拟机SSH超时问题
先看你的报错,核心问题是Vagrant拿到了IPv6链路本地地址(fe80::215:5dff:fe02:8b01)尝试SSH连接,但这类地址在Hyper-V环境下通常没法直接用于主机和虚拟机的通信,而且大概率你的虚拟机没获取到可用的IPv4地址。结合你用的bento/ubuntu-18.04镜像,下面是针对性的解决思路:
1. 修复Hyper-V虚拟交换机配置
Hyper-V默认的"Default Switch"时常会出现DHCP分配异常,建议手动创建一个内部虚拟交换机:
- 打开Hyper-V管理器 → 右侧点击"虚拟交换机管理器"
- 新建"内部"类型的交换机,命名比如
VagrantInternalSwitch - 在Vagrantfile里指定这个交换机:
config.vm.provider "hyperv" do |hv| hv.memory = "2048" hv.vmname = "skywalker" hv.switch_name = "VagrantInternalSwitch" # 替换为你新建的交换机名称 end - 给主机的这个虚拟网卡分配静态IPv4(比如
192.168.100.1/24),方便后续虚拟机手动配置网络。
2. 强制Vagrant使用IPv4连接
修改Vagrantfile,让Vagrant优先尝试IPv4,同时可以手动指定预期的IP:
# 延长启动超时时间,给虚拟机足够时间获取IP config.vm.boot_timeout = 180 # 调整SSH连接超时 config.ssh.timeout = 60 # 指定Hyper-V配置,强制优先IPv4 config.vm.provider "hyperv" do |hv| hv.memory = "2048" hv.ip_address_timeout = 120 end # 手动指定SSH连接的IPv4(后续可根据实际分配调整) config.ssh.host = "192.168.100.10"
另外,你可以通过Hyper-V管理器打开虚拟机控制台(即使SSH连不上),用默认账号vagrant/密码vagrant登录,手动检查网络:
ip addr show
如果没有正常的IPv4地址,手动配置同网段IP:
sudo ip addr add 192.168.100.10/24 dev eth0 sudo ip route add default via 192.168.100.1
3. 排查镜像的Hyper-V兼容性
虽然bento/ubuntu-18.04标注支持Hyper-V,但部分镜像的Hyper-V驱动可能存在异常,你可以尝试换用官方Ubuntu Hyper-V镜像测试:
config.vm.box = "ubuntu/bionic64" # 官方Ubuntu 18.04 Hyper-V专用镜像
4. 排除代理配置的干扰
你的代理配置是给虚拟机内部使用的,但如果虚拟机网络未正常初始化,代理可能间接影响DHCP流程。可以先注释掉代理相关配置,测试虚拟机能否正常启动,排除干扰后再恢复。
内容的提问来源于stack exchange,提问作者Sebastian Sommerfeld




