news 2026/10/23 1:20:56

Ubuntu固定IP配置指南:Netplan静态地址设置与故障排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu固定IP配置指南:Netplan静态地址设置与故障排查

1. 为什么固定 IP 这件事值得认真对待

很多人第一次接触“给 Ubuntu 配固定 IP”,都是被逼出来的:远程连着的开发机重启后地址变了,SSH 连不上;家里跑着的小服务,路由器一重启,局域网里其他设备就找不到它;实验室里几台机器互相调用接口,地址一漂移,配置文件全得跟着改。这些场景的共同点是——地址不稳定,上层的一切都跟着不稳定。

固定 IP 地址,说白了就是让一台机器在网络里拥有一个“不会变的门牌号”。它解决的核心问题是可预期性:你知道它在哪里,别的设备也知道它在哪里,配置、脚本、文档、监控全都可以围绕这个确定的地址来写。适合看这篇内容的人大致分三类:一是刚接触 Linux、需要在虚拟机或实体机上做网络实验的新手;二是手里有几台服务器或开发板、需要稳定内网地址的开发者;三是负责小规模网络环境、需要把地址规划讲清楚的人。不管你属于哪一类,下面这套思路和操作都能直接拿去用。

需要先明确一个前提:Ubuntu 从 17.10 开始,桌面版和服务器版的网络管理都转向了Netplan,早期的/etc/network/interfaces那套写法在新版本上已经不再生效。网上大量老教程还在教改 interfaces 文件,照着做往往毫无反应,这是新手踩得最多的第一个坑。所以本文以 Netplan 为主线,同时把“图形界面配置”和“传统方式”作为对照讲清楚,让你在不同版本、不同环境下都能对上号。

另外要区分两个概念:静态 IP和固定 IP。严格说,静态 IP 是你在机器上手工写死地址;固定 IP 还可以通过路由器上的地址保留(DHCP 保留)来实现,机器本身仍然走动态获取。两种做法各有适用场景,后面会专门对比。理解这个区别,能帮你少走很多弯路。

2. 动手之前:把网络参数先摸清楚

2.1 先搞清楚你现在的网络长什么样

配置固定 IP 最忌讳上来就改文件。你得先知道当前网络是怎么工作的:网卡叫什么、现在拿的是什么地址、网关是谁、DNS 用的什么。这些信息是后面填配置的原料,填错了轻则上不了网,重则连本机都失联。

在 Ubuntu 上查看网络信息,最直接的是这几条命令:

ip addr show ip route show resolvectl status

ip addr show会列出所有网卡和它们当前的地址。你要重点关注那个有地址、状态是UP的网卡,名字可能是ens33、enp0s3、eth0之类。ip route show里的default via后面跟的就是网关地址。resolvectl status能看到当前生效的 DNS 服务器。

提示:如果你是通过 SSH 远程操作这台机器,改网络配置前务必先确认你有本地控制台或其他备用登录方式。配置写错导致网络中断时,远程连接会直接断掉,没有备用通道就只能去物理机前处理了。

把这些信息记下来,最好抄在纸上或另存一个文本文件。后面写 Netplan 配置时,网卡名、网关、DNS 都要原样填进去。

2.2 地址规划:别随手挑一个就用

固定 IP 不是随便写个数字就行,它必须落在你所在网段的合理范围内,并且不能和别的设备冲突。这里有个简单的判断方法:看你当前动态获取到的地址,比如是192.168.1.105,子网掩码255.255.255.0,那这个网段就是192.168.1.0/24,可用地址范围大致是192.168.1.1到192.168.1.254。

选地址时有几条经验:

  • 避开 DHCP 地址池。大多数路由器的动态分配范围是100到200这一段,你把固定地址选在2到99或者201到254之间,冲突概率会低很多。
  • 避开网关和已占用地址。网关通常是.1或.254,别去占。选好之后可以先ping一下目标地址,有回应说明已被占用,换一个。
  • 同一网段内保持规划一致。如果你有多台机器,建议按用途分段,比如服务器用10到30,开发机用31到60,以后排查问题一目了然。

子网掩码和网关必须和所在网络一致,这个不用自己算,照抄当前动态获取的值即可。DNS 可以填网关地址(很多路由器自带转发),也可以填公共 DNS,比如223.5.5.5和119.29.29.29这类国内常用的解析服务,延迟低、稳定性好。

