QEMU虚拟机IP配置的核心答案是:默认NAT模式下虚拟机会自动获取10.0.2.15,但想让外部设备稳定访问,就得手动改成静态IP或换桥接模式。
很多新手装完QEMU虚拟机,发现IP要么连不上,要么重启就变,其实问题不在QEMU本身,而是网络模式没选对、配置文件没改明白,下面用实际步骤拆解,不绕弯子。
qemu虚拟机ip怎么配置?先分清三种网络模式
QEMU跟VirtualBox、VMware最大的区别是:它默认不提供“一键开启的完整网络面板”,网络全靠命令行参数和宿主机虚拟设备配合,行业共识认为,QEMU网络按数据路径分为user、bridge、tap三类,其中新手最常用的是前两种。
user模式:自动分配IP,但外部访问受限
这是QEMU启动时不加任何网络参数时的默认状态,虚拟机的网卡通过QEMU内建的NAT协议访问外网,虚拟机的IP固定从10.0.2.0/24网段获取:
| 网络对象 | 默认值 |
|---|---|
| 虚拟机自身IP | 0.2.15 |
| 默认网关 | 0.2.2 |
| DNS服务器 | 0.2.3 |
| 可访问范围 | 仅宿主机和虚拟机之间 |
这个模式下,虚拟机里输入ip addr看到的eth0就是10.0.2.15,直接能上网,但局域网其他电脑访问不到这台虚拟机,因为QEMU在用户态做了地址转换,外部设备只能看到宿主机,适合做测试环境,不适合跑对外服务。
bridge模式:虚拟机和宿主机在同一局域网
把QEMU虚拟机的网卡直接绑定到宿主机的物理网卡桥上,虚拟机就像是局域网里的一台独立主机,由路由器分配IP,其他设备可以直接访问,配置稍复杂,但这是让QEMU虚拟机能被外部访问的唯一靠谱路径。
手动指定IP:静态配置绕开DHCP
无论用哪种模式,最终虚拟机的IP都由客户机(虚拟机里的操作系统)自己决定,你可以让客户机开启DHCP拿地址,也可以直接编辑客户机的网络配置文件写死一个IP。
qemu虚拟机配置静态ip:手动改文件的最稳路径
这里以Linux客户机为例,Windows客户机在“控制面板网络适配器”里手动填IP,原理一样。核心思路是:先查网卡名,再改配置文件,最后重启网络服务。
第一步:在虚拟机里查看网卡信息
启动虚拟机,打开终端执行:
ip addr ip route show default
第一行数字是网卡名,常见的是ens3、enp1s0或eth0,记下这个名称,后面配置里要对应。
第二步:Ubuntu/Debian系用netplan
从Ubuntu 18.04开始,网络配置统一走netplan,配置文件在/etc/netplan/目录下,编辑文件:
sudo vim /etc/netplan/01-netcfg.yaml
注意缩进,YAML格式对空格敏感):
network:
version: 2
ethernets:
ens3:
dhcp4: no
addresses: [192.168.1.100/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [192.168.1.1, 223.5.5.5]
保存后执行:
sudo netplan apply
再用ip addr确认IP是否变成了192.168.1.100。
第三步:CentOS/RHEL系用nmcli
CentOS 8及以上推荐用NetworkManager的命令行工具,先查看连接名:
nmcli connection show
然后修改IP:
sudo nmcli connection modify ens3 ipv4.addresses 192.168.1.100/24 sudo nmcli connection modify ens3 ipv4.gateway 192.168.1.1 sudo nmcli connection modify ens3 ipv4.dns 192.168.1.1 ipv4.method manual sudo nmcli connection up ens3
需要注意,配置静态IP前要确认网关和子网掩码与你的局域网一致,否则虚拟机虽然能起来,但外面照样访问不到。
qemu虚拟机桥接网络设置ip:让虚拟机拥有独立局域网地址
如果你的场景是:宿主机连着家用路由器,想让手机或其他电脑直接访问虚拟机里的服务(比如网页、数据库),就必须用桥接,桥接模式下,虚拟机的IP由路由器DHCP分配,也可以手动指定。
宿主机先创建网桥
假设宿主机是Linux,物理网卡名为eth0,执行:
sudo ip link add name br0 type bridge sudo ip link set br0 up sudo ip link set eth0 master br0
然后把宿主机的IP从eth0迁移到br0上:
sudo dhclient br0
执行完ip addr,看到br0获取到了局域网IP,说明桥接成功。
启动QEMU时指定桥接网卡
命令行启动QEMU时,网络参数必须写明桥接设备和虚拟网卡的型号:
sudo qemu-system-x86_64 -m 2048 -hda /path/to/disk.img -netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no -device virtio-net-pci,netdev=mynet0
这里用到了tap设备,它负责把虚拟机的数据包穿到宿主机br0上,启动后虚拟机里运行dhclient,就能从路由器拿到一个192.168.x.x的正式局域网IP。
virt-manager图形界面方案
如果你用的是virt-manager,右键虚拟机打开设置,选择“虚拟网络”,把“网络选择”改成“桥接到网卡”,下拉菜单选br0,点应用后再启动虚拟机,整个过程不需要敲命令,适合不熟悉Linux网桥的初学者。
排查qemu虚拟机ip获取失败的实用清单
配置完之后IP还是拿不到?按顺序检查下面几个环节,绝大多数问题出在宿主机网络服务没起来或客户机网卡没正常加载。
客户机内看不到IP
先在虚拟机里手动触发DHCP:
sudo dhclient -v eth0
如果卡住不动,说明虚拟机的DHCP请求根本发不出去,检查QEMU启动命令里是不是漏了-netdev或-device参数,常见错误是只指定了-net nic,但没配对-netdev tap,导致虚拟机只有网卡设备没有后端通道。
宿主机网桥创建失败
如果ip link add name br0 type bridge报权限错误,说明当前用户没有root权限,用sudo执行,或者把用户加入libvirt组,如果提示网桥已存在,可能是之前创建过残留,用sudo ip link delete br0清理后重建。
路由器没分配IP
桥接模式要求虚拟机网卡的MAC地址被路由器接受,部分路由器有MAC过滤功能,检查路由器的DHCP客户端列表里有没有出现虚拟机,如果路由器开了AP隔离,虚拟机也无法与局域网内其他设备互访。
防火墙拦住了DHCP请求
宿主机的iptables或firewalld可能会拦截bridge上的DHCP流量,执行:
sudo iptables -I FORWARD -i br0 -j ACCEPT sudo iptables -I FORWARD -o br0 -j ACCEPT
CentOS宿主机还要确认firewalld的trusted zone包含br0接口。
qemu虚拟机dhcp固定ip的底层逻辑与场景限制
相当一部分用户以为配置完静态IP就万事大吉,结果虚拟机重启后IP又变了,原因在于客户机内的NetworkManager有“自动连接”和“DHCP优先”行为,会覆盖手动配置。
要让IP彻底固定,核心不是改QEMU参数,而是关掉客户机里的DHCP客户端抢答机制。
Ubuntu下关闭自动协商
编辑/etc/NetworkManager/NetworkManager.conf,在[main]段添加:
plugins=keyfile
dns=default
然后在/etc/netplan/配置中把dhcp4: no写清楚,最后执行sudo systemctl restart NetworkManager,这一步确保netplan配置不会被NetworkManager自动改写。
固定IP的替代方案:端口转发
如果你的虚拟机跑在user模式下,不想配置桥接网络,可以用QEMU的hostfwd功能把宿主机的某个端口转发到虚拟机IP上,启动参数加上:
-netdev user,id=net0,hostfwd=tcp::2222-:22
这会把宿主机的2222端口转发到虚拟机的22端口(SSH),外部访问宿主机IP加2222端口,效果等同直接访问虚拟机,这个方案的优点是不用管虚拟机IP是多少,转发规则写死在QEMU参数里,重启后依然有效。
qemu虚拟机ip怎么配置才有效?常见问答
qemu虚拟机ip和宿主机不在同一网段,还能访问吗?
能,user模式下虚拟机IP是10.0.2.15,宿主机能直接访问,但虚拟机访问局域网其他设备时,QEMU会自动做NAT转换,如果你想从局域网其他电脑访问虚拟机,不能依赖user模式,必须用桥接或者端口转发,单纯改虚拟机里的IP地址为192.168.x.x,在user模式下不会生效,因为底层NAT网段被QEMU限制死了。
qemu虚拟机桥接后没有网卡设备,怎么解决?
在QEMU启动参数中使用-device virtio-net-pci时,客户机必须安装virtio驱动,Linux发行版默认自带,Windows客户机需要额外下载virtio-win驱动包,检查方法是执行ls /dev/vd,如果能列出设备,说明驱动已加载,否则用较普通的网卡模型e1000替代:
qemu-system-x86_64 ... -netdev tap,id=net0 -device e1000,netdev=net0
qemu虚拟机ip地址在重启后变化正常吗?
正常,但可以避免,使用user模式时,QEMU默认DHCP租约时间极短,重启后大概率拿新地址,使用桥接模式时,路由器分配的IP可能因租约过期而变化,要彻底固定,就去客户机里配置静态IP,并确保网络管理工具没有覆盖配置,配置完成后reboot测试,IP不变才算成功。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/635321.html


![[QEMU-KVM]首发天玑720支持KVM虚拟机 oppo realme大概率全系天玑都支持KVM已知OPPO A72 OPPO A53 Realme Q2](https://i1.hdslb.com/bfs/archive/da305522d03afed398a7ca1a01bb529169c60fc9.jpg)


