3. 配置虚拟网络并测试连通性
任务说明
本案例为QEMU虚拟机配置用户模式网络(User Networking),使虚拟机可通过NAT访问外部网络,并验证宿主机与虚拟机之间的网络连通性。用户模式网络是QEMU默认且无需管理员权限的网络方案,适合开发调试场景。
网络拓扑
实现步骤
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栈提供NAThostfwd=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参数中的端口未被占用。