2.3 确认 Netplan 的存在与配置文件位置

动手前先确认系统用的是 Netplan:

ls /etc/netplan/

正常情况下会看到类似01-network-manager-all.yaml或50-cloud-init.yaml的文件。这个目录下的 YAML 文件就是网络配置的入口。不同安装方式生成的文件名不一样,桌面版常见01-network-manager-all.yaml,服务器版或云镜像常见50-cloud-init.yaml。

注意:不要自己随便新建一个名字奇怪的文件,也不要同时保留多个互相冲突的配置文件。Netplan 会按文件名字典序依次加载,后加载的会覆盖前面的同名配置,多个文件写同一块网卡很容易出现“改了没生效”的怪现象。最稳妥的做法是在现有文件上改,或者新建一个编号靠后的文件并确保旧文件里没有冲突配置。

3. Netplan 配置固定 IP 的完整实操

3.1 配置文件的结构长什么样

Netplan 的配置是 YAML 格式,缩进极其敏感,只能用空格,不能用 Tab。这是新手翻车的高发区,一个 Tab 就能让整个文件解析失败。整体结构大致是三层:network下面分version、renderer、ethernets,ethernets下面挂具体网卡名,网卡下面再写dhcp4、addresses、routes、nameservers等。

先看一个最典型的静态地址配置模板:

network: version: 2 renderer: networkd ethernets: ens33: dhcp4: no addresses: - 192.168.1.50/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: [223.5.5.5, 119.29.29.29]

逐行解释一下为什么这么写。version: 2是 Netplan 的配置版本,固定写 2。renderer指定后端,服务器版一般用networkd,桌面版如果网络由图形界面管理则用NetworkManager,这个后面单独说。dhcp4: no表示关闭 IPv4 的动态获取,这是启用静态地址的前提。addresses里写地址时要带上前缀长度,/24就等价于子网掩码255.255.255.0,这个斜杠写法必须带上,只写 IP 不写前缀会报错。

routes这一段是重点,也是新旧写法差异最大的地方。老版本 Netplan 用gateway4: 192.168.1.1来指定网关,但新版本已经弃用这个字段,改用routes列表,to: default表示默认路由,via后面跟网关地址。如果你照着老教程写gateway4,在新系统上会收到弃用警告甚至直接不生效。

nameservers里的addresses用方括号加逗号的形式写多个 DNS,这是 YAML 的行内数组写法,等价于换行加短横线的列表形式。两种写法都行,看你习惯。

3.2 一步步改配置并应用

假设你的网卡叫ens33,要设的地址是192.168.1.50/24,网关192.168.1.1,DNS 用两个公共地址。完整操作流程如下。

第一步,备份原配置。这一步别省,改坏了能一键还原:

sudo cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.bak

第二步,编辑配置文件。用你顺手的编辑器,比如nano或vim:

sudo nano /etc/netplan/01-network-manager-all.yaml

把内容改成前面模板的样子,注意网卡名换成你自己的,地址、网关、DNS 换成你规划好的值。改完保存退出。

第三步,先做语法检查再应用。Netplan 提供了生成预览的命令,能在真正生效前发现格式问题:

sudo netplan generate

这条命令只做解析和生成后端配置,不会立刻改动网络。如果它报错,说明 YAML 格式或字段有问题,根据提示改到不报错为止。常见报错是缩进不对、冒号后面没空格、用了 Tab。

第四步,应用配置:

sudo netplan apply

执行后网络会短暂中断再恢复。如果是本地操作,稍等几秒用ip addr show确认地址已经变成你设置的固定值;如果是远程操作,连接可能会断一下,重连后验证。

提示:netplan apply在某些环境下不会立刻刷新所有状态,如果发现地址没变,可以试着重启网络服务,或者直接重启机器确认。另外,应用后一定要立刻验证连通性,别等到下次重启才发现问题。

3.3 验证:三个层面确认配置真的生效

配置应用完,别急着关终端,按三个层面验证一遍才算稳。

第一层,看地址本身。ip addr show ens33应该显示你设置的192.168.1.50/24,并且状态是UP。如果还是旧地址或者没有地址,说明配置没生效,回去检查文件。

