快速诊断
# 查看网络接口状态
ip link show
# 查看 IP 地址
ip addr show
# 测试网络连通性
ping -c 4 8.8.8.8
# 测试 DNS 解析
ping -c 4 www.baidu.com
# 检查 NetworkManager 状态
nmcli general status有线网络
网卡未识别
# 查看以太网设备
lspci | grep -i ethernet
ip link show | grep -E "^[0-9]"
# 如果网卡未显示,检查驱动
sudo dmesg | grep -i eth
sudo dmesg | grep -i r8169 # Realtek 常见驱动未获取到 IP
# 让 NetworkManager 重新申请地址(dhclient 已不再随系统提供)
sudo nmcli device reapply enp0s3
# systemd-networkd 环境下改用:
sudo networkctl renew enp0s3
# 或重新连接接口
sudo nmcli device connect enp0s3
# 手动配置静态 IP
sudo nmcli con mod "Wired connection 1" \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8,114.114.114.114" \
ipv4.method manual
sudo nmcli con up "Wired connection 1"无线网络
Wi-Fi 适配器未检测到
# 查看无线设备(iwconfig 已废弃,改用 iw)
iw dev
nmcli device wifi list
# 检查是否被射频开关禁用
rfkill list all
sudo rfkill unblock wifi无法连接 Wi-Fi
# 扫描可用网络
nmcli device wifi rescan
nmcli device wifi list
# 连接 Wi-Fi
nmcli device wifi connect "SSID名称" password "密码"
# 查看已保存的连接
nmcli connection show
# 删除有问题的连接重新添加
nmcli connection delete "连接名称"频繁断线
# 检查电源管理是否关闭了 Wi-Fi
iw dev wlan0 get power_save
# 关闭 Wi-Fi 电源管理
sudo iw dev wlan0 set power_save off
# 永久生效
echo 'options iwlwifi power_save=0' | sudo tee /etc/modprobe.d/iwlwifi-powersave.confDNS 问题
症状:能 ping 通 IP,却解析不了域名
# 1. IP 层是否通(完全绕开 DNS)
ping -c 2 223.5.5.5
# 2. 域名解析是否失败
getent hosts archive.ubuntu.com第 1 步通、第 2 步卡住或提示「暂时不能解析域名」,问题就在 DNS,网络链路本身没问题。这种情况很容易被误判成「断网」,装软件时看到的报错也像是连不上仓库。
三步定位
# 1. 本机在用哪个 DNS
resolvectl status
# 2. 直接问这个 DNS 服务器(换成上一步看到的地址)
dig +short @223.5.5.5 archive.ubuntu.com
# 3. 换一个公共 DNS 做对照
dig +short @119.29.29.29 archive.ubuntu.comdig 属于 dnsutils 包,没装就先 sudo apt install dnsutils;不想装也可以全程用 getent hosts <域名> 走系统解析器。
三种结果对应三种原因:
| 现象 | 原因 | 处理 |
|---|---|---|
| 本机配置的 DNS 不应答(第 2 步无输出/超时),公共 DNS 正常 | DHCP 下发了不可用的 DNS,最常见于路由器自身的 DNS 转发挂了 | 换 DNS,见下一节 |
| 两个都不应答 | 出网被拦截或上游断了 | 看「防火墙问题」一节,并确认网关可达 |
| 都能应答但仍解析失败 | 本地缓存或代理设置 | sudo resolvectl flush-caches 后重试 |
换 DNS:临时与永久
临时改(重启失效,排查时最常用):
# ens18 换成你自己的网卡名,ip -brief addr 可以查
sudo resolvectl dns ens18 223.5.5.5
sudo resolvectl flush-caches要永久生效,先确认网卡由谁管理:
nmcli -t -f NAME,DEVICE con show --active用 NetworkManager(桌面版默认):
sudo nmcli con mod "netplan-ens18" ipv4.dns "223.5.5.5 119.29.29.29"
sudo nmcli con mod "netplan-ens18" ipv4.ignore-auto-dns yes
sudo nmcli con up "netplan-ens18"注意连接名要和上一条命令输出的一致,写错了会报「未知的连接」,看着像成功其实什么也没改。
用 netplan(改配置文件,重启依然有效,推荐):
sudo nano /etc/netplan/00-installer-config.yamlnetwork:
ethernets:
ens18:
dhcp4: true
dhcp4-overrides:
use-dns: false # 关键:不再接受 DHCP 下发的 DNS
nameservers:
addresses: [223.5.5.5, 119.29.29.29]
version: 2改完执行:
sudo netplan applyuse-dns: false 是重点。少了这一行,DHCP 下发的坏 DNS 仍会被合并进来,resolvectl status 里会看到想要的地址和坏地址并存。
主机能上网,虚拟机里却不行
如果宿主机或同网段其他电脑解析正常,只有某台虚拟机不行,多半是路由器把自己的地址当作 DNS 下发,而它的 DNS 转发已经失效。
验证:
# 在虚拟机和宿主机上分别执行,把网关地址换成你的
dig +short @192.168.1.1 archive.ubuntu.com两边都不应答,就坐实了网关的 DNS 转发坏了。三种处理方式:
- 改路由器的 DHCP/WAN DNS 设置(推荐,一次修好全网所有设备)
- 在局域网内另起一个 DNS(比如在常开的主机上跑
dnsmasq,虚拟机指向它) - 只改这台虚拟机的 netplan,直接指向公共 DNS(最局部,但每台都要改)
国内推荐 DNS
| 服务商 | 首选 DNS | 备选 DNS |
|---|---|---|
| 阿里云 | 223.5.5.5 | 223.6.6.6 |
| 腾讯 DNSPod | 119.29.29.29 | — |
| 114 DNS | 114.114.114.114 | 114.114.115.115 |
| 8.8.8.8 | 8.8.4.4 |
防火墙问题
# 查看 UFW 状态
sudo ufw status verbose
# 临时关闭防火墙测试
sudo ufw disable
# 允许特定端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp代理设置
系统代理
# 设置环境变量
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export no_proxy="localhost,127.0.0.1"
# 写入 ~/.bashrc 永久生效APT 代理
sudo nano /etc/apt/apt.conf.d/proxy.confAcquire::http::Proxy "http://127.0.0.1:7890";
Acquire::https::Proxy "http://127.0.0.1:7890";重置网络配置
# 重启 NetworkManager
sudo systemctl restart NetworkManager
# 完全重置网络配置
sudo rm /etc/NetworkManager/system-connections/*
sudo systemctl restart NetworkManagerLast updated on