精通 Ubuntu 上的 Netplan:使用 YAML 完整网络配置指南

1. Ubuntu 上的 Netplan 概览

什么是 Netplan?

Netplan 是自 Ubuntu 17.10 起引入的网络配置管理工具。之前常用 ifconfig/etc/network/interfaces 等工具,而 Netplan 提供了一种全新的网络配置方式。Netplan 最大的优势在于使用 YAML 文件来描述网络设置,这使得配置既简洁又统一,即使是复杂的网络环境也能轻松管理。

Netplan 支持 NetworkManagersystemd-networkd 等后端,并可在 Ubuntu Desktop 与 Server 版本上使用。这实现了不同环境下的统一网络管理。

为什么要使用 Netplan?

相较于传统的网络配置方式,Netplan 具备以下优势:

  1. 语法简洁:YAML 格式直观且结构清晰,即使是初学者也能轻松理解配置内容。
  2. 统一管理:同时适用于桌面和服务器环境,能够集中管理各种网络配置。
  3. 动态变更:编辑并应用配置文件即可实时更新网络设置。

Netplan 的基本结构

Netplan 配置文件通常位于 /etc/netplan/ 目录下,使用 .yaml 扩展名。这些文件包含网络接口配置、IP 地址、DNS 服务器等信息。

下面是一个基本的 Netplan 配置示例:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true

在该示例中,enp3s0 以太网接口被配置为通过 DHCP 获取 IP 地址。

Netplan 在 Ubuntu 18.04 LTS 及以后版本中的作用

Netplan 在 Ubuntu 18.04 LTS 及以后版本中默认安装,并广泛用于桌面和服务器环境的网络管理。在服务器环境中,往往需要多个网络接口或静态 IP 分配,Netplan 的灵活性因此显得尤为重要。

接下来,我们将通过实际案例来演示如何使用 Netplan 配置网络。

2. 基本的 Netplan 配置

Netplan 配置文件的位置

Netplan 配置文件通常存放在 /etc/netplan/ 目录下。通过编辑这些 .yaml 文件即可修改网络设置。常见的文件名如 50-cloud-init.yaml,但具体名称可能因环境而异。

要打开配置文件,可使用 vinano 等文本编辑器:

sudo vi /etc/netplan/50-cloud-init.yaml

动态 IP 地址配置(DHCP)

要通过 DHCP 自动获取 IP 地址,可使用以下 YAML 配置。这是最简洁的设置,常用于家庭和办公环境。

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true

静态 IP 地址配置

某些环境需要为服务器或特定设备分配静态 IP 地址。下面的示例演示了如何配置静态 IP。

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4

应用配置

编辑完配置文件后,使用以下命令应用 Netplan 配置:

sudo netplan apply

验证配置

要确认 Netplan 设置是否已成功生效,可使用以下命令检查网络接口状态:

ip a

3. 配置多个网络接口

多以太网接口配置

拥有多个网络接口的设备可以为每个接口分配不同的设置。下面的示例配置了两个以太网接口:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true
    enp4s0:
      addresses:
        - 192.168.1.150/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4

绑定冗余

Bonding 将多个网络接口合并为一个虚拟接口,提供冗余并提升可用性。下面的示例创建了一个名为 bond0 的绑定接口:

network:
  version: 2
  renderer: networkd
  bonds:
    bond0:
      interfaces:
        - enp3s0
        - enp4s0
      addresses:
        - 192.168.1.200/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      parameters:
        mode: active-backup
        primary: enp3s0

Wi‑Fi 配置

Netplan 也支持 Wi‑Fi 配置。以下示例连接到指定的 SSID:

network:
  version: 2
  renderer: networkd
  wifis:
    wlp2s0:
      access-points:
        "my_wifi_network":
          password: "password1234"
      dhcp4: true

VLAN 配置

虚拟局域网(VLAN)可以对网络进行逻辑分段。下面的示例在 enp3s0 上创建一个 VLAN:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true
  vlans:
    vlan10:
      id: 10
      link: enp3s0
      addresses:
        - 192.168.10.1/24

4. 高级 Netplan 配置

静态路由配置

在通过多个路由器连接网络时,需要使用静态路由。下面的示例指定了访问特定网络的路由:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      addresses:
        - 192.168.1.100/24
      routes:
        - to: 10.0.0.0/24
          via: 192.168.1.1

此配置为 10.0.0.0/24 网络设置了一条通过默认网关 192.168.1.1 的静态路由。

多默认网关

Netplan 允许为每个接口设置不同的默认网关。这在通过不同网络段访问互联网时非常有用:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
    enp4s0:
      addresses:
        - 10.0.0.100/24
      gateway4: 10.0.0.1

DNS 服务器配置

下面的示例指定了 Google 公共 DNS 服务器:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      addresses:
        - 192.168.1.100/24
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4

高级绑定配置

可以更改绑定模式以实现不同的行为。下面的示例配置了轮询(round‑robin)绑定:

network:
  version: 2
  renderer: networkd
  bonds:
    bond0:
      interfaces:
        - enp3s0
        - enp4s0
      addresses:
        - 192.168.1.200/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      parameters:
        mode: balance-rr

balance-rr 模式在两个接口之间交替流量,通过带宽分配提升性能。

高级 VLAN 配置

VLAN 在大规模网络中用于逻辑划分环境。下面的示例分配了 VLAN ID 100:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true
  vlans:
    vlan100:
      id: 100
      link: enp3s0
      addresses:
        - 192.168.100.1/24

此操作将 VLAN ID 100 分配给 enp3s0 接口,创建了一个分段的虚拟网络。

5. Netplan 故障排除

虽然 Netplan 使用方便,但配置错误或系统限制可能导致问题。本节说明常见问题及其解决方案。

常见 Netplan 问题及原因

1. 配置未生效

  • YAML 缩进错误:YAML 对缩进非常严格。错误的空格会导致解析失败。
  • 接口名称错误:确保接口名称与 ip a 命令的输出相匹配。

解决方案

  1. 保存配置文件后运行 netplan apply
  2. 使用 sudo netplan try 在永久应用更改之前进行测试。
    sudo netplan apply
    
    sudo netplan try
    

2. 网络连接错误

  • 网关或 DNS 设置错误:核实 IP 地址和 DNS 配置。
  • 物理接口问题:检查网线和硬件。

解决方案

  1. 使用 ping 命令测试连通性:
    ping 8.8.8.8
    
  1. 重新应用网络配置并重启服务:
    sudo systemctl restart networkd
    

3. netplan apply 时的错误信息

当配置错误或接口未被识别时会出现错误。

  • 示例错误信息Error in network configuration: failed to bring up device enp3s0

使用 ip a 验证正确的接口名称。

解决方案

检查缩进、拼写、接口名称以及 IP 地址的正确性。

检查日志

系统日志对故障排除非常有帮助。使用下面的命令查看与网络相关的日志:

journalctl -u systemd-networkd

该命令会显示详细信息,帮助解决配置错误。

6. 总结与后续步骤

使用 Netplan 可以简洁高效地管理 Ubuntu 的网络设置。以下是摘要以及进一步探索的建议步骤。

Netplan 的主要优势

  1. 直观的 YAML 配置:易于阅读和修改。
  2. 灵活的网络设计:支持多接口、绑定、路由和 VLAN。
  3. 统一的接口:兼容 systemd-networkdNetworkManager
  4. 实时更新:只需一条命令即可立即应用更改。

推荐的后续步骤

  1. 虚拟网络设计:使用多个 VLAN 对网络进行逻辑分段。
  2. IPv6 配置:为现代网络基础设施做好准备。
  3. 自动化脚本:使用 Ansible 或 Puppet 自动化配置。
  4. 安全增强:加强防火墙和访问控制设置。

其他资源

年収訴求