第二层,看路由。ip route show里应该有一条default via 192.168.1.1的记录。没有默认路由的话,机器能通内网但上不了外网,这是很典型的“半通”故障。

第三层,看实际连通性。先ping 192.168.1.1测网关,再ping 223.5.5.5测外网 IP 连通,最后ping www.example.com测 DNS 解析。三步都通,说明地址、路由、DNS 全部正常。哪一步断了,问题就定位在哪一层,排查起来非常快。

4. 桌面版与特殊环境的差异化处理

4.1 桌面版:图形界面和 Netplan 的关系

Ubuntu 桌面版的网络默认由 NetworkManager 管理,图形界面右上角的网络图标点开就能设置。很多人图省事直接在图形界面里填静态地址,这当然可以,但要知道它和 Netplan 是两套东西。桌面版的 Netplan 配置文件里renderer通常写的是NetworkManager,意思是“把配置交给 NetworkManager 去执行”。

如果你在图形界面里改了地址,实际上改的是 NetworkManager 的连接配置,Netplan 文件可能并没有同步更新。这就导致一个常见困惑:图形界面里看着是固定地址,但换个方式查看又对不上。我的建议是二选一,别混着来。要么全程用图形界面,简单直观;要么全程用 Netplan 文件,可控性强、便于批量复制。混用容易出现“改了这边那边覆盖”的情况。

图形界面的操作路径大致是:点网络图标,进入有线设置,找到当前连接,把 IPv4 方式从“自动”改成“手动”,填入地址、掩码、网关、DNS,保存后重新连接即可。这套流程对新手最友好,缺点是配置不集中、不好备份和迁移。

4.2 服务器版与云环境:小心 cloud-init 覆盖你的配置

服务器版和云镜像里,经常能看到50-cloud-init.yaml这个文件。它由 cloud-init 在首次启动时生成,作用是初始化网络。问题在于,cloud-init 在某些配置下会在每次启动时重新生成这个文件,你手工改的内容可能被覆盖回去。

判断方法很简单:改完配置、重启一次,再看文件内容有没有变回原样。如果被覆盖了,有两个处理方向。一是修改 cloud-init 的网络配置源,让它不再接管网络;二是干脆新建一个编号更靠后的 Netplan 文件(比如99-custom.yaml),把静态配置写进去,同时确保 cloud-init 生成的文件里不再包含冲突的网卡配置。后一种做法改动小、风险低,我更常用。

注意:云环境里改网络要格外谨慎,很多云主机的地址是由平台侧分配的,擅自改成静态地址可能导致机器失联。动手前先确认平台是否允许自定义内网地址,不确定就别改,改用平台提供的地址保留功能更稳妥。

4.3 静态 IP 与 DHCP 保留怎么选

前面提过,固定地址有两条路:机器上写死(静态 IP),或者路由器上做地址保留(DHCP 保留)。两者对比看下面这张表:

对比项静态 IP(机器侧配置)DHCP 保留(路由器侧配置)
配置位置每台机器上单独改路由器上集中管理
地址稳定性高,机器自己说了算高,由路由器保证
迁移成本换网络要逐台改换网络基本不用动
冲突风险手工规划不当会冲突由路由器统一分配,冲突少
适用场景服务器、固定设备、无管理权限的网络家庭、办公网、设备较多且路由器可控

我的实际经验是:能改路由器就优先用 DHCP 保留,尤其是设备多、经常增减的环境,集中管理省心得多。只有在拿不到路由器管理权限、或者需要机器完全不依赖 DHCP 服务的场景下,才在机器上写静态地址。两种方式不要同时用,否则容易出现地址冲突或行为不一致。

5. 常见故障排查与避坑清单

5.1 改完上不了网,按这个顺序查

网络配置出问题,最怕东一榔头西一棒子地乱试。按层次从下往上查,效率最高。先看链路层网卡是否 UP,再看地址是否配上,再看路由是否存在,最后看 DNS 是否可用。这个顺序对应 OSI 的下往上,每一层确认没问题再往上走,能快速锁定故障层。

下面这张速查表覆盖了我遇到过的高频问题:

