☰
Ubuntu Server 18.04 WiFi静态IP配置:netplan与wpa_supplicant实战
2026/10/21 13:49:33 网站建设 项目流程

1. 为什么要在 Ubuntu Server 18.04 上折腾 WiFi 静态 IP

把一台装了 Ubuntu Server 18.04 的机器用 WiFi 连上网,还要给它钉死一个固定 IP,这事听起来像是"顺手就能干",但真上手的人都知道,Server 版和 Desktop 版完全是两码事。Desktop 版有图形界面,点几下网络图标就能填 IP、掩码、网关;Server 版没有桌面环境,开机就是黑乎乎的命令行,网络配置全靠手写配置文件。更麻烦的是,Ubuntu 18.04 正好处在网络管理工具的新旧交替期——老的ifupdown(也就是/etc/network/interfaces那套)还在,新的netplan已经成了默认,而 WiFi 又牵扯到wpa_supplicant做认证,三套东西搅在一起,新手很容易配到一半发现"网卡起来了但拿不到 IP"或者"重启之后配置全丢"。

这篇内容就是冲着这个场景来的。核心关键词是Ubuntu Server 18.04、WiFi 配置、静态 IP、netplan、wpa_supplicant。我会把整个流程从"确认无线网卡型号"一直讲到"重启后 IP 稳定不变",中间穿插我自己踩过的坑,比如 netplan 的 YAML 缩进、无线接口命名规则、DHCP 和静态混用导致的冲突等等。适合谁看?手上有闲置笔记本、迷你主机、工控机想拿来当家庭服务器或者小型实验节点,又不想拉网线的人;也适合刚接触 Linux 网络配置、想搞明白 netplan 到底怎么写的运维新手。看完你应该能独立完成一台无头机器的 WiFi 静态 IP 配置,并且知道出问题该往哪儿查。

需要先说明一点:Ubuntu Server 18.04 的 netplan 版本相对早期,和 20.04、22.04 的写法有细微差别,网上很多教程是拿新版本套老版本,照抄会报错。我下面给的配置都是针对 18.04 实测可用的写法,同时会标注哪些地方在新版本里已经变了,方便你迁移。

2. 动手前的环境确认与工具选型

2.1 先搞清楚你的无线网卡到底认不认

很多人第一步就翻车:机器插着 WiFi 网卡,但系统压根没驱动,ip link里根本看不到无线接口。所以配置之前,先确认硬件层面没问题。

登录系统后执行:

ip link show

正常你会看到类似lo、enp3s0(有线)、wlp2s0(无线)这样的接口。无线接口的命名通常以wl开头,后面跟 PCI 位置信息。如果只看到lo和一个有线口,那说明无线网卡没被识别。

接着查网卡型号和驱动:

lspci | grep -i network lspci | grep -i wireless

输出会告诉你芯片型号,比如 Intel、Realtek、Qualcomm 之类。如果驱动没装,dmesg | grep -i firmware里通常会有"firmware missing"之类的提示。Ubuntu Server 18.04 的安装镜像里自带了不少常见无线固件,但一些较新的网卡(尤其是某些 Realtek 型号)需要额外装linux-firmware或者手动放固件文件。这一步没搞定,后面 netplan 写得再对也没用。

提示:如果ip link里能看到wl开头的接口,但状态是DOWN,那基本是软件配置问题,不是驱动问题,可以继续往下走。

2.2 netplan 和 wpa_supplicant 的分工

Ubuntu 18.04 默认用netplan作为网络配置的顶层工具。netplan 本身不直接干活,它是个"配置翻译器"——你写一份 YAML,它根据渲染器(renderer)把配置翻译成后端能懂的东西。18.04 上主要有两个后端:

  • networkd:systemd-networkd,负责有线、静态 IP、路由这些,轻量、适合服务器。
  • NetworkManager:功能全,管 WiFi、漫游、桌面场景更顺手。

WiFi 这块有个关键点:netplan 处理无线认证时,底层依赖wpa_supplicant来完成 WPA/WPA2 握手。你在 netplan 的 YAML 里写access-points和password,netplan 会生成对应的 wpa_supplicant 配置。所以整个链路是:netplan YAML → 渲染器 → wpa_supplicant(认证)+ networkd/NetworkManager(IP 配置)。

选哪个渲染器?我的建议是:纯服务器、只连一个固定 WiFi、要静态 IP,用 networkd 更干净。NetworkManager 会引入更多后台进程和状态管理,对无头服务器来说是负担。但如果你需要频繁切换 WiFi、或者要用nmcli这类工具动态管理,那就选 NetworkManager。下面我以 networkd 为主线讲,最后附上 NetworkManager 的写法对比。

