1. 为什么说网络和软件源是Ubuntu 20.04的第一道坎
装好Ubuntu 20.04之后,大部分人遇到的第一个问题不是桌面卡顿,也不是软件装不上,而是网络明明连上了,打开浏览器却慢得像爬,或者干脆apt install什么都装不了。我见过不少新手卡在这一步就放弃了,转头去装回Windows。其实这个问题不难解决,关键在于你要理解Ubuntu的网络和软件源到底是怎么工作的。
先说结论:Ubuntu 20.04默认使用的软件源是官方源(archive.ubuntu.com),服务器在国外,国内访问速度极不稳定。而网络配置这块,Ubuntu从18.04开始把传统的/etc/network/interfaces换成了Netplan,配置文件格式变成了YAML,很多习惯旧方法的人会被这套新机制搞懵。
这两个问题叠加在一起,就是你刚装完系统时体验极差的根本原因。软件源从国外服务器拉取数据慢,而网络配置如果不当(比如DNS不对、网关冲突、虚拟机网络模式选错),又会加剧这种卡顿。所以我把它们放在一起讲,因为在实际排障中,这两者经常是同时出现、互相干扰的。
这篇文章适合刚装完Ubuntu 20.04正准备配置环境的读者,也适合在虚拟机里装Ubuntu但网络一直不通的玩家。我会从Netplan配置入手,讲清楚静态IP、DNS、虚拟机网络模式这几个核心点,再一步步教你换国内软件源,把那些apt报错、下载404、公钥无效的毛病一次性解决掉。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 网络配置:Netplan才是Ubuntu 20.04的正主
2.1 Netplan到底是个什么机制
Ubuntu从18.04开始引入Netplan作为默认网络配置工具,20.04继续沿用了这套方案。它的设计思路是:你写一个YAML配置文件,Netplan根据这个文件生成底层配置,然后交给systemd-networkd或NetworkManager去执行。
关键点在于,你写的配置文件是"声明式"的——你只需要说明"我想要什么状态",Netplan会帮你处理"怎么变成这个状态"。
默认情况下,Ubuntu 20.04桌面版的网络是由NetworkManager管理的,对应的Netplan配置文件在/etc/netplan/目录下,通常叫01-network-manager-all.yaml。服务器版则通常使用systemd-networkd,配置文件可能是00-installer-config.yaml。
先记住几个基础概念:
- Netplan的配置文件默认在
/etc/netplan/*.yaml - 修改配置后需要用
sudo netplan apply使之生效 - 配置文件的缩进非常重要,YAML对空格敏感,用错一个空格就是"配置无效"
我第一次用Netplan的时候,犯了一个特别蠢的错误:把ethernets写成了ethernet。结果配置文件无法解析,网卡直接起不来。这种问题排查起来很浪费时间,因为报错信息不一定能精确定位到单词拼写问题。
2.2 静态IP配置实操:从DHCP到固定地址
如果你在服务器上部署服务,或者需要SSH远程连接,那就必须给网卡设置静态IP。以常见的ens33网卡为例(VMware虚拟机里通常叫这个名字),配置静态IP的完整步骤如下。
第一步,查看你的网卡名:
bash复制ip addr show
找到状态为UP的那个非loopback接口,记住它的名字。
第二步,编辑Netplan配置文件:
bash复制sudo vim /etc/netplan/01-network-manager-all.yaml
把内容替换成下面这样的配置:
yaml复制network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: no
dhcp6: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 223.5.5.5
- 119.29.29.29
这里192.168.1.100/24是你的静态IP地址,192.168.1.1是网关,DNS填的是国内公共DNS。/24这个写法是CIDR表示法,等于子网掩码255.255.255.0。
第三步,应用配置并验证:
bash复制sudo netplan apply
ip addr show ens33
ping -c 4 223.5.5.5
这里有个容易踩坑的地方:在桌面版Ubuntu中,如果renderer写成NetworkManager,在修改配置后有时候需要重启NetworkManager服务才能生效:
bash复制sudo systemctl restart NetworkManager
如果ping 223.5.5.5通了,但是ping www.baidu.com不通,那基本就是DNS解析问题。域名解析走53端口,你可以在/etc/resolv.conf里确认DNS是否写入成功,也可以临时用手动指定方式来测:
bash复制nslookup www.baidu.com 223.5.5.5
这一步能直接测试DNS服务器是否可用,方便区分是网络不通还是解析失败。
2.3 DHCP模式下的DNS被覆盖问题
有些场景下你不需要静态IP,交给路由器自动分配就好。这时候仍然会遇到DNS问题。典型现象是:上午还能正常上网,下午突然所有域名都解析不了,但IP能ping通。
原因通常是DHCP服务器(一般是路由器)下发的DNS地址变了,或者下发的DNS本身不稳定。处理方法有两种。
第一种,在Netplan的DHCP配置中单独指定DNS,覆盖下发的DNS。修改配置:
yaml复制network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: yes
dhcp6: no
nameservers:
addresses:
- 223.5.5.5
- 119.29.29.29
然后netplan apply。
第二种,修改systemd-resolved的配置,强制使用指定DNS。编辑/etc/systemd/resolved.conf:
ini复制[Resolve]
DNS=223.5.5.5 119.29.29.29
FallbackDNS=8.8.8.8