现象可能原因排查与解决
netplan apply报 YAML 错误缩进用了 Tab、冒号后缺空格全部改空格,冒号后加一个空格,用netplan generate预检
地址没变,还是旧的配置文件没被加载、被其他文件覆盖检查/etc/netplan/下是否有冲突文件,确认改的是生效的那个
能 ping 通网关,上不了外网缺默认路由ip route show确认default via是否存在,检查routes写法
能 ping 通 IP,域名解析失败DNS 没配或配错检查nameservers,用resolvectl status看生效的 DNS
重启后配置丢失cloud-init 覆盖新建编号靠后的配置文件,或调整 cloud-init 行为
地址冲突,时通时断选的地址在 DHCP 池内或已被占用换一个池外地址,配置前先 ping 确认未被占用
远程连接改完直接断开网关或地址写错提前准备本地控制台,改前备份配置

5.2 几个只有踩过才知道的细节

第一个坑是前缀长度写错。有人把/24写成/32,结果机器只能和自己通信,网关都 ping 不通。/24对应255.255.255.0,这是最常见的局域网掩码,写之前对一下。

第二个坑是网关地址和本机地址不在同一网段。比如本机192.168.1.50/24,网关却写成192.168.0.1,路由直接失效。网关必须落在本机地址所在的网段内。

第三个坑是多个配置文件打架。有人改完01-xxx.yaml没生效,又新建了一个02-xxx.yaml,结果两个文件都写了同一块网卡,行为变得难以预测。正确做法是先清理冲突,保证一块网卡只在一个文件里被定义。

第四个坑是忘了关 DHCP。静态地址配了,但dhcp4还是yes,机器可能同时拿到动态地址,出现一个网卡两个地址的怪现象,路由也会乱。静态配置时务必把dhcp4设为no。

第五个坑是改完不验证就重启。有些人改完直接重启,结果起不来了才发现配置有问题。养成习惯:netplan apply之后立刻验证三层连通性,确认没问题再重启做最终确认。

5.3 一个实用的回滚习惯

每次改网络配置前,我都会做两件事:备份原文件,以及在另一个终端里保持一个已知可用的会话(如果是远程)。这样一旦新配置把网络搞挂,我能立刻用备份还原:

sudo cp /etc/netplan/01-network-manager-all.yaml.bak /etc/netplan/01-network-manager-all.yaml sudo netplan apply

这个习惯看起来笨,但关键时刻能救命。网络配置属于“改错就失联”的高风险操作,多花十秒备份,能省下半小时甚至更久的折腾。

6. 把配置沉淀成可复用的模板

配置固定 IP 这件事,单次做完就完了,但如果手里有多台机器,每次都从头写一遍既费时又容易出错。我的做法是维护一份带注释的模板,把网卡名、地址、网关、DNS 做成明显的占位符,用的时候替换即可。模板里把每个字段为什么这么写都注释清楚,过几个月回头看也不会忘。

network: version: 2 renderer: networkd # 服务器版用 networkd,桌面版用 NetworkManager ethernets: <网卡名>: # 用 ip addr show 查到的实际网卡名 dhcp4: no # 静态地址必须关闭 DHCP addresses: - <地址>/24 # 前缀长度按实际网段填,/24 最常见 routes: - to: default via: <网关地址> # 必须是本机网段内的地址 nameservers: addresses: [<DNS1>, <DNS2>]

用模板的时候,替换占位符后先跑netplan generate预检,再netplan apply应用,最后按地址、路由、DNS 三层验证。这套流程走顺了,一台机器从改配置到验证完成,两三分钟就能搞定。

我个人在实际操作中的体会是,固定 IP 配置本身并不复杂,真正花时间的往往是“改之前没摸清现状”和“改之后没系统验证”。把第 2 章的现状摸底和第 3 章的验证流程当成固定动作,比记住任何一条命令都管用。另外,遇到网上教程和实际系统对不上时,优先相信系统自带的man netplan和官方文档,那些老博客里的gateway4写法,在新系统上真的会坑人。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 1:20:00

GLM-5.3 + ZCode Agent:教育场景下轻量级代码批改Agent落地实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 1:18:44

macOS平铺式窗口管理实战:Yabai配置、BSP布局与快捷键设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 1:18:28

Docker部署Zipkin:MySQL与Elasticsearch持久化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 1:17:52

电脑搜不到5GHz WiFi?从网卡到路由器的完整排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 1:17:27

中兴VSC虚拟集群双机冗余配置实战:从规划到踩坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华