拿到一台 Ubuntu 24.04很多人第一时间就是敲ifconfig结果发现命令不存在。换成ip address后又嫌输出太乱干脆打开设置界面慢慢点。换 IP 确实不是什么大事但我见过太多人在评论区问“为什么我改了不生效”“为什么重启又变回去了”“为什么配置文件保存后直接断网”核心原因基本都是没搞清楚 Ubuntu 24.04 的网络管理机制。这篇内容就把图形界面和命令行两条路线都完整跑一遍顺便把最容易翻车的几个坑填平无论你是刚接触 Ubuntu 的桌面用户还是负责维护服务器的运维都应该能在这里找到可以直接照抄的操作步骤。1. 动手前先搞懂 Ubuntu 24.04 的网络管理架构1.1 Netplan 到底在做什么Ubuntu 从 18.04 开始引入了 Netplan 这套网络配置工具用 YAML 文件来描述网络接口的配置。Netplan 本身不直接管网卡它是一个“翻译层”把你写好的配置转成两种后端服务能识别的配置格式一种是systemd-networkd另一种是NetworkManager。24.04 完全沿用了这套机制所以你在系统里改 IP本质上不是去编辑/etc/network/interfaces这个文件现在已经没有实际作用了而是去修改/etc/netplan/目录下的.yaml文件或者通过图形界面让 NetworkManager 替你改写配置。理解这一层之后很多“改了没生效”的问题就有了排查方向你改的配置可能要么没被 Netplan 读取要么在应用的时候被其它配置文件覆盖了。1.2 桌面版和服务器版的后端不一样这是最容易让人困惑的一点。你从官网下载的 Ubuntu 24.04 Desktop 镜像默认的 Netplan 渲染器是NetworkManager也就是说你在“设置 - 网络”里点出来的配置最终会写到网络连接里由 NetworkManager 负责应用。而你安装的 Ubuntu Server 版本默认渲染器是systemd-networkd它没有图形界面必须通过编辑 YAML 文件再执行sudo netplan apply让配置生效。所以如果你用的是桌面版并且希望通过命令行修改 IP就必须先确认/etc/netplan/下的 YAML 文件里renderer: NetworkManager这一行是否存在。我见过不少朋友在桌面版上手动配了 YAML 文件执行sudo netplan apply后提示成功但一看ip aIP 还是原来的就是因为他改的配置文件根本没有被启用系统实际使用的是 NetworkManager 的连接配置。1.3 “改了不生效”的最常见根源这类问题可以归纳成四种修改了错误文件Netplan 目录下有多个 YAML系统按文件名顺序加载后加载的配置覆盖先加载的。文件缩进错误Netplan 对 YAML 缩进极其敏感写错一个空格都会被忽略。渲染器选错导致 Netplan 配置和 NetworkManager 配置各自为政谁也不听谁的。没有真正应用配置只保存了文件没执行sudo netplan apply或者只做了图形界面修改没触发连接重新加载。把这几条记在心里后面所有操作都会顺很多。2. 图形界面更换 IP桌面版用户的最快路径2.1 从“设置”到“有线连接”的完整操作图形界面换 IP 在 24.04 上并不复杂但很多人找不到入口。第一次操作时建议按下面的路径走一遍打开右上角的系统菜单选择“设置”在左侧菜单里找到“网络”。点击有线网卡那一行右侧的齿轮图标进入有线连接编辑页面。里面有“详情”“IPv4”“IPv6”几个选项卡切换到“IPv4”选项卡。默认情况下“IPv4 方式”这一项是“自动 (DHCP)”也就是路由器自动分配 IP。你需要把它改成“手动”然后在下方的“地址”区域填入你想要的 IP、子网掩码、网关。注意Ubuntu 24.04 的图形界面里地址栏只显示一行“地址、掩码、网关”点击“添加”可以增加多行。掩码的填写有讲究直接写成192.168.1.100/24这种带 CIDR 前缀的形式就行系统会自动识别不用单独填255.255.255.0。但如果你看到的是三个独立输入框那就老老实实把掩码写成255.255.255.0网关写成192.168.1.1。DNS 设置在同一个页面的下方默认也是“自动”你可以改成“手动”然后把 DNS 服务器填进去。注意24.04 图形界面里 DNS 要按“添加”按钮才能增加条目填完一个再填一个不能像以前那样用英文逗号分隔。建议至少填两个 DNS 地址避免单个 DNS 失效后无法解析域名。全部填完后点击右上角的“应用”按钮。此时连接不会立刻断你需要回到“网络”页面找到有线连接那一项把开关先关闭再打开。这一步非常关键很多人改了 IP 后网络还是旧状态就是因为这个开关没做重启。开关重启后打开终端敲ip a确认网卡上的地址已经变成新 IP整条操作就算完成了。2.2 图形界面设置时的两个典型坑第一个坑是 DNS 填了不生效。你明明在设置界面把 DNS 改成了手动也填好了地址但打开网站还是提示“找不到服务器”。这时候先别急着怀疑 DNS 填错去终端跑一下resolvectl status看一下系统当前使用的 DNS 是什么。Ubuntu 桌面版默认启用 systemd-resolved图形界面修改的 DNS 最后会交给 systemd-resolved 读取而resolvectl status看到的才是系统实际使用的 DNS。如果这里显示的还是原来的 DNS把网卡开关重新拨动一次或者执行sudo systemctl restart systemd-resolved一般就能同步过去。第二个坑是网关没填对。很多人填 IP 和掩码时很认真轮到网关就随手乱填结果是 IP 永远 ping 不通外网。再强调一遍网关必须和你的 IP 在同一网段。IP 是192.168.1.100/24网关必须是192.168.1.x不能写192.168.0.1否则数据包根本找不到出口。2.3 图形界面不好使时的命令行替补nmcli有些长期玩 Ubuntu 的人会告诉你图形界面换 IP 只是“看起来简单”真正在自动化脚本里用得最多的是nmcli命令。它是 NetworkManager 的命令行客户端装桌面版时默认就有服务器版如果装了 NetworkManager 也能用。它的优势是可以一行命令完成配置还不用开图形界面非常适合在 SSH 会话里操作。查看当前设备状态用nmcli device status这条命令会列出网卡名、连接名、连接状态例如enp2s0设备对应的连接名可能是 “Wired connection 1”。记住这个连接名后面要用。查看现有连接的详细配置nmcli con show Wired connection 1把连接改成静态 IP可以逐条执行nmcli con mod Wired connection 1 ipv4.method manual nmcli con mod Wired connection 1 ipv4.addresses 192.168.1.100/24 nmcli con mod Wired connection 1 ipv4.gateway 192.168.1.1 nmcli con mod Wired connection 1 ipv4.dns 223.5.5.5 8.8.8.8注意ipv4.addresses的格式必须是 CIDR 形式ipv4.dns里多个 DNS 地址用空格分隔并且用引号包起来。改完后执行nmcli con up Wired connection 1让连接重载一次再验证ip a的输出。这套命令在实际维护时非常高效尤其是需要批量给几十台机器换 IP 的场景写个循环就行。3. 命令行方式用 netplan 一次配好静态 IP3.1 先确认网卡名别想当然写 eth0服务器版换 IP 的主流方案还是 Netplan但在编辑 YAML 文件之前你必须先确认网卡叫什么名字。现在的网卡命名规则跟早年完全不同虚拟机里叫ens33、ens160物理机上叫enp2s0、enp3s0都很常见强行去修改eth0通常会提示设备不存在。查看网卡名的方式有三种任选其一ip aip link showlspci | grep -i ethernetip a的输出里能找到类似2: enp2s0:这样的结构冒号前面就是网卡名。如果是云服务器网卡名可能看起来像eth0那也别惊讶这是云平台模板特殊处理过的直接用你看到的名称就行。顺带说一句如果你刚装好的云服务器镜像里有多个网卡执行ip a后能看到lo回环接口之外的第二块、第三块网卡例如ens3、ens4。这时候一定要弄清楚哪块网卡是你的主网卡不要随便选一个就改配置。3.2 编辑 YAML 文件之前必须做的两件事Netplan 的配置文件统一放在/etc/netplan/目录下。先看这个目录里有几个文件ls -l /etc/netplan/常见的有01-network-manager-all.yaml桌面版、50-cloud-init.yaml云服务镜像、00-installer-config.yaml服务器安装器生成。文件名不同但格式类似。如果你看到多个文件意味着 Netplan 会按文件名顺序合并配置后面的同一个键值会覆盖前面的。所以最佳实践是找到非 cloud-init 的 YAML 文件或者干脆新建一个/etc/netplan/99-custom.yaml把自定义配置写进去这样避免跟系统默认配置打架。编辑之前先把原文件备份这是防止配置写崩之后没法恢复的第一道保险sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak然后用你熟悉的编辑器打开sudo nano /etc/netplan/00-installer-config.yaml或者sudo vim /etc/netplan/00-installer-config.yaml这里有一个非常容易被忽略的细节Netplan 严格要求 YAML 缩进为两个空格不能使用 Tab 键。很多人在复制网络上的教程时把缩进弄成了 4 个空格或 Tab结果sudo netplan apply报错或者配置被静默忽略。如果你用的是 nano编辑的时候多留意如果你用的是 vim可以在命令行模式里执行set expandtab ts2 sw2让 Tab 自动转成两个空格。3.3 一个可直接抄的静态 IP 配置示例以网卡名enp2s0为例把 DHCP 改成静态 IP完整的配置文件如下network: version: 2 renderer: networkd ethernets: enp2s0: dhcp4: false dhcp6: false addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: [223.5.5.5, 8.8.8.8] search: [example.local]逐项解释一下renderer: networkd明确告诉 Netplan 使用systemd-networkd后端。服务器版保持这个值就行不要改成NetworkManager除非你的系统确实用 NetworkManager 管理网络。dhcp4: false关闭 IPv4 的 DHCP改为静态配置。这也包含 IPv6所以把dhcp6也关了。addresses是 IP 地址和前缀长度列表。这里192.168.1.100/24等价于 IP192.168.1.100、子网掩码255.255.255.0。routes里的to: default表示默认路由via指向网关地址。如果你的网络没有网关比如只是两台机器直连可以不写这一段。nameservers下的addresses是 DNS 列表search是域名搜索后缀日常使用可以省略。写完之后保存退出。如果你不确定配置格式对不对先不要直接apply先用sudo netplan try试探一下。这个命令会先校验配置没问题就应用并且启动一个 120 秒的倒计时等待确认如果配置导致网络断开等倒计时结束它会自动回滚到原来的配置。这个机制在远程操作时是保命的关键。确认无误后执行sudo netplan apply然后打开另一个终端或者直接在当前终端里验证ip a ip route show ping -c 4 192.168.1.1ip a里网卡应该出现192.168.1.100/24ip route show里应该有default via 192.168.1.1这一行。ping 通网关说明静态 IP 已经生效接下来的上网问题基本就只剩 DNS 了。3.4 云服务器和 cloud-init 的坑云上购买的 Ubuntu 24.04 镜像/etc/netplan/目录下的默认配置文件通常叫50-cloud-init.yaml。这个文件由 cloud-init 在首次启动时生成。即便你直接编辑了这个文件只要 cloud-init 在后续启动时发现自己的配置没有变它可能还会重新生成一遍同名文件把你改的内容覆盖掉。碰到这种场景建议不要去跟 cloud-init 硬碰硬而是直接屏蔽 cloud-init 对网络的管理。在/etc/cloud/cloud.cfg.d/下新建一个文件sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg EOF network: {config: disabled} EOF然后重新编辑/etc/netplan/50-cloud-init.yaml把里面你需要的配置改成静态 IP。做完之后正常执行sudo netplan apply以后重启系统就不会被 cloud-init 覆盖了。这一步对云服务器用户极其重要我遇到过很多次用户反馈“每次重启 IP 就变回原来”九成都是这个原因。4. 临时换 IP 与远程操作时的保命技巧4.1 用 ip 命令做临时修改重启即失效不是所有场景都需要写配置文件。比如你只想在本机测一下网络或者临时给网卡多绑一个 IP用ip命令是最快的sudo ip addr add 192.168.1.101/24 dev enp2s0这个命令给enp2s0网卡临时添加一个192.168.1.101/24的地址不会影响原 IP。删除时用sudo ip addr del 192.168.1.101/24 dev enp2s0临时修改默认网关sudo ip route replace default via 192.168.1.1这套命令的好处是立即生效、不动配置文件坏处是重启后所有临时改动都会丢失。所以它适合做测试不适合做长期配置。这里还要提醒一句如果你是通过 SSH 远程连接的服务器执行ip addr del之前一定要想清楚当前 SSH 会话很可能就是依赖这个 IP 建立的。把 IP 删掉的那一瞬间连接就断了而且不会自动恢复。所以远程操作时新增 IP 可以放心删除或替换 IP 一定要谨慎最好用screen或tmux包一层会话保证命令即使断连也能继续执行。4.2 远程修改 IP 的三道保险如果你要远程修改一台机器的 IP手边又没有物理控制台建议按以下顺序操作第一把配置写成文件后先用sudo netplan try代替sudo netplan apply。netplan try会自动等待 120 秒如果你没有按回车确认并且网络连接断了它会自动回滚。只要你能在断连之后耐心等两分钟系统就会恢复到原来的状态你再想办法重新连接就好。第二如果确实用了netplan apply后立刻断连而且等了两分钟也没回来说明配置一定出了问题。看看你在不远处有没有其它入口比如带外管理IPMI/iLO/iDRAC、云厂商的网页 VNC、或者同一局域网内另一台机器能帮忙到现场操作。还没恢复的话就只能恢复到之前的备份或者重启服务器期待 cloud-init 覆盖回去这里考验的就是第一小节说的备份习惯了。第三还可以用at命令做一个自杀式保险。就是把新配置写好之后再安排一个定时任务让它在 5 分钟后自动执行恢复脚本把配置改回原来的 IP。如果新配置没问题你就手动取消这个任务如果新配置直接断网等时间一到系统自动切换回旧配置你又能重新连上了。命令示例echo sudo cp /etc/netplan/00-installer-config.yaml.bak /etc/netplan/00-installer-config.yaml sudo netplan apply | at now 5 minutes这个办法虽然有点土但实测在紧急情况下非常管用。4.3 从静态地址切回 DHCP有些临时环境用完后需要恢复 DHCP操作也不复杂。编辑对应的 YAML 文件把之前我们写的内容改成下面这样network: version: 2 renderer: networkd ethernets: enp2s0: dhcp4: true dhcp6: true也就是把dhcp4变成true删除addresses、routes里的默认路由和nameservers里的静态 DNS或按需保留其中的nameservers但通常切回 DHCP 后由 DHCP 服务器下发 DNS 更省心。然后执行sudo netplan apply网卡就回到自动获取地址的状态。如果用的是 NetworkManager 管理切回 DHCP 的命令是nmcli con mod Wired connection 1 ipv4.method auto nmcli con up Wired connection 15. 高频问题和排查思路速查5.1 配置写错导致网络起不来如何快速恢复这类问题最常见而且往往是亲手把自己锁在门外。桌面版还好重启开机就恢复服务器版就麻烦一点。我的建议是第一次配置静态 IP 时先不要用sudo netplan apply而是用sudo netplan try并且把备份文件做足。如果真的已经断了别慌优先通过服务器厂商的网页终端登录系统把/etc/netplan/下的配置文件恢复成备份sudo cp /etc/netplan/00-installer-config.yaml.bak /etc/netplan/00-installer-config.yaml sudo netplan apply如果没有网页终端只能去机房或者让同事去现场接键盘显示器。这也是为什么每次改配置前必须备份备份文件此刻就是你的救命稻草。5.2 能 ping 通外网 IP但打不开网页这种情况和 IP 本身无关问题几乎都出在 DNS 上。先分清楚是 DNS 问题还是路由问题ping -c 4 8.8.8.8如果这样能通说明网络链路没问题再试ping -c 4 baidu.com如果这里解析不出域名说明 DNS 有问题。去查看系统当前使用的 DNSresolvectl status或者直接查看cat /etc/resolv.confUbuntu 24.04 里/etc/resolv.conf通常是一个软链接指向/run/systemd/resolve/stub-resolv.conf系统实际使用的是 systemd-resolved 管理的 DNS。如果resolvectl status里显示的 DNS 还是旧的而你的 Netplan 配置里已经写了新的 DNS执行sudo systemctl restart systemd-resolved就能刷新。还有一个比较隐蔽的现象是DNS 明明是对的但永远只能解析一次第二次就失败。这种通常和某些路由器或 DHCP 服务下发的 search domain 有关可以先检查/etc/resolv.conf里是否混入了奇怪的search配置。排查的时候保持条理先 ping IP再 ping 域名最后看 DNS 文件一步步来。5.3 虚拟机改完 IP 连不上并不是你配置错了很多人在 VMware 或 VirtualBox 里装完 Ubuntu按教程改了静态 IP结果宿主机或局域网机器怎么都 ping 不到虚拟机。这里多半不是 Ubuntu 配置的问题而是虚拟机的网络模式没选对。如果用的是 NAT 模式虚拟机和外网能通信但局域网内的其它机器默认访问不到它因为 NAT 模式下虚拟机的 IP 是躲在宿主机后面的。如果你想做局域网内的服务器测试把虚拟机的网络模式改成“桥接模式”让虚拟机直接连到物理局域网然后在路由器或 DHCP 地址池里预留一个固定 IP 给虚拟机的 MAC 地址确保 IP 不冲突。这时候你再给虚拟机配静态 IP才能真正被别人访问到。另外VMware 里给虚拟机配静态 IP要注意虚拟网卡名可能跟你在系统里看到的不一样先ip a看清楚不要套用网上的ens33教程。5.4 双网卡双 IP 和路由表调整如果你的机器有多个网卡就需要稍微注意一下路由表的逻辑。默认情况下系统只会有一条默认路由写在哪块网卡上外网流量就全部从哪块走。你新增的网卡配置里如果也写了默认路由可能会发生主路由被覆盖的情况。我的处理习惯是主网卡负责默认路由副网卡只配置addresses和nameservers不写routes。如果需要访问特定网段比如10.0.0.0/24必须走副网卡可以在副网卡配置里加routes: - to: 10.0.0.0/24 via: 10.0.1.1这样系统会把去往10.0.0.0/24网段的流量转发到10.0.1.1其它网段仍然走默认路由。弄完记得sudo netplan apply再用ip route show查看路由表确认你的预期是否跟实际一致。5.5 常见问题速查表现象可能原因处理方法改了配置后 IP 没变多个 Netplan 文件互相覆盖用99-开头文件名或删除冲突项apply 时报 YAML 错误缩进用了 Tab 或空格数不对改用两个空格重新格式化远程断连后无法恢复没有进行netplan try或没有备份用netplan try自动回滚或从网页终端恢复备份能 ping 通 IP解析不了域名DNS 配置错误或 systemd-resolved 未刷新检查resolvectl status重启systemd-resolved重启后 IP 被改回原值cloud-init 重新生成配置新建配置文件禁用 cloud-init 网络管理虚拟机外部访问不到NAT 模式限制切换为桥接模式避免 IP 冲突双网卡外网不通默认路由配置冲突主网卡写默认路由副网卡只加静态地址和指定路由整篇文章从图形界面到命令行从静态配置到临时修改覆盖的都是 Ubuntu 24.04 下换 IP 最常走的几条路。最后再分享一个我自己的习惯任何一次网络配置变更我都会先把原配置文件备份好然后执行sudo netplan try而非直接apply哪怕是在本机操作的场景也一样。养成这个习惯之后我几乎没有再遇到过因为改 IP 导致远程失联的情况。Ubuntu 24.04 的网络管理机制理解透了换 IP 其实真的就是几分钟的事关键还是那句话动手前多看配置文件动手后多留一条后路。