在Ubuntu里重置网络,不能只盯着某一个点修修补补,得按层来清理:先看接口状态,再处理DHCP租约(这里必须指定接口名,比如ens33),接着检查netplan配置(renderer一定要和实际启用的服务对应上),然后再处理DNS缓存(正确做法是通过netplan设置nameservers,而不是直接硬改resolv.conf),最后别忘了宿主机的虚拟网卡。这几步少了任何一环,网络问题都可能反复出现。

在 Ubuntu 里,重置网络设置并不是简单按一下就能“恢复默认”,本质上更像是一套分层处理流程:接口状态要理顺,DHCP 租约要清掉,配置文件要核查,DNS 缓存要刷新,相关服务状态也得一并处理,少了哪一环都可能留下问题。很多人直接执行 sudo systemctl restart NetworkManager,结果往往并不理想,原因也很直接——残留的租约或错误配置并不会自己消失,服务一重启,这些问题很快就会原样冒出来。
dhclient -r 后必须指定接口名,否则可能失效
执行 sudo dhclient -r 时,若系统有多个活动接口(如 ens33、wlan0),该命令默认只释放主接口租约,其他接口的 /var/lib/dhcp/dhclient.leases 文件仍保留旧地址,导致 sudo dhclient 重新拉取时行为不一致。
- 先用
ip -br a确认活跃接口名(如ens33) - 强制释放指定接口:
sudo dhclient -r ens33 - 再主动请求新地址:
sudo dhclient -v ens33(加-v可看到 DHCP DISCOVER/OFFER/REQUEST 流程) - 注意:
dhclient不影响NetworkManager管理的连接,纯手动模式下才可靠
netplan 配置必须 renderer 匹配实际服务
Ubuntu 18.04+ 默认用 NetworkManager 或 systemd-networkd 渲染 netplan,但配置里写错 renderer 会导致 sudo netplan apply 静默失败——没报错,但配置根本不生效。
- 查当前 renderer:
sudo cat /etc/netplan/*.yaml | grep renderer - 桌面版通常用
NetworkManager,服务器版可能用systemd-networkd - 若配置中写
renderer: NetworkManager,但systemctl is-active NetworkManager返回inactive,就得先sudo systemctl start NetworkManager - 不要混用:删掉
/etc/netplan/50-cloud-init.yaml(Cloud-Init 生成的)再新建01-custom.yaml,避免冲突
/etc/resolv.conf 是软链接,硬改会被覆盖
很多用户手动 echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf,重启或 netplan apply 后发现又被还原——因为 Ubuntu 默认让 /etc/resolv.conf 指向 /run/systemd/resolve/stub-resolv.conf 或 /run/NetworkManager/resolv.conf。
- 正确做法是:在 netplan 配置中加
nameservers块,再sudo netplan apply - 临时调试可绕过:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf,再sudo systemd-resolve --flush-caches - 验证 DNS 是否真正生效:
resolvectl query www.baidu.com(比nslookup更准,能反映当前 resolver 实际路径)
虚拟机环境要同步重置宿主机虚拟网卡
VMware/VirtualBox 虚拟机网络不通,90% 情况不是 Ubuntu 本身问题,而是宿主机侧虚拟网络损坏。比如 VMware 的 VMnet8 NAT 服务崩溃,或 VirtualBox 的 VBoxNetDHCP 进程僵死,此时无论 guest 内怎么 dhclient 都拿不到地址。
- VMware:关机后打开
Virtual Network Editor → Restore Defaults,再确认 Windows 服务VMware DHCP Service和VMware NAT Service正在运行 - VirtualBox:命令行执行
VBoxManage dhcpserver remove --netname HostInterfaceNetworking-VirtualBox Host-Only Ethernet-Adapter,再重新启用 DHCP - guest 内执行前,先
sudo ip link set ens33 down && sudo ip link set ens33 up,确保接口重置底层状态
真正麻烦的从来不是命令记不住,而是不知道哪一层出了问题——接口 up 了但没 IP?有 IP 但 ping 不通网关?能 ping 通网关但无法解析域名?每一步都要用对应工具验证,而不是靠“重启大法”蒙混过关。