2.3 配置文件放哪儿,权限怎么设

netplan 的配置文件统一放在/etc/netplan/目录下,文件名通常类似50-cloud-init.yaml或者01-netcfg.yaml。18.04 的云镜像和部分安装方式会默认生成一个50-cloud-init.yaml,里面可能已经有有线网的配置。

这里有个实操要点:不要直接改 cloud-init 生成的文件,因为 cloud-init 在每次启动时可能覆盖它。正确做法是新建一个优先级更高的文件,比如99-wifi-static.yaml。netplan 按文件名字典序读取,数字大的后读、优先级高,会覆盖前面的同名配置。

权限方面,netplan 对配置文件权限很敏感。如果文件权限过于开放(比如 777),它会拒绝加载并报错。标准做法:

sudo chmod 600 /etc/netplan/99-wifi-static.yaml sudo chown root:root /etc/netplan/99-wifi-static.yaml

注意:YAML 对缩进极其严格,必须用空格,不能用 Tab。一个 Tab 就能让 netplan 报"invalid YAML"。建议用nano或者vim并开启显示空格,写完先跑sudo netplan generate验证语法,别急着 apply。

3. 核心配置文件的逐行拆解

3.1 一份完整的 WiFi 静态 IP 配置长什么样

先上成品,再逐行解释。在/etc/netplan/99-wifi-static.yaml里写入:

network: version: 2 renderer: networkd wifis: wlp2s0: dhcp4: no dhcp6: no addresses: - 192.168.1.50/24 gateway4: 192.168.1.1 nameservers: addresses: - 223.5.5.5 - 119.29.29.29 access-points: "MyHomeWiFi": password: "your_wifi_password"

这份配置干了这几件事:关闭 IPv4/IPv6 的 DHCP,手动指定地址192.168.1.50、掩码/24,网关192.168.1.1,DNS 用两个公共解析地址,最后连到 SSID 为MyHomeWiFi的热点。

3.2 每个字段背后的逻辑和易错点

renderer: networkd决定了后端。如果你系统里 NetworkManager 在跑,而这里写 networkd,可能出现两个服务抢网卡的情况。确认方式:systemctl status NetworkManager,如果它是 active 的,要么停掉它,要么把 renderer 改成 NetworkManager。

wifis:这个顶层键是 18.04 netplan 专门给无线接口用的,和ethernets:平级。注意不是wifi:也不是wireless:,写错了 netplan 直接忽略。

接口名wlp2s0必须和你ip link看到的一模一样。不同机器可能是wlan0、wlp3s0等等。老式命名(wlan0)和新式可预测命名(wlpXsY)都可能出现,别想当然。

dhcp4: no是静态 IP 的前提。如果这里写yes又同时给了addresses,netplan 会报冲突或者行为不确定。18.04 上必须显式关掉。

addresses的写法是 CIDR 格式,192.168.1.50/24里的/24就是子网掩码 255.255.255.0。很多人习惯分开写netmask,但 netplan 不认这个键,只认 CIDR。这是从interfaces老写法迁移过来时最容易错的地方。

gateway4在 18.04 上还能用,但要注意:新版本 netplan(0.103 以后)已经废弃gateway4,改用routes写法。18.04 自带的是 0.36 到 0.40 左右的版本,gateway4完全没问题。如果你以后升级系统,记得改。

nameservers里可以放多个 DNS。我习惯一个国内公共 DNS 加一个备用,解析速度和稳定性兼顾。这里不写的话,系统可能拿不到 DNS,表现为"能 ping 通 IP 但域名解析失败"。

access-points是 WiFi 专属配置。SSID 建议用引号包起来,尤其是 SSID 里带空格、特殊字符或者中文的时候。password就是 WiFi 密码,明文写在文件里——这也是为什么前面强调文件权限要设 600。

提示:如果你的 WiFi 是隐藏 SSID,netplan 18.04 支持在 access-points 下加hidden: true。不过隐藏 SSID 本身对安全性提升有限,还容易带来连接问题,能不用就不用。

3.3 静态 IP 地址怎么选才不撞车

选静态 IP 不是随便填一个就行。你得知道路由器的 DHCP 地址池范围。假设路由器 DHCP 分配的是192.168.1.100到192.168.1.200,那你的静态 IP 就应该避开这个区间,比如选192.168.1.50或者192.168.1.10。

