网卡没ip需分层排查:先用ip link show查状态,down则sudo ip link set up;未识别则lspci/lsusb确认硬件;up但无inet则检查dhcp(dhclient -v)或静态配置(netplan/ifcfg),并排除networkmanager与systemd-networkd冲突。

网卡没IP,通常不是“坏了”,而是某个环节卡住了。排查要从物理层开始,一层层往上验证,不跳步。
确认网卡是否被识别并启用
运行 ip link show,重点看目标接口(如 ens33、usb0)的状态:
- 若显示 state DOWN:说明网卡未启用,执行 sudo ip link set ens33 up
- 若接口根本没出现:可能是硬件未识别,用 lspci | grep -i ethernet(有线)或 lsusb(USB网卡)确认设备是否存在
- 虚拟机用户请检查虚拟网络设置——VMware 要勾选“已连接”和“启动时连接”,VirtualBox 要开启“网线已连接”,并确认是 NAT 还是桥接模式匹配当前需求
检查 IP 获取机制是否工作
接口 UP 但无 inet 地址(即没有 IPv4),说明地址分配失败。分两种情况处理:
- DHCP 场景:手动触发一次获取,运行 sudo dhclient -v ens33,观察输出是否有 Offer/ACK;失败时查日志 journalctl -u systemd-networkd -f 或 grep dhclient /var/log/syslog
- 静态配置场景:检查对应配置文件——Ubuntu/Debian 看 /etc/netplan/*.yaml,CentOS/Rocky 看 /etc/sysconfig/network-scripts/ifcfg-ens33,确认 BOOTPROTO=static、IPADDR、NETMASK、GATEWAY 等字段无拼写错误,且 ONBOOT=yes
验证网络服务是否接管该接口
很多系统同时运行 NetworkManager 和 systemd-networkd,二者可能冲突,导致接口被忽略:
- 查状态:systemctl status NetworkManager 和 systemctl status systemd-networkd
- 若两者都 active,停掉一个(推荐保留 NetworkManager):sudo systemctl disable systemd-networkd,再重启 NetworkManager
- 对 usb0 等热插拔网卡,还需确认内核驱动已加载:ethtool -i usb0 应返回 driver 名(如 cdc_ether),否则需 modprobe cdc_ether
排除配置与权限干扰
有些问题藏在细节里:
- 配置文件语法错误会导致应用失败,Netplan 配置后务必先 sudo netplan try 测试,再 apply
- 旧版 CentOS 中 ifcfg-ens33 的 ONBOOT=no 是常见漏改项,改成 yes 后需 sudo systemctl restart network
- SELinux 或防火墙一般不影响 IP 获取,但若启用了策略限制网络管理服务(如 dbus 权限),也可能间接阻断 DHCP 流程,临时设为 permissive 可辅助判断











