外观
客户机没有网络
适用范围
宿主机自身网络正常(Web UI 能访问、其他客户机能上网),但某一台虚拟机或容器没有网络:拿不到 IP、能连内网连不了外网,或者完全没反应。
不适用于:所有客户机同时失去网络,那更可能是宿主机网桥或物理网络本身的问题,请先看Web UI 打不开和改网络后失联。只有一台受影响时才按本文排查。
开始排查前
先确认范围:
- 是这一台一直有问题,还是刚才还好好的突然没了?
- 是新建的客户机第一次配置网络,还是运行中的客户机突然失联?
- 客户机是虚拟机(KVM)还是 LXC 容器——两者的排查细节不完全一样。
排查步骤
1. 从宿主机侧确认网卡有没有接上
sh
# 虚拟机
qm config <vmid> | grep net
# 容器
pct config <ctid> | grep net确认 bridge= 指向的是预期的网桥(通常是 vmbr0)。再确认这个接口真的出现在网桥上:
sh
bridge link show看不到对应的 tap/veth 接口 → 客户机的虚拟网卡设备可能没有正常创建,通常意味着客户机本身没有正常启动网卡设备,或者配置里网桥名字写错了,先修正 net0 里的 bridge= 参数。
能看到接口 → 网桥这一层没问题,继续下一步。
2. 检查网络相关的开关
sh
qm config <vmid> | grep -E "net0|firewall"依次确认:
| 检查项 | 说明 |
|---|---|
firewall=1 但规则不完整 | 客户机网卡上开了防火墙,如果没有配对应的放行规则,可能挡住流量。临时改成 firewall=0 测试(仅用于诊断) |
tag= 误填了 VLAN | 如果网桥或交换机没有对应的 VLAN 配置,打了 tag 的流量会被丢弃或者送错地方 |
| 网卡型号(Model) | virtio、e1000 等,下一步会用到 |
3. 进客户机内部检查
虚拟机:
sh
# 在虚拟机内部(Linux)
ip a
ip link网卡设备根本不存在 → 客户机操作系统没有识别到这块虚拟网卡,多见于老旧系统不认 VirtIO 驱动。临时把网卡型号换成 E1000 测试,能通就说明是驱动问题,装好 VirtIO 驱动后换回来。
网卡设备存在但没有 up,或者没有拿到地址:
sh
# 在虚拟机内部
ip link set <网卡名> up
dhclient <网卡名> # 或用系统自带的网络管理工具容器:先确认容器本身处于运行状态,再检查容器内部:
sh
# 宿主机上
pct exec <ctid> -- ip a无特权容器(unprivileged)网络异常,多与 pct config 里的 net0 配置本身(网桥、tag、IP 设置)有关,而不是容器内部驱动问题——容器共享宿主机内核,不存在"驱动没装"这一说。
4. 没拿到 DHCP 地址
在路由器(或你的 DHCP 服务器)的租约列表里,查这台客户机的 MAC 地址(qm config <vmid> 或 ip link 里能看到)有没有出现:
- 没有出现过请求记录 → 说明请求根本没发出去或没到达 DHCP 服务器,回到步骤 1、2 检查网桥和 VLAN。
- 出现了但没有分配成功 → 检查 DHCP 服务器的地址池是否已耗尽,或者有没有针对这个 MAC 的黑名单/保留策略。
如果客户机配置的是静态 IP,直接检查网段、网关、子网掩码是否填写正确。
5. 能连内网,连不了外网
依次确认:
sh
# 客户机内部
ping <网关IP>
ping 8.8.8.8
cat /etc/resolv.conf # 或对应系统的 DNS 配置- 连网关都不通:网关地址填错,或者网关设备本身有问题。
- 能 ping 通网关的 IP,但域名解析不了:DNS 配置问题,和网络连通性是两回事。
- 如果这台客户机用的是 NAT 模式而不是桥接:检查宿主机上的 NAT 转发规则(
iptables/nft里对应的MASQUERADE规则)是否还在,配置改动或防火墙重载有时会清掉自定义规则。
6. 容器特有的检查
无特权容器的网络出问题,还可以确认宿主机上有没有相关的拦截规则(比如通过 PVE 防火墙对容器网卡单独设置了规则)。确认容器配置文件里网络那一段和预期一致:
sh
cat /etc/pve/lxc/<ctid>.conf | grep net确认恢复
- 客户机内部能 ping 通网关和外网地址(如
8.8.8.8或公司/家庭出口)。 - 域名能正常解析。
- 如果装了 QEMU Guest Agent,PVE 的 Summary 页面能看到这台客户机的 IP 地址。
- 需要被其他设备访问的服务,从局域网内其他设备实际连一次,确认端口能通。
仍未解决
准备好这些信息去如何有效求助:
sh
qm config <vmid> # 或 pct config <ctid>
bridge link show外加客户机内部 ip a / ip route 的输出,以及问题是从什么时候开始的、期间有没有改过宿主机网络配置。