如果懒得查 DHCP 池,一个稳妥做法是选网段里靠前的地址(比如.2到.50),大多数家用路由器默认从.100往后分。但最保险的还是登录路由器管理页面确认一下。

另外,静态 IP 的网段必须和网关一致。网关是192.168.1.1,你的地址就得是192.168.1.x/24。填成192.168.0.50/24就跨网段了,网关根本不通。

4. 从写入配置到验证连通性的完整实操

4.1 应用配置的正确姿势

文件写好后,别急着netplan apply。先做语法检查:

sudo netplan generate

这个命令只生成后端配置,不实际应用。如果 YAML 有问题,它会直接报错并指出行号。确认无误后再:

sudo netplan apply

apply会重新加载网络配置。对于 WiFi 来说,它会触发 wpa_supplicant 重新连接。执行完等几秒,然后查状态:

ip addr show wlp2s0

你应该能看到inet 192.168.1.50/24这一行。如果还是inet后面跟着 DHCP 分配的地址,或者干脆没有inet,说明配置没生效。

再看路由:

ip route show

正常应该有default via 192.168.1.1 dev wlp2s0这一条。没有默认路由的话,外网访问不了。

4.2 验证 WiFi 认证是否成功

WiFi 和有线最大的区别就是认证环节。如果密码错了或者加密方式不匹配,网卡会一直处于"连接中"状态。查 wpa_supplicant 状态:

sudo wpa_cli -i wlp2s0 status

输出里wpa_state=COMPLETED表示认证成功,ssid=MyHomeWiFi确认连的是对的网络。如果是wpa_state=DISCONNECTED或者4WAY_HANDSHAKE,那多半是密码问题。

也可以看系统日志:

sudo journalctl -u wpa_supplicant -n 50

或者:

sudo dmesg | grep -i wlp2s0

日志里会明确告诉你"authentication failed"还是"associated"。

4.3 连通性测试的层次

网络通了没有,要分层测,别一上来就 ping 外网。

第一步,ping 网关:

ping -c 4 192.168.1.1

网关通不了,说明二层(WiFi 关联)或者三层(IP 配置)有问题,先回去查配置。

第二步,ping 公共 DNS 的 IP:

ping -c 4 223.5.5.5

这一步验证的是路由和 NAT 是否正常。能通说明你的机器已经能出网了。

第三步,测域名解析:

ping -c 4 www.example.com

如果前两步通、这一步不通,那就是 DNS 配置问题,回去检查nameservers段。

4.4 重启之后配置还在不在

静态 IP 配置最怕的就是"重启就丢"。netplan 的配置是持久化的,正常情况下重启后会自动应用。但有两个坑:

一是 cloud-init 可能覆盖。前面说了,新建99-开头的文件就是为了避免这个。如果重启后配置丢了,检查/etc/netplan/下是不是有别的文件在捣乱,用sudo netplan get看最终生效的合并配置。

二是 wpa_supplicant 服务状态。有些系统上 wpa_supplicant 没设成开机自启,导致重启后 WiFi 连不上。检查:

systemctl is-enabled wpa_supplicant

如果不是enabled,执行:

sudo systemctl enable wpa_supplicant

重启验证:

sudo reboot

起来之后重新ip addr show和ping一遍,确认 IP 还是那个静态地址。

5. 常见问题排查与避坑经验

5.1 问题速查表

现象可能原因排查方向
ip link看不到 wl 接口驱动/固件缺失lspci查型号,dmesg查固件报错
netplan apply 报 YAML 错误缩进用了 Tab 或权限不对用空格缩进,chmod 600
网卡起来了但没 IPdhcp4 没关或 addresses 格式错检查 CIDR 写法,确认 dhcp4: no
有 IP 但 ping 不通网关网段/网关不匹配确认地址和网关在同一网段
能 ping IP 不能解析域名DNS 没配检查 nameservers 段
重启后配置丢失cloud-init 覆盖或文件优先级低用 99- 前缀文件,netplan get验证
WiFi 一直连不上密码错或加密方式不兼容wpa_cli status看握手状态
apply 后网络短暂中断正常现象,重新关联需要时间等 5-10 秒再测

5.2 几个我实际踩过的坑

坑一:YAML 里的冒号后面必须有空格。dhcp4:no是错的,必须写dhcp4: no。这个错误 netplan 报得比较隐晦,有时候只说"invalid type",不告诉你具体哪行。

坑二:SSID 大小写敏感。我见过有人把MyWiFi写成mywifi,结果一直连不上,日志里显示"no network with SSID"。SSID 是区分大小写的,复制粘贴最保险。

