云计算百科
云计算领域专业知识百科平台

Ubuntu服务器网络配置:用Netplan搞定以太网和WiFi双网卡(附静态IP设置)

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

这个命令会:

  • 解析并验证YAML语法。
  • 将配置临时应用到系统。
  • 等待120秒(默认),并提示你“如果网络工作正常,请按Enter确认;否则配置将自动回滚”。
  • 这是一个安全网。你可以在等待期间,快速打开另一个终端,尝试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"

    配置亮点与深度解析:

  • 地址与子网:addresses字段是一个列表,允许为一个接口配置多个IP地址。/24是CIDR表示法,等同于子网掩码255.255.255.0。
  • 路由配置:这是双网卡配置的灵魂。我们通过routes字段显式地定义了默认路由(0.0.0.0/0)。metric(度量值)是关键参数,它决定了路由的优先级,数值越小,优先级越高。
    • eth0的metric: 100,wlan0的metric: 200。这意味着,对于发往未知目的地的流量(绝大部分外网流量),系统会优先选择eth0这条路径(通过网关192.168.1.1)。
    • 只有当eth0链路失效时,系统才会自动切换到wlan0这条备用路由。这实现了简单的链路冗余和故障转移。
  • DNS配置:nameservers可以全局设置,也可以像上面这样针对每个接口设置。系统会合并这些DNS服务器列表。search域用于非完全限定域名的解析。
  • 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 常见故障排查命令

    当配置不生效时,一个清晰的排查路径能节省大量时间。

  • 检查YAML语法:sudo netplan –debug generate。这个命令会输出详细的渲染过程,任何语法错误或警告都会在这里显示。–debug参数是排错利器。
  • 查看生成的后端配置:Netplan渲染后的配置会放在/run/systemd/network/目录下(对于networkd)。查看这些.network文件可以确认Netplan是否正确理解了你的意图。例如:cat /run/systemd/network/10-netplan-eth0.network。
  • 查看网络服务状态:sudo systemctl status systemd-networkd。确保核心服务正在运行且没有报错。
  • 查看接口详情与路由表:
    • 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文件,你会发现它的扩展性远超你的想象。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Ubuntu服务器网络配置:用Netplan搞定以太网和WiFi双网卡(附静态IP设置)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!