3. 配置虚拟网络并测试连通性

配置虚拟网络并测试连通性 学习卡片

任务说明

本案例为QEMU虚拟机配置用户模式网络(User Networking),使虚拟机可通过NAT访问外部网络,并验证宿主机与虚拟机之间的网络连通性。用户模式网络是QEMU默认且无需管理员权限的网络方案,适合开发调试场景。

网络拓扑

宿主机 (Host) QEMU 进程 fd=3 (socket) SLIRP 栈 10.0.2.0/24 虚拟网卡 (tap) NAT/网关 10.0.2.2 内部连接 虚拟机 (Guest) eth0 10.0.2.15/24 应用程序 ping/ssh e1000 设备 外部网络 ping 10.0.2.15 默认网关 10.0.2.2

实现步骤

1. 准备虚拟机镜像(若已有镜像可跳过):

# 下载最小Linux镜像(约50MB)
wget https://download.qemu.org/example.img
# 或使用已有镜像,如 debian.qcow2

2. 启动带用户模式网络的虚拟机:

qemu-system-x86_64 \
  -m 512 \
  -netdev user,id=net0,hostfwd=tcp::2222-:22 \
  -device e1000,netdev=net0 \
  -drive file=example.img,format=qcow2 \
  -display none -serial stdio

参数说明:

  • -netdev user,id=net0:创建用户模式网络后端,SLIRP栈提供NAT
  • hostfwd=tcp::2222-:22:将宿主机2222端口转发至虚拟机22端口(SSH)
  • -device e1000,netdev=net0:为虚拟机添加Intel e1000网卡并连接至net0

3. 虚拟机内部网络配置(登录虚拟机后执行):

# 查看网卡是否识别
ip link show

# 配置IP地址(用户模式网络默认网段为10.0.2.0/24)
ip addr add 10.0.2.15/24 dev eth0
ip link set eth0 up

# 设置默认网关(10.0.2.2为SLIRP虚拟网关)
ip route add default via 10.0.2.2

# 验证虚拟机内部网络
ping -c 3 10.0.2.2   # 应能ping通虚拟网关

连通性测试

测试1:宿主机 → 虚拟机(在宿主机新终端执行):

ping -c 3 10.0.2.15

预期输出:3个ICMP请求均收到回复,丢包率0%。

测试2:虚拟机 → 宿主机(在虚拟机内执行):

ping -c 3 10.0.2.2

预期输出:3个ICMP请求均收到回复,说明虚拟机可通过SLIRP网关访问宿主机。

测试3:SSH端口转发验证(在宿主机执行):

ssh -p 2222 user@localhost

若虚拟机内SSH服务已启动,可通过宿主机localhost:2222登录虚拟机,证明TCP端口转发链路正常。

验证判定标准

测试项 命令 通过条件
虚拟机内网络 ip addr show eth0 eth0状态为UP,且IP为10.0.2.15/24
虚拟机→网关 ping -c 3 10.0.2.2 0%丢包,RTT正常
宿主机→虚拟机 ping -c 3 10.0.2.15 0%丢包,RTT正常
端口转发 ssh -p 2222 user@localhost 成功登录虚拟机shell

故障排查提示:若ping不通,优先检查虚拟机内网卡是否up、IP是否配置正确;若SSH不通,确认虚拟机内sshd服务已启动,且启动QEMU时hostfwd参数中的端口未被占用。