坑三:5GHz 和 2.4GHz 同名不同频段。有些路由器双频合一,SSID 一样但实际是两个 BSSID。老网卡可能只支持 2.4GHz,如果路由器把 5GHz 优先广播,网卡可能连不上。这种情况可以在路由器里把两个频段的 SSID 分开命名,然后指定连 2.4GHz 那个。

坑四:netplan apply 之后 SSH 断了。如果你是远程 SSH 进去配的,改 IP 的瞬间连接就断了,这是正常的。所以要么本地接键盘显示器操作,要么提前想好新 IP 是多少,断了之后用新 IP 重连。千万别在只有一条 SSH 通道的情况下瞎改,改错了就只能物理接触机器了。

坑五:NetworkManager 和 networkd 打架。如果系统里 NetworkManager 是 active 的,你又用 networkd 渲染,可能出现网卡被两边同时管理、状态互相覆盖。最干净的做法是二选一:要么sudo systemctl stop NetworkManager && sudo systemctl disable NetworkManager,要么把 renderer 改成 NetworkManager 并统一用它管理。

5.3 用 NetworkManager 渲染的写法对比

如果你确实需要 NetworkManager,netplan 配置改成这样:

network: version: 2 renderer: NetworkManager wifis: wlp2s0: dhcp4: no addresses: - 192.168.1.50/24 gateway4: 192.168.1.1 nameservers: addresses: [223.5.5.5, 119.29.29.29] access-points: "MyHomeWiFi": password: "your_wifi_password"

区别只在renderer那一行。但底层行为不同:NetworkManager 会自己管理 wpa_supplicant 实例,连接状态可以用nmcli device status查看。对服务器来说,我依然推荐 networkd,进程少、依赖少、出问题好排查。

6. 配置完成后的稳定性加固

6.1 关闭 WiFi 省电模式

无线网卡默认可能开启省电模式,表现为"闲置一会儿就掉线"或者"延迟忽高忽低"。对服务器来说这很致命。关闭方法:

sudo iw dev wlp2s0 set power_save off

但这只是临时的,重启就恢复。持久化可以写进 systemd service 或者 rc.local。18.04 上 rc.local 默认没启用,建议写个简单的 service:

sudo nano /etc/systemd/system/wifi-powersave-off.service

内容:

[Unit] Description=Disable WiFi power save After=network.target [Service] Type=oneshot ExecStart=/sbin/iw dev wlp2s0 set power_save off [Install] WantedBy=multi-user.target

然后:

sudo systemctl enable wifi-powersave-off.service sudo systemctl start wifi-powersave-off.service

6.2 加一个网络自愈的定时检查

WiFi 相比有线,稳定性天然差一些。可以加个 cron 任务,每隔几分钟检查一次连通性,断了就重启网络:

crontab -e

加入:

*/5 * * * * ping -c 2 192.168.1.1 > /dev/null 2>&1 || /usr/sbin/netplan apply

这个逻辑是:每 5 分钟 ping 一次网关,失败就重新 apply 配置。简单粗暴但有效。注意路径要写绝对路径,cron 的环境变量和登录 shell 不一样。

6.3 记录一份配置备份

配置调通之后,把/etc/netplan/99-wifi-static.yaml备份一份到别的地方,比如:

sudo cp /etc/netplan/99-wifi-static.yaml ~/wifi-static-backup.yaml

系统重装或者配置被误改时,直接拷回来就能用。这个习惯我强烈建议养成,尤其是这种"调一次能用很久"的配置,下次再配可能已经是半年后,早忘了当时怎么写的。

7. 一些延伸思考

Ubuntu Server 18.04 虽然已经不算新,但大量存量设备还在跑它,尤其是工控、嵌入式、老旧笔记本改造的场景。netplan 这套配置逻辑在后续版本里基本延续,学会了 18.04 的写法,迁移到 20.04、22.04 主要是注意gateway4废弃和routes新写法这两个变化。

另外,如果你的场景是"机器经常换地方、连不同 WiFi",那静态 IP 其实不太合适,更适合用 DHCP 加路由器端的静态租约(MAC 绑定)。静态 IP 适合位置固定、网络环境稳定的服务器。选哪种,取决于你的实际使用方式,别为了"看起来专业"硬上静态 IP,结果换个地方就连不上。

WiFi 做服务器网络,稳定性始终不如有线。如果机器位置固定、能拉线,优先有线。WiFi 方案更多是"没办法拉线"时的妥协。心里有这个预期,遇到偶发掉线就不会太焦虑,按前面的自愈方案兜底就行。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询