QEMU 用户网络与桥接网络设置总结
1. 用户网络(User-mode Networking)
特点:
- QEMU 虚拟机通过 NAT 访问外部网络。
- 不需要额外的网络配置,简单易用。
- 主机和虚拟机之间可以通过特定的 IP 地址(通常是
10.0.2.2
)进行通信。
设置示例:
qemu-system-x86_64 -hda your_image.img -net nic -net user
与主机通信:
- 虚拟机的 IP 通常为
10.0.2.15
。 - 主机通过IP
10.0.2.2
与虚拟机通信。
在虚拟机上,可以主动访问10.0.2.2与主机通信:
ssh 10.0.2.2
scp file 10.0.2.2:/root
在主机上,不能直接访问10.0.2.15与虚拟机通信:
- 用户网络模式通过 NAT 将虚拟机的 IP 地址映射到主机的 IP 地址。主机的网络栈并不知道如何直接与虚拟机的私有 IP 地址交互,因此无法 ping 通。
- 解决方法:使用端口转发,通过设置端口转发将虚拟机的特定端口映射到主机的端口,以实现通信。
端口转发示例(将虚拟机的 SSH 端口转发到主机的 2222 端口):
qemu-system-x86_64 -hda your_image.img -net nic -net user,hostfwd=tcp::2222-:22
在主机上,可以使用以下命令访问虚拟机:
ssh -p 2222 user@localhost
scp -P 2222 file user@localhost:/home/user
2. 桥接网络(Bridged Networking)
特点:
- 虚拟机直接连接到物理网络,获得与主机相同网段的 IP 地址。
- 适合需要与局域网中的其他设备直接通信的场景。
设置步骤:
- 1 创建桥接接口br0(Linux):
sudo ip link add name br0 type bridge
sudo ip addr add 192.168.1.1/24 dev br0 # 主机的桥接 IP
sudo ip link set br0 up
- 2 将物理网络接口添加到br0(假设物理接口为
eth0
):
sudo ip link set eth0 master br0
- 3 创建TAP 接口添加到br0
TAP接口是一种虚拟网络设备,虚拟机QEMU通过这个接口发送和接收网络数据包。
第一条命令创建一个名为 tap0
的 TAP 接口,并将其模式设置为 tap
,允许当前用户访问。
第二条命令将 tap0
接口激活,使其准备好传输数据。
第三条命令将 TAP 接口连接到桥接接口。
sudo ip tuntap add dev tap0 mode tap user $(whoami)
sudo ip link set tap0 up
sudo ip link set tap0 master br0
- 4 启动 QEMU 并通过tap0连接到br0:
QEMU通过tap0接口连接到网桥br0,br0完成tap0和物理网口eth0直接的网络包转发。
qemu-system-x86_64 -hda your_image.img -netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no -device virtio-net-pci,netdev=mynet0