尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Ubuntu 18.04+ 配置静态 IP 全攻略:netplan 详解与避坑指南

发布时间:2026/9/29 15:38:17

资讯中心
01
ARTICLE

Ubuntu 18.04+ 配置静态 IP 全攻略:netplan 详解与避坑指南

Ubuntu 18.04+ 配置静态 IP 全攻略:netplan 详解与避坑指南
1. 先说清楚为什么18.04之后配静态IP变得更“麻烦”了用Ubuntu的老用户应该都有印象在16.04及更早的版本里改IP就是编辑一下/etc/network/interfaces这个文件填上address、netmask、gateway三行重启网络服务就完事。到了18.04情况变了——Ubuntu引入了netplan这个新的网络管理方案默认不再走/etc/network/interfaces那套逻辑很多人第一次打开/etc/netplan/目录时都有点懵这玩意儿是什么配置文件怎么长这样先说结论18.04及以上版本包括20.04、22.04、24.04配置静态IP核心思路就是编辑/etc/netplan/下的YAML配置文件然后执行sudo netplan apply让配置生效。YAML格式对缩进极其敏感一个空格错了轻则配置不生效重则直接断网。我见过不少朋友在服务器上改完配置一applySSH立刻断开然后人已经在机房外了那种绝望感经历过一次就再也不想经历第二次。这篇文章我会把整个流程拆开讲透从查看当前网络状态、确认网卡名称到编写netplan配置、处理DNS和网关再到常见的坑和排查方法。不管你是虚拟机里装的Ubuntu还是物理机上跑的真实系统方法基本一致个别细节我会单独指出来。顺便说一句虽然现在Ubuntu已经出到24.04但18.04的配置方式和后续版本高度相似学会一套基本通吃。唯一需要注意的差异是不同版本默认的渲染器可能有区别有的用NetworkManager有的用systemd-networkd这个后面细说。2. 配置前的三件事网卡名、当前IP、网关和DNS2.1 确认网卡名称别再想当然地写eth0很多人配置静态IP失败第一步就栽在网卡名称上。从Ubuntu 18.04开始系统默认使用Predictable Network Interface Names可预测网络接口命名网卡名不再是传统的eth0、eth1而是像ens33、ens160、enp0s3这种带硬件信息的名字。在云服务器上可能是eth0但更多时候你会看到类似ens5、enp1s0这样的名称。查看网卡名称的几种方式ip addr show或者ip link show再或者用传统一点的ifconfig -a如果ifconfig提示命令不存在需要先安装sudo apt install net-tools这三种方式得出的结果里带state UP或者有IPv4地址的那个就是你的活动网卡。比如输出里有ens33: BROADCAST,MULTICAST,UP,LOWER_UP那你的网卡名就是ens33。提示别用ifconfig的输出去猜网卡名有些时候你看到一堆docker0、br-xxxx、vethxxxx之类的虚拟网卡那些是Docker或其他虚拟化软件创建的跟物理网卡无关。认准有IP地址、状态为UP且MAC地址不是你虚拟网卡的那个。2.2 记录当前网络参数有备份才有退路在动手改配置之前强烈建议先把当前网络参数记录下来。我自己的习惯是开一个文本文件把这些信息全存下来ip addr show ip route show cat /etc/resolv.conf关键信息包括当前IP地址和掩码比如192.168.1.100/24网关地址ip route输出里的default via那一行DNS服务器/etc/resolv.conf里的nameserver行为什么要记录因为一旦配置出错你可能需要手动恢复。另外在虚拟机场景里如果你用的是NAT模式网关通常是192.168.x.1或者192.168.x.2VMware的NAT网关一般是192.168.x.2VirtualBox是192.168.x.1但不要想当然一定以ip route的实际输出为准。2.3 判断网络管理方式netplan的渲染器到底是什么netplan本身只是一个配置抽象层它负责读取YAML配置然后生成后端配置交给实际的网络管理服务。后端有两种networkd由 systemd 提供的网络服务适合服务器环境轻量、稳定NetworkManager桌面版默认的图形化网络管理工具适合笔记本、桌面环境怎么判断当前系统用哪个看这个文件cat /etc/netplan/01-network-manager-all.yaml如果里面写着renderer: NetworkManager说明桌面环境在用NetworkManager。如果写着renderer: networkd或者没有明确指定默认走networkd就是systemd-networkd。服务器版Server版默认是networkd桌面版Desktop版默认是NetworkManager。这个差异很重要如果你在桌面版上手动改了netplan配置可能会发现不生效因为NetworkManager可能在你重启后把配置覆盖回去。这时候要么在netplan配置里把renderer设为NetworkManager要么干脆禁用NetworkManager的网络管理功能。我自己在虚拟机上测试时通常用Server版镜像干净利落。如果你是在桌面版上折腾后面我会专门讲NetworkManager的处理方式。3. 手动配置静态IP从改YAML到生效3.1 找到并理解netplan配置文件netplan的配置文件统一放在/etc/netplan/目录下。不同版本、不同安装方式的文件名可能不同常见的有01-netcfg.yaml01-network-manager-all.yaml50-cloud-init.yaml99_config.yaml查看一下ls /etc/netplan/然后用sudo cat查看内容。比如云服务器上常见的是network: version: 2 ethernets: eth0: dhcp4: true这个配置的意思很直白eth0网卡启用DHCP自动获取IPv4地址。我们要做的就是把这个dhcp4: true改成静态配置。3.2 编写静态IP配置一个可以直接抄的模板假设以下场景网卡名ens33IP地址192.168.1.100掩码255.255.255.0在netplan里写成/24网关192.168.1.1DNS223.5.5.5和114.114.114.114配置内容如下network: version: 2 renderer: networkd ethernets: ens33: dhcp4: no addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 223.5.5.5 - 114.114.114.114编辑方式sudo nano /etc/netplan/01-netcfg.yaml或者sudo vim /etc/netplan/01-netcfg.yaml然后把上面的内容填进去保存退出。注意addresses是一个列表以-开头每一项一个地址。如果配置多个IP就多列几行。掩码用CIDR格式/24不要写255.255.255.0。这是新手最容易犯的错误——netplan不识别传统的点分十进制掩码写法写成255.255.255.0会直接报错。3.3 应用配置先试后生效避免把自己锁在外面配置写完后千万别直接执行sudo netplan apply就完事。先做语法检查sudo netplan trynetplan try会先验证配置如果配置有问题它会在超时后自动回滚到之前的配置这个机制能救命。执行后它会提示Do you want to keep these settings? Press ENTER before the timeout to accept new configuration如果你看到配置生效且网络没断按回车确认。如果系统没响应了比如SSH断了等120秒它会自动回滚。确认配置没问题后再执行sudo netplan apply让配置正式生效。提示netplan try和netplan apply的区别在于前者带自动回滚机制适合远程操作后者直接应用适合本地操作。如果你是通过SSH远程管理服务器建议在try之前先开一个备用终端比如通过其他方式能登录到机器的终端这样万一配置出错你还有一个入口能救回来。如果实在没有备用入口就在try期间盯着一旦发现连接断了等自动回滚就好。3.4 验证配置是否生效配置应用后用以下命令确认ip addr show ens33输出里应该能看到你设置的静态IP。再检查路由ip route show确认default via 192.168.1.1 dev ens33存在。然后测连通性ping -c 4 192.168.1.1 ping -c 4 223.5.5.5第一个ping是测网关第二个是测公网。如果网关通但公网不通多半是DNS或路由问题如果网关都不通说明IP、掩码或网关配置有误。DNS验证nslookup www.baidu.com或者dig www.baidu.com如果nslookup和dig都没安装可以用ping一个域名来间接验证。比如ping -c 2 www.baidu.com能解析出IP并通就说明DNS没问题。4. 不同场景下的差异化配置4.1 虚拟机VMware / VirtualBox里怎么配虚拟机里的Ubuntu配置静态IP逻辑跟物理机一样但有几个虚拟化相关的前提条件要先确认。VMware场景网络模式如果是桥接Bridged虚拟机需要和宿主机在同一网段网关指向路由器或宿主机所在网络的网关。比如宿主机IP是192.168.1.10你可以给虚拟机配192.168.1.100/24网关192.168.1.1。网络模式如果是NAT虚拟机通常使用192.168.xxx.0/24网段。VMware的NAT默认网段一般是192.168.xxx.0但具体的要打开VMware的“虚拟网络编辑器”看。默认网关通常是192.168.xxx.2不是192.168.xxx.1这个坑我踩过。网络模式如果是仅主机Host-Only虚拟机只能和宿主机通信不能上外网配置静态IP时网关不要填公网网关填了也没用。VirtualBox场景NAT模式的默认网关是10.0.2.2这是VirtualBox的内置网关额外DNS可以用10.0.2.3。桥接模式的话跟VMware桥接逻辑一样和宿主机同网段。虚拟机配置静态IP的意义在于开发环境需要固定IP来访问SSH、跑服务不配置的话DHCP每次分配可能不同你连SSH的地址就老变。4.2 云服务器AWS / 阿里云 / 腾讯云上要不要自己改云服务器上配置静态IP这事建议谨慎再谨慎。云平台有自己的网络虚拟化层IP地址通常由平台管理你在系统内部改了IP往往会导致网络直接中断而且平台控制台看到的IP和系统内的IP会不一致。云服务器正确的做法是在云控制台里把网卡设置为“静态”或“私有IP固定”操作系统内部保持DHCP自动获取即可。ECS、EC2这些平台上私有IP本来就固定系统内DHCP获取到的始终是同一个地址没必要画蛇添足。如果你确实需要在云服务器上配置多个IP比如辅助私网IP操作步骤也不是只改netplan而是先在云控制台绑定辅助IP再到系统内配置。这个流程各家平台不完全一样建议以官方文档为准。简而言之物理机和虚拟机可以放心折腾云服务器不要轻易手动改IP。4.3 桌面版Ubuntu带图形界面的特殊处理桌面版Ubuntu默认用NetworkManager管理网络配置静态IP有两种方式方式一图形界面适合新手设置 - 网络 - 有线 - 点击齿轮图标 - IPv4 - 手动 - 填写地址、掩码、网关、DNS。这个方式最直觉而且不会出现YAML缩进错误。缺点是如果你需要批量配置多台机器效率太低。方式二命令行改netplan适合老手如果你坚持用netplan方式需要注意两点。第一配置文件里的renderer要写NetworkManager第二配置完可能要重启NetworkManager服务sudo systemctl restart NetworkManager或者sudo nmcli connection reload有些桌面版环境里netplan的配置优先级不如NetworkManager的connection配置高你可能改完发现不生效。遇到这种情况可以查一下NetworkManager当前的连接配置nmcli connection show然后直接用nmcli修改当前连接的IP设置sudo nmcli connection modify Wired connection 1 ipv4.addresses 192.168.1.100/24 sudo nmcli connection modify Wired connection 1 ipv4.gateway 192.168.1.1 sudo nmcli connection modify Wired connection 1 ipv4.dns 223.5.5.5 114.114.114.114 sudo nmcli connection modify Wired connection 1 ipv4.method manual sudo nmcli connection up Wired connection 1这个方法绕过了netplan直接操作NetworkManager的配置文件生效快且稳定。我自己在桌面版上推荐用nmcli因为少了一层YAML转换排查问题也直白。5. 排查与避坑那些年我们踩过的网络坑5.1 配完就断网怎么恢复这是最高频的故障。如果你还能登录到机器比如在本地控制台执行sudo netplan apply不行的话检查配置文件语法sudo netplan generate如果generate报错说明YAML有语法问题按提示修正。如果提示缺少缩进、多了空格用cat -A查看文件能看出空格和制表符的区别sudo cat -A /etc/netplan/01-netcfg.yamlYAML里绝对不能出现制表符Tab必须用空格缩进。cat -A输出里^I就代表制表符有的话全部替换成空格。如果机器已经彻底上不了网了物理机就直接接显示器键盘虚拟机就在虚拟机控制台里操作把配置文件改回DHCP模式再apply恢复第一步。5.2 掩码格式错误netplan的CIDR写法中/24对应255.255.255.0/16对应255.255.0.0/8对应255.0.0.0。写错掩码会导致子网计算错误网关可能不可达。举一个典型的错误addresses: - 192.168.1.100/255.255.255.0这是错的。正确的是addresses: - 192.168.1.100/245.3 DNS配置不生效有时候IP和网关都通了但域名解析不了。检查一下/etc/resolv.confcat /etc/resolv.conf在netplan托管的系统里这个文件通常是指向systemd-resolved的软链接。查看实际DNSsystemd-resolve --status或者新一点的版本resolvectl status如果DNS确实没生效确认netplan配置里的nameservers段是否写对、有没有缩进错误。还有一种情况是防火墙或路由问题导致DNS服务器可达性差可以用dig 223.5.5.5 www.baidu.com直接指定DNS服务器查询绕开系统配置的DNS判断问题在哪个环节。5.4 netplan与NetworkManager冲突这个问题在桌面版尤其常见。症状是你改了netplanapply也成功了但过几分钟或者重启后IP又变回DHCP获取的了。原因很简单NetworkManager在启动时接管了网络接口netplan生成的配置被忽略。解决思路有三种一是按照前面说的直接用nmcli配置不走netplan二是把netplan配置文件里的renderer改为NetworkManager让netplan只做配置生成实际执行交给NetworkManager三是禁用NetworkManager对特定网卡的管理sudo nmcli device set ens33 managed no然后sudo systemctl restart NetworkManager。这个方式适合确定不想让NetworkManager管理某个网卡的场景。5.5 网卡名不对配置了无效果如果你在配置里写的网卡名跟系统实际的不一样netplan apply不会报错但会给出warn日志或者干脆没有任何反应。验证网卡名是否匹配sudo netplan get这个命令会输出当前netplan实际读取到的配置。如果你看到配置里指向的网卡名跟ip link show的输出对不上改过来就好了。5.6 多个网卡时配置错乱服务器上双网卡甚至四网卡很常见。比如ens33连接内网ens160连接外网。配置时需要注意routes段的写法。默认路由to: default只能有一个如果你给两个网卡都配置了默认路由系统会出现路由冲突表现为时通时不通。正确做法是主力出口网卡配置默认路由另一个网卡只配置内网网段的路由。例如network: version: 2 ethernets: ens33: addresses: - 10.0.0.100/24 routes: - to: 10.0.1.0/24 via: 10.0.0.1 ens160: addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1记住谁负责出网谁就写to: default。6. 一些操作会上瘾的小技巧6.1 用模板文件加速批量部署如果你管理的机器多每台都手写YAML容易出错。我的做法是维护一个模板network: version: 2 renderer: networkd ethernets: __IFACE__: dhcp4: no addresses: - __IP__/24 routes: - to: default via: __GATEWAY__ nameservers: addresses: - 223.5.5.5 - 114.114.114.114用sed批量替换变量sed -e s/__IFACE__/ens33/ -e s/__IP__/192.168.1.100/ -e s/__GATEWAY__/192.168.1.1/ template.yaml | sudo tee /etc/netplan/01-netcfg.yaml这样不仅速度快还能避免手抖写错缩进。6.2 临时切换DHCP和静态有时候排查网络问题需要临时切回DHCP。不用把配置文件大改只要把dhcp4改回trueaddresses和routes注释掉即可network: version: 2 ethernets: ens33: dhcp4: true然后sudo netplan apply。测试完再改回静态。6.3 保留一份能用的配置备份我自己的服务器上习惯保留一份确认可用的配置副本sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak下次改配置前先cp一份新的备份改出问题直接恢复备份再apply比手忙脚乱重新写配置快得多。6.4 关于IPv6如果你的环境不需要IPv6建议在netplan里显式关掉network: version: 2 ethernets: ens33: dhcp4: no dhcp6: no accept-ra: no addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 223.5.5.5dhcp6: no禁止DHCPv6accept-ra: no禁止接受路由器通告。有些网络环境IPv6不稳定反而导致部分应用优先走IPv6然后超时显式关闭能减少这类问题。7. 从18.04到24.04这些配置方式一直没怎么变文章写到这我个人的实际使用体会是Ubuntu的网络配置从18.04引入netplan之后整个大框架一直延续到了24.04核心逻辑没变过。变化比较大的反而是周边工具和命名规则。比如22.04开始/etc/resolv.conf的软链接指向方式有所调整某些云镜像里默认带cloud-init它会在启动时覆盖netplan配置——如果你在自己做的虚拟机上发现改了配置重启后又恢复原样多半是cloud-init在搞鬼可以把它的网络配置功能关掉sudo touch /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg echo network: {config: disabled} | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg这个操作在新版本虚拟机镜像中非常有用。最后再说一个小技巧配置完静态IP后建议顺手把hostname和/etc/hosts里的对应关系也确认一下。很多SSH连接慢的问题说到底是反向DNS解析超时跟IP配置本身无关。你可以在/etc/hosts里加上一行192.168.1.100 ubuntu-server这样既能避免一些解析延迟也能让SSH连上后快速显示主机名。配置静态IP这事说难不难说简单也不简单。核心就是记住YAML格式的规则理解网卡名和网络管理方式这两个变量剩下的就是多练几次手。踩过的坑多了自然就记住了。希望这篇经验之谈能帮你少走几次弯路。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。