Skip to Content

快速诊断

# 查看网络接口状态 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.conf

DNS 问题

症状:能 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.com

dig 属于 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.yaml
network: 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 apply

use-dns: false 是重点。少了这一行,DHCP 下发的坏 DNS 仍会被合并进来,resolvectl status 里会看到想要的地址和坏地址并存。

主机能上网,虚拟机里却不行

如果宿主机或同网段其他电脑解析正常,只有某台虚拟机不行,多半是路由器把自己的地址当作 DNS 下发,而它的 DNS 转发已经失效。

验证:

# 在虚拟机和宿主机上分别执行,把网关地址换成你的 dig +short @192.168.1.1 archive.ubuntu.com

两边都不应答,就坐实了网关的 DNS 转发坏了。三种处理方式:

  1. 改路由器的 DHCP/WAN DNS 设置(推荐,一次修好全网所有设备)
  2. 在局域网内另起一个 DNS(比如在常开的主机上跑 dnsmasq,虚拟机指向它)
  3. 只改这台虚拟机的 netplan,直接指向公共 DNS(最局部,但每台都要改)

国内推荐 DNS

服务商首选 DNS备选 DNS
阿里云223.5.5.5223.6.6.6
腾讯 DNSPod119.29.29.29—
114 DNS114.114.114.114114.114.115.115
Google8.8.8.88.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.conf
Acquire::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 NetworkManager
Last updated on