ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ubuntu 22.04网络配置与换源全攻略:从netplan到apt镜像

Ubuntu 22.04网络配置与换源全攻略:从netplan到apt镜像 装好Ubuntu 22.04之后大多数人干的第一件事基本都一样配网络换源。但恰恰这两件事每个环节都有坑等着你。我这几年代人装系统、配服务器光上不了网和apt update报错这两个问题就不知道处理了多少次很多问题其实不是网络本身坏了而是配置思路不对。这篇就按我在实验环境里实际操作的顺序来聊从零开始把Ubuntu 22.04的网络配置和换源整个走一遍包括为什么这么配、底层原理是什么、遇到异常怎么查。不管你是虚拟机里跑Ubuntu还是物理机上装双系统这篇文章的思路都适用。1. 装完Ubuntu22.04先别急着换源网络状态才是第一步很多教程上来就让你改/etc/apt/sources.list我建议你忍一下。源是要换但如果你的网络本身就不通换了源照样报错而且你还分不清是源的问题还是网络的问题。所以第一步永远是搞清楚当前系统的网络到底处于什么状态。1.1 三种网络接入方式的高频翻车现场Ubuntu 22.04的安装环境大致可分三类每类的网络翻车点完全不一样。第一类是物理机直接安装。这种情况网络一般最好办插上网线或者连上WiFi桌面右上角网络图标点一点就能连。但翻车的地方在于桌面的网络管理器和netplan之间可能存在冲突明明在图形界面里连上了WiFi终端里却是Name or service not known这时候就要检查是不是NetworkManager和netplan在抢网卡的管辖权。第二类是VMware或VirtualBox里的虚拟机。这是翻车重灾区。默认NAT模式下虚拟机可以访问外网但宿主机访问不了虚拟机调成桥接模式宿主机能访问了虚拟机可能又因为DHCP拿不到IP而彻底断网。很多人配了一晚上就是在NAT和桥接之间反复横跳。第三类是WSL2或树莓派这类环境。WSL2默认走NAT网络配置相对简单但跨操作系统的网络概念容易让人迷惑树莓派装Ubuntu Server版则要注意默认镜像里可能根本没启用WiFi配置你得提前在SD卡的system-boot分区里写好wpa_supplicant.conf才能连上无线。1.2 先诊断再动手一条命令看清当前网络栈不管哪种环境我检查和配置网络的固定顺序如下# 1. 查看所有网卡状态和IP地址 ip addr show # 2. 查看当前路由表确认默认网关 ip route show # 3. 查看DNS解析配置 resolvectl status # 4. 测试是否连通网关 ping -c 4 192.168.x.1 # 5. 测试DNS解析 ping -c 4 baidu.com第一步是ip addr show看网卡有没有IP地址。如果网卡下面没有inet字段说明IP都没拿到后面什么都别谈先解决IP问题。第二步是看网关网关错了IP拿得再准也出不去。第三步看DNS这一步特别容易被忽略很多人ping 223.5.5.5能通但ping baidu.com解析不了问题就出在DNS上。插一句ifconfig这个命令在Ubuntu 22.04里默认已经没有了需要自己安装net-tools包。我习惯直接用ip命令输出信息更全网卡名、MAC地址、IP地址、状态全部一份命令全给你列出来。Ubuntu 22.04默认的网络配置工具是netplan它采用YAML格式的配置文件路径是/etc/netplan/目录下文件名一般是01-network-manager-all.yaml或00-installer-config.yaml。这个文件内容决定了你的网卡是用DHCP动态获取IP还是用静态IP。network: version: 2 ethernets: ens33: dhcp4: true这个配置表示ens33网卡用DHCP自动获取IPv4地址。如果在VMware里网卡默认是NAT模式虚拟机DHCP获取的地址由VMware提供的虚拟DHCP服务器分配通常是192.168.x.x网段。你在这个阶段需要确认的是这个YAML文件里网卡名和系统实际网卡名是否一致。很多人直接在教程里复制配置结果自己网卡叫ens160配置里写的却是ens33netplan apply一执行直接报错。1.3 修改netplan配置的完整流程如果你的系统里没有现成的网络配置或者只有NetworkManager的配置我建议你按下面的方式手动新建一个netplan配置文件。这个流程本身也是个为什么这样操作的示范。# 备份现有配置如果有 sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak # 编辑配置文件用vim或nano均可 sudo nano /etc/netplan/00-installer-config.yaml写入以下内容network: version: 2 ethernets: ens33: dhcp4: true dhcp6: false optional: true ens160: dhcp4: trueoptional: true的意思是如果引导时该网卡DHCP没完成也不阻塞系统启动这在笔记本或者多网卡环境里很有用避免因为某个网卡没拿到IP导致开机等待很久。改完后执行sudo netplan trynetplan try是你最好的朋友。它会在应用新配置前先等120秒你在这段时间内确认网络正常后按回车确认如果网络被配坏了它会等超时后自动回滚到之前配置。我强烈建议不管改什么先执行netplan try而不是直接netplan apply——这个习惯能救你无数次。2. 从现象到配置有线、无线、虚拟机三场景下的网络配置实操这个部分我按实际使用频率来拆有线网卡配置、无线网卡连接、虚拟机网络模式选择。每个场景我都会给出现象判断和具体操作。2.1 有线网卡netplan配置详解有线和无线在netplan里的配置方式不同。有线用ethernets无线用wifis。如果你在桌面上用的是NetworkManager无线网络一般通过图形界面连接但它也会在netplan配置里显示为一个wifis条目你需要小心处理。对于纯有线连接静态IP配置的netplan文件长这样network: version: 2 ethernets: ens33: dhcp4: false addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 223.5.5.5 - 119.29.29.29解释一下这段配置的意义dhcp4: false关闭自动获取IP改用下面手动指定的地址addresses这个网卡的IP地址和子网掩码/24代表255.255.255.0这是CIDR表示法跟你手动填掩码的效果完全一样routes to: default via: 192.168.1.1给这个网卡指定默认网关。default就是0.0.0.0/0所有不知道怎么走的数据包都从这条路由走nameservers指定DNS服务器这里我填的是阿里DNS和腾讯DNS你也可以用114.114.114.114或223.6.6.6静态IP的好处是稳定适合服务器或需要远程连接的环境。但坑也在这里你想配的IP可能和网络里其他设备冲突了或者网关地址填错——比如你的路由器管理地址是192.168.31.1你却在配置里写了192.168.1.1结果就是上不了网。在实际配置前先确认你的网段和网关# 先临时打开DHCP拿到地址 # 查看实际分配的IP和网关 ip addr show ip route show然后照着实际值去填静态配置。2.2 无线网络命令行连WiFi的完整姿势我遇到过不少这样的场景Ubuntu Server版或者某些桌面版装完后WiFi图标不见了图形界面里根本没有网络连接选项。这时候不要慌Ubuntu 22.04的命令行模式下也可以用nmcli操作NetworkManager连接WiFi。# 查看无线网卡是否被识别 nmcli device status # 打开无线 nmcli radio wifi on # 扫描可用WiFi nmcli device wifi list # 连接指定的WiFi nmcli device wifi connect WiFi名称 password 密码如果nmcli device status显示无线网卡状态是unmanaged说明这张网卡被netplan接管了NetworkManager管不了它。解决方法是修改netplan配置把无线网卡部分写成这样network: version: 2 wifis: wlp2s0: dhcp4: true access-points: 你的WiFi名称: password: 你的WiFi密码然后sudo netplan apply系统就会直接用netplan连接WiFi不需要打开NetworkManager。与之相反如果你希望无线网卡由NetworkManager管理桌面环境更推荐可以在netplan配置里添加network: version: 2 renderer: NetworkManagerrenderer: NetworkManager是你用图形界面管理网络的关键。Ubuntu 22.04桌面版默认就是这个但Server版默认是systemd-networkd。两边别搞混了renderer选错图形界面就会出现设备未托管的尴尬局面。2.3 虚拟机里的网络模式NAT、桥接、仅主机怎么选VMware和VirtualBox里跑Ubuntu 22.04网络模式通常有三个选项很多人选不明白我直接说结论。NAT模式宿主机当路由器虚拟机通过宿主机转发上网。优点是不需要额外配置虚拟机只要设置DHCP就能上网。缺点是外部设备无法直接访问虚拟机适合普通学习和实验场景。桥接模式虚拟机直接接入局域网拥有独立的局域网IP。优点是网络行为跟物理机完全一样可以被局域网内其他设备访问适合部署服务、远程SSH连接。缺点是虚拟机IP和宿主机IP容易冲突且需要局域网里有空闲IP。仅主机模式虚拟机和宿主机之间不通只能宿主机访问虚拟机。适合调试环境不需要上网。我个人的建议如果只是学习用NAT省心如果要跑服务让别人访问用桥接。一旦你从NAT切到桥接虚拟机IP可能变化原来SSH配置的旧IP就失效了这是很多人切完桥接就连不上的真正原因——不是网络坏了是IP变了。桥接模式下网卡也必须关闭DHCP或提前设置好静态IP。在VMware里编辑虚拟网络设置把桥接模式选到正确的物理网卡上如果宿主机既有有线又有无线选错了网卡虚拟机一样上不了网。3. 换源的核心逻辑apt源配置与仓库优先级网络通了之后紧接着就是换源。这一步解决的核心问题是apt下载软件包太慢。Ubuntu官方源服务器在国外国内访问速度感人换到国内镜像源能提速十倍以上。3.1 为什么换源、源的本质是什么apt源本质上是一系列软件包索引文件和.deb安装包的远程仓库地址。你在apt install时apt会从/etc/apt/sources.list和/etc/apt/sources.list.d/目录下的文件里读取仓库地址然后从对应的镜像下载索引再根据索引下载安装包。Ubuntu 22.04的源配置和旧版本有个重要区别旧版本把源写在/etc/apt/sources.list一个文件里新版本把它拆成了.list文件和.sources文件两种格式位置也可能不同。Ubuntu 22.04默认源文件是/etc/apt/sources.list和/etc/apt/sources.list.d/ubuntu.sources其中ubuntu.sources是deb822格式内容是Types: deb URIs: http://archive.ubuntu.com/ubuntu/ Suites: jammy jammy-updates jammy-backports Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg这里出现了几个关键词需要理解jammyUbuntu 22.04的代号main官方维护的自由软件restricted官方维护的非自由软件比如一些驱动universe社区维护的自由软件multiverse有版权或法律限制的软件换源的逻辑就是把URIs那行从http://archive.ubuntu.com/ubuntu/改成国内镜像地址其余结构保持原样。3.2 清华/阿里/中科大源配置文件选择与修改国内常用镜像源有三个清华TUNA、阿里云、中科大。我个人最常用清华源因为同步快、覆盖面广、还有专门的help页面教你配置。清华源的Ubuntu 22.04配置如下deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse这个配置文件里有四个仓库类别jammy基础仓库包含官方发布的稳定包jammy-updates包含更新过的软件包jammy-backports包含从新版本Ubuntu回溯过来的软件包jammy-security包含安全补丁更新这四个仓库缺一不可。如果你只配了jammy没有jammy-updates那你安装的软件可能不是最新修复版如果你少了jammy-security系统安全更新就收不到了。阿里云的源长这样deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse阿里云源的地址和清华源的区别只在域名仓库结构完全一样。中科大的也一样区别在于域名是mirrors.ustc.edu.cn。用哪个源取决于你所在地区和网络状况。我测试下来的体感北方联通网络用阿里云快教育网或科研机构用清华和中科大快电信网络三者都差不多。如果你不确定可以一套源换完试一天也就多花十分钟时间验证。3.3 修改源配置的正确顺序与安全更新注意事项换源的步骤我按从安全到激进的顺序来说第一步备份原有配置sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak第二步修改配置。我这里给一个用sed命令直接替换的通用方法适用于deb822格式的ubuntu.sources把archive.ubuntu.com统一替换为mirrors.tuna.tsinghua.edu.cnsudo sed -i s#http://archive.ubuntu.com/ubuntu/#https://mirrors.tuna.tsinghua.edu.cn/ubuntu/#g /etc/apt/sources.list.d/ubuntu.sources如果你用的是传统的sources.list格式也可以直接用编辑器打开把域名换成镜像站地址。第三步更新索引sudo apt update这一步会把镜像源里的包索引列表拉到本地。如果中途没有红色报错说明源配置成功。之后你会发现apt install的下载速度蹭蹭上涨。关于安全源有必要单独提一点。Ubuntu 22.04的jammy-security这套安全更新源清华源是直接镜像的。阿里云它的安全更新源同样走http://mirrors.aliyun.com/ubuntu/不需要额外处理。但如果你用的源商只同步了jammy没有jammy-securityapt update会报404这时候你需要检查那家镜像站的帮助页面看看安全源应该用哪个地址。4. Python生态换源pip与conda镜像配置Ubuntu作为Python开发者的主力系统光换apt源是远远不够的。pip install和conda install的源同样在国外下载速度慢到怀疑人生。如果你的Ubuntu是拿来跑Python项目的以下内容直接照抄。4.1 pip换源的持久化配置pip的源配置在~/.pip/pip.conf或~/.config/pip/pip.conf文件中Windows下是在%APPDATA%\pip\pip.ini。Linux下推荐使用~/.pip/pip.conf。mkdir -p ~/.pip cat ~/.pip/pip.conf EOF [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple extra-index-url https://mirrors.aliyun.com/pypi/simple/ trusted-host pypi.tuna.tsinghua.edu.cn mirrors.aliyun.com EOF解释一下这个配置里为什么有两个源index-url主下载源所有包都优先从清华PyPI镜像拉取extra-index-url备用下载源当主源找不到需要的包时会去阿里云PyPI镜像找之所以要配备用源是因为有些偏门的包可能只同步到了一部分镜像站。我遇到过同一个包在清华源有、在阿里源没有的情况所以配一个备用源确实能减少很多报错。如果你只是临时下载一个包也可以用命令行直接指定pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple但问题是这条命令只对当前这次安装生效下次装别的包又会打回原形。持久化配置才是正解。4.2 conda换源别再死磕.condarc了conda换源和pip不太一样。conda的源配置在~/.condarc而且它的镜像配置逻辑比pip复杂一些。conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes执行完这三条命令后你的~/.condarc会生成类似这样的内容channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ - defaults show_channel_urls: true注意最后还有一个defaults。这个默认源必须删掉否则conda还是会在官方源里找包。conda config --remove channels defaults这里有个细节很多人不知道conda mirror的pkgs/main和pkgs/free已经合并了。新版Anaconda的包都放在pkgs/main里pkgs/free的包基本不会再有更新留不留其实影响不大。但如果你在用老版本conda建议两个都保留。另外如果你用的是Miniforge或Mambaforge那conda源配置完全不同因为默认走的是conda-forge通道你需要这样设置conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --remove channels conda-forge4.3 换完源还慢的排查思路换源后pip或conda下载还是慢不要直接换另一个源先分析一下问题出在哪个环节。用pip装包时加上-v参数可以看到详细的下载地址和耗时。如果显示从pypi.tuna.tsinghua.edu.cn下载但速度还是很慢可能是你所在网络到这个镜像站的链路问题这时候换阿里云或中科大的pip源试试。如果下载瞬时速度快但总耗时长多半是单个包文件下载卡在某个依赖上可以用--timeout和--retries参数调整。conda的下载慢还有一个隐蔽原因conda在安装前需要解析依赖关系这个Solving environment阶段会请求repodata.json文件如果源服务器上的repodata.json很大几百MB即使数据包下载快解析阶段也会拖很久。这种情况下直接把缓存清掉再试conda clean -i -a-i清索引缓存-a清所有缓存。清完之后conda会重新拉取repodata有时候能明显加快安装速度。5. 换源和网络配置中的高频报错与排查链路这一节写的是真正值钱的经验。以下每个报错我都实际踩过且都有一个相对固定的排查思路。遇到问题别慌对照着一步步查。5.1 网卡消失 ens33不见了只有lo回环接口现象ip addr只显示lo没有ens33或eth0。这个现象在VMware里尤其常见原因通常是虚拟机克隆后网卡MAC地址变化但系统里旧的网络配置还绑定着旧MAC。排查链路# 查看所有网卡包括未启用的 ip link show # 查看PCI设备列表里有没有网卡 lspci | grep -i ethernet # 查看内核网络模块是否加载 lsmod | grep -i e1000在VMware里网卡型号通常是Intel 82545EM或e1000。如果lsmod里没有e1000模块说明驱动没加载。解决方法有两种一种是用dhclient手动拉起网卡sudo dhclient ens33另一种是检查netplan的配置把网卡名改成实际存在的名称然后sudo netplan apply。如果ip link show里确实看不到网卡还可以检查一下/etc/udev/rules.d/70-persistent-net.rules这个文件它记录了网卡和MAC的绑定规则。克隆虚拟机后MAC变了旧规则会阻止新网卡启动。删除这个文件后重启即可。5.2 能ping IP但解析不了域名DNS配置去哪儿了现象ping 223.5.5.5通ping baidu.com报Temporary failure in name resolution。问题几乎都出在DNS配置上。Ubuntu 22.04用的DNS解析工具是systemd-resolved它会对各网卡配置的DNS进行缓存和转发。排查链路# 查看当前的DNS解析状态 resolvectl status # 查看具体网卡的DNS配置 resolvectl dns # 检查resolv.conf的软链接指向 ls -l /etc/resolv.conf正常情况下/etc/resolv.conf是一个指向/usr/lib/systemd/resolved.conf的软链接内容是nameserver 127.0.0.53这样的地址。如果你在netplan配置文件里配了DNS那resolvectl status显示的DNS应该是你配置的IP。如果resolvectl status显示网卡没有DNS可以临时设置sudo resolvectl dns ens33 223.5.5.5 sudo resolvectl dns ens33 119.29.29.29永久生效还是要回到netplan文件里在对应网卡下加nameservers: addresses: - 223.5.5.5 - 119.29.29.29另一个经典坑是你往/etc/resolv.conf里手动添加了nameserver但重启后发现又变回原来的样子。因为systemd-resolved会重写这个文件你改了也会被覆盖。要么直接用resolvectl命令要么改netplan不要去手动编辑/etc/resolv.conf——这是Ubuntu 18.04之后就变了的行为很多人卡在这里。5.3 apt update报错404、Hash Sum mismatch、Temporary failureapt update报错分三类表现和处理方式各不相同。第一种是404 Not Found。这说明源仓库里不存在你请求的路径。常见原因是镜像源没同步某个仓库或者你的源配置里写了不存在的仓库类别。比如你把jammy-updates写成了jammmy-updates或者镜像站只同步了jammy而没有jammy-updates。解决方法是去镜像站帮助页面核对一下仓库列表把不存在的行删掉。第二种是Hash Sum mismatch。这个报错通常意味着缓存里的索引文件和镜像站的实际文件对不上。多半是之前apt update中途断网留下了脏缓存。解决方法是清缓存后重新更新sudo apt clean sudo rm -rf /var/lib/apt/lists/* sudo apt update第三种是Temporary failure resolving。这个报错就是DNS解析不了镜像站域名根源在DNS配置不是源的问题。先用ping mirrors.tuna.tsinghua.edu.cn测试域名解析解析失败的回头检查第5.2节里的DNS配置。5.4 虚拟机克隆后的网络问题与配置重置如果你在VMware里克隆了Ubuntu 22.04虚拟机重启后大概率上不了网。原因是克隆后虚拟机的MAC地址变了但系统里还保留着旧网卡的信息或者/etc/netplan里的配置还写着旧网卡名。这是我在用VMware批量创建实验虚拟机时经常遇到的场景。处理方法简单粗暴但有效# 删除netplan配置中旧网卡的绑定 sudo rm -f /etc/netplan/00-installer-config.yaml sudo touch /etc/netplan/00-installer-config.yaml # 重新创建一个全新的dhcp配置 sudo tee /etc/netplan/00-installer-config.yaml EOF network: version: 2 ethernets: ens33: dhcp4: true EOF sudo netplan apply如果你的网卡不叫ens33先用ip link show查看实际网卡名把上面的ens33替换掉。这个方法比你去逐条排查旧网卡信息快得多。克隆虚拟机嘛本来就是要一个新环境直接重置干净的网络配置反而最省事。6. 配置完成后的验证思路与日常维护建议配置完网络和源不代表一劳永逸。我建议你在每次配置完成后都按下面这个顺序做一遍验证这也算是我自己沉淀下来的一个验收清单。第一步确认网络连通性ip addr show | grep inet ping -c 4 223.5.5.5 ping -c 4 baidu.com第二步确认DNS解析正常nslookup baidu.com第三步确认apt源可用sudo apt update sudo apt upgrade -sapt upgrade -s是模拟升级只展示需要更新的包列表不实际升级。这一步可以确认源里的包索引没坏。第四步验证常用开发工具链pip config list conda config --show channels如果这些输出里显示的源都是你配置的国内镜像那说明基本完工了。日常维护上我分享几个习惯更新系统和安装新软件时先apt update再apt install不要跳过update直接install否则容易装到索引里已经下线的旧版本。apt upgrade之后如果出现unmet dependencies错误用sudo apt --fix-broken install修复然后重新upgrade。pip和conda的源配置文件属于用户级配置同一台机器上不同用户配置可能不同。如果你用sudo pip install读到的是root用户的配置普通用户的pip install读到的是当前用户的配置。出现为什么我配了源还是慢的问题时先确认你用的是哪个用户身份装的包。我一直觉得换源这件事本身没什么难度难点在于你要理解源只是一个地址换源过程真正做的是修改apt/pip/conda去哪个地址找软件。你把这个逻辑想通了后面的报错排查才会有方向。每次配置完网络和源我都会习惯性地把每个步骤的命令和输出存一份到笔记里等下次遇到类似问题直接对照就能快速定位。这比临时翻教程效率高太多了。
返回列表