Ubuntu服务器网络配置实战:用Netplan驾驭以太网与WiFi双网卡
最近在给一台Ubuntu服务器做网络规划时,遇到了一个挺有意思的场景:这台机器既要通过有线网卡接入内部局域网,访问私有存储和数据库,又需要通过无线网卡连接外网,方便进行软件更新和远程管理。这种“内外兼修”的需求在小型工作室、家庭实验室或者边缘计算节点中越来越常见。传统的ifconfig或network-manager工具在多网卡、特别是混合有线无线环境的配置上,要么步骤繁琐,要么不够统一。直到我深入使用了Ubuntu自带的Netplan,才发现它才是那个能优雅解决这类问题的“瑞士军刀”。
Netplan并非一个默默无闻的新工具,自Ubuntu 17.10以来,它已成为默认的网络配置层。它的设计哲学很清晰:声明式配置。你只需要在一个简洁的YAML文件里描述你期望的网络状态——“我要eth0从DHCP获取地址,wlan0连接某个WiFi并使用静态IP”——然后交给Netplan去处理底层与networkd或NetworkManager的交互。这种模式对于需要版本控制、自动化部署(如通过Ansible、Puppet)的服务器环境来说,简直是福音。今天,我就结合自己的踩坑经验,带你从零开始,用Netplan搞定服务器上以太网和WiFi双网卡的混合配置,并深入静态IP、路由策略等高级玩法。
1. 理解Netplan:现代Linux网络配置的基石
在直接动手修改配置文件之前,花几分钟理解Netplan的定位和工作原理非常有必要。这能帮你避免很多“为什么配置不生效”的困惑。
简单来说,Netplan是一个网络配置抽象层。它本身并不直接操作网卡,而是作为一个前端,读取位于/etc/netplan/目录下的YAML配置文件,然后将这些配置“渲染”(render)成后端服务(renderer)能够理解的格式。目前支持两个主要后端:
- systemd-networkd:一个轻量级的网络管理守护进程,是服务器版本的默认选择,无图形界面依赖,非常适合服务器。
- NetworkManager:功能更全,通常用于桌面环境,支持更多的连接类型(如VPN、移动宽带)和图形化管理。
对于我们的Ubuntu服务器场景,networkd是更推荐且默认的后端。它的配置更纯粹,与systemd集成度更高。
一个典型的Netplan配置文件结构如下,它清晰地展示了其声明式的特点:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
wifis:
wlan0:
dhcp4: yes
access-points:
"MyHomeWiFi":
password: "s3cr3tp@ssw0rd"
注意:YAML格式对缩进极其敏感。必须使用空格(通常为2个),切勿使用Tab键。一个缩进错误就可能导致整个配置无法解析。
Netplan配置的核心优势在于其幂等性。无论你执行多少次sudo netplan apply,只要YAML文件描述的状态不变,最终的网络状态就是一致的。这对于自动化运维至关重要。接下来,我们就从最基础的单接口配置,过渡到复杂的双网卡环境。
2. 实战:为以太网(eth0)与WiFi(wlan0)编写基础配置
假设我们拿到一台刚装好Ubuntu Server 22.04 LTS的机器。首先,使用ip link或ls /sys/class/net命令确认网卡设备名。在较新的系统中,有线网卡可能不再是传统的eth0,而是enp3s0这样的预测性命名;无线网卡也可能是wlp4s0。为了通用性,本文仍使用eth0和wlan0,请读者根据实际情况替换。
2.1 创建与编辑Netplan配置文件
Ubuntu安装后,/etc/netplan/目录下通常已有一个配置文件,例如00-installer-config.yaml或50-cloud-init.yaml。我们可以直接编辑它,或者创建一个优先级更高的新文件(如01-multi-nic.yaml)。Netplan会按字典序合并所有配置。
让我们创建一个全新的配置文件:
sudo nano /etc/netplan/01-multi-nic.yaml
首先,实现一个基础的双网卡DHCP配置。目标是让eth0和wlan0都能自动获取IP地址。
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
dhcp6: false
optional: true
wifis:
wlan0:
dhcp4: true
dhcp6: false
optional: true
access-points:
"Your-WiFi-SSID":
password: "Your-WiFi-Password"
关键参数解析:
- dhcp4/dhcp6: 设置为true启用对应版本的DHCP客户端。
- optional: true: 这个参数非常实用。它告诉系统,即使这个接口在启动时没有准备好(比如网线没插,或者WiFi信号没搜到),也不要等待它而阻塞整个系统启动过程。对于服务器上的辅助网络(尤其是WiFi),强烈建议加上。
- access-points: 这是WiFi配置特有的块。你可以列出多个网络,系统会按顺序尝试连接。密码直接以明文写在YAML里,从安全角度,在生产环境中可以考虑使用auth子块配合psk哈希值,但明文对于大多数内网和家庭场景更方便。
2.2 安全应用配置与试运行
配置写好后,最危险的操作就是直接sudo netplan apply。如果YAML语法有误或配置有冲突,可能导致网络断开,失去远程连接。因此,务必先使用netplan try命令。
sudo netplan try
这个命令会:
这是一个安全网。你可以在等待期间,快速打开另一个终端,尝试ping一个内网地址或外网地址,测试网络连通性。确认无误后,按回车键使配置永久生效。如果120秒内没有任何操作,或者你按了Ctrl+C,配置会自动回滚到之前的状态。
如果netplan try通过了,你就可以放心地使用sudo netplan apply来正式应用。使用ip addr show或networkctl status命令来验证各个接口是否获得了正确的IP地址。
3. 进阶:为双网卡配置静态IP地址与路由
DHCP虽然方便,但在服务器环境中,静态IP地址才是常态。它保证了服务的可达性和稳定性。我们的目标变为:eth0使用静态IP接入内网(例如192.168.1.100/24),而wlan0也使用静态IP接入外网(例如192.168.2.100/24)。这里假设两个网络属于不同的子网。
3.1 静态IP配置详解
修改之前的配置文件,关闭DHCP,并手动指定地址、网关和DNS。
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
addresses:
– 192.168.1.100/24
routes:
– to: 0.0.0.0/0
via: 192.168.1.1
metric: 100
nameservers:
addresses:
– 192.168.1.1
– 8.8.8.8
search: [localdomain]
wifis:
wlan0:
dhcp4: no
dhcp6: no
addresses:
– 192.168.2.100/24
routes:
– to: 0.0.0.0/0
via: 192.168.2.1
metric: 200
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
access-points:
"Your-WiFi-SSID":
password: "Your-WiFi-Password"
配置亮点与深度解析:
- eth0的metric: 100,wlan0的metric: 200。这意味着,对于发往未知目的地的流量(绝大部分外网流量),系统会优先选择eth0这条路径(通过网关192.168.1.1)。
- 只有当eth0链路失效时,系统才会自动切换到wlan0这条备用路由。这实现了简单的链路冗余和故障转移。
3.2 复杂的路由策略:基于源或目的的路由
有时,需求不仅仅是主备冗余。例如,你可能希望:
- 所有访问内网服务器10.0.0.0/8的流量,强制走eth0。
- 所有访问互联网的流量,默认走wlan0。
这就需要更精细的路由策略。Netplan同样支持。我们需要配置策略路由(Policy-based Routing)。以下是一个示例:
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses: [192.168.1.100/24]
routes:
– to: 10.0.0.0/8
via: 192.168.1.1
table: 100 # 使用自定义路由表100
routing-policy:
– from: 192.168.1.100
table: 100 # 来自eth0 IP的流量,查询表100
wlan0:
addresses: [192.168.2.100/24]
routes:
– to: default
via: 192.168.2.1
table: 200
routing-policy:
– from: 192.168.2.100
table: 200
这个配置创建了两个独立的路由表(100和200)。来自eth0IP的流量会查看表100,其规则是去往10.0.0.0/8的走eth0网关;来自wlan0IP的流量查看表200,默认路由走wlan0网关。这样就实现了流量的精细分流。
4. 排错指南与性能优化技巧
即使按照步骤操作,也难免会遇到问题。这里分享几个我亲自遇到过的高频问题及解决方法。
4.1 常见故障排查命令
当配置不生效时,一个清晰的排查路径能节省大量时间。
- ip addr show:查看所有接口的IP地址状态。
- ip route show:查看主路由表。
- ip route show table all:查看所有路由表(用于策略路由排查)。
- networkctl:networkctl list列出所有链接,networkctl status wlan0查看特定接口的详细状态,包括是否成功关联AP。
4.2 WiFi连接的特殊问题
无线网络配置的坑通常比有线多。
- WiFi接口未启用:确保无线网卡没有被rfkill软阻塞。使用rfkill list查看,如果被soft blocked,用sudo rfkill unblock wifi解锁。
- 密码或加密方式错误:WPA2-Personal是最常见的。如果你的网络使用不同的加密方式(如WPA3,或企业级WPA-Enterprise),需要在access-points下配置更复杂的auth参数。例如,对于WPA3:access-points:
"SSID":
auth:
key-management: sae
password: "password" - 隐藏网络:连接隐藏的SSID需要添加hidden: true参数。access-points:
"HiddenSSID":
password: "password"
hidden: true
4.3 安全与权限提醒
- 配置文件权限:Netplan会警告你如果配置文件权限过于开放(如-rw-rw-rw-)。建议设置为600(仅root可读写):sudo chmod 600 /etc/netplan/*.yaml。
- 密码安全:如前所述,生产环境应考虑使用WPA PSK哈希值替代明文密码。可以使用wpa_passphrase命令生成:wpa_passphrase Your-SSID Your-Password
输出中的psk=…哈希串可以用于配置文件的password字段。
4.4 性能考量
在服务器上使用WiFi,尤其是作为主要或备用外网通道时,需要考虑稳定性。
- 驱动与固件:确保安装了最新的无线网卡驱动和固件。对于某些Intel无线网卡,可能需要安装linux-firmware包或特定的驱动包。
- 电源管理:WiFi的电源管理功能在服务器上可能导致间歇性延迟或断开。如果遇到不稳定,可以尝试为wlan0接口禁用电源管理。这通常需要在/etc/netplan/配置中无法直接设置,但可以通过创建systemd服务或使用iw命令在启动后设置:sudo iw dev wlan0 set power_save off。
- 信号强度:服务器通常放在机柜或角落,WiFi信号可能不佳。考虑使用外置天线或中继器来改善连接质量。
配置完成后,进行一次重启测试是很好的习惯:sudo reboot。重启后,使用ip addr和ip route检查所有配置是否在启动时被正确应用,双网卡是否都按预期工作。至此,你的Ubuntu服务器已经拥有了一个灵活、可靠的有线无线混合网络环境。Netplan的简洁与强大,正是在处理这类复杂但标准的网络拓扑时得以完美展现。下次当你需要为服务器添加一个临时的无线备份链路,或者构建一个复杂的多网关路由策略时,不妨再打开这个YAML文件,你会发现它的扩展性远超你的想象。
网硕互联帮助中心





评论前必须登录!
注册