Skip to content

Netplan 网络配置完全指南

什么是 Netplan?

Netplan 是 Ubuntu 16.04 及更高版本中引入的网络配置抽象层。它使用 YAML 格式的配置文件来描述网络配置,然后生成适合底层网络管理工具(如 NetworkManager 或 systemd-networkd)的配置。

IMPORTANT

Netplan 本身不是网络管理器,而是一个配置抽象层。它将 YAML 配置转换为底层网络管理工具的配置。

为什么使用 Netplan?

解决的问题

  • 统一配置格式:统一了不同 Linux 发行版的网络配置方式
  • 简化复杂网络:通过 YAML 格式简化复杂网络拓扑的配置
  • 声明式配置:描述期望的网络状态,而不是配置步骤
  • 多后端支持:可以根据需要选择 NetworkManager 或 systemd-networkd

Netplan 工作原理

基础概念与配置结构

YAML 配置文件结构

yaml
network:
  version: 2
  renderer: networkd # 或者 NetworkManager
  ethernets:
    # 以太网接口配置
  wifis:
    # WiFi 接口配置
  bridges:
    # 网桥配置
  bonds:
    # 绑定配置
  vlans:
    # VLAN 配置

NOTE

配置文件通常存放在 /etc/netplan/ 目录下,文件名以 .yaml 结尾。

场景一:服务器静态 IP 配置

在企业环境中,服务器通常需要配置静态 IP 地址以确保服务的稳定性。

yaml
# Netplan 已弃用 gateway4(IPv4 网关)参数
# 推荐通过 routes 字段直接定义默认路由,这种方式更灵活,支持更复杂的路由策略。
# /etc/netplan/01-server-config.yaml
network:
  version: 2
  renderer: networkd # 使用 systemd-networkd 作为渲染器
  ethernets:
    ens18: # 网卡接口名
      dhcp4: no # 禁用 DHCP
      dhcp6: no # 禁用 IPv6 DHCP
      addresses:
        - 192.168.1.100/24 # 静态IP地址
      routes:
        - to: 0.0.0.0/0 # 默认路由
          via: 192.168.1.1 # 默认网关
yaml
# /etc/netplan/01-server-config.yaml
network:
  version: 2
  renderer: networkd # 使用 systemd-networkd 作为渲染器
  ethernets:
    ens18: # 网卡接口名
      dhcp4: no # 禁用 DHCP
      dhcp6: no # 禁用 IPv6 DHCP
      addresses:
        - 192.168.1.100/24 # 静态IP地址
      gateway4: 192.168.1.1 # 默认网关
      nameservers:
        addresses:
          - 8.8.8.8 # Google DNS
          - 8.8.4.4 # 备用 DNS
        search:
          - company.local # 域名搜索列表

TIP

使用 ip a 命令查看网卡接口名称,不同系统可能是 eth0ens18 等。

场景二:DHCP 自动获取 IP

适用于桌面环境或开发测试环境:

yaml
# /etc/netplan/01-dhcp-config.yaml
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens18:
      dhcp4: true
      dhcp6: true

场景三:WiFi 网络配置

笔记本或 IoT 设备连接 WiFi 网络:

yaml
# /etc/netplan/02-wifi-config.yaml
network:
  version: 2
  renderer: NetworkManager
  wifis: # WIFi 接口配置
    wlan0: # WiFi 接口名
      dhcp4: true
      access-points: # WiFi 接入点配置
        "Company-WiFi": #  WiFi 名称
          password: "SecurePassword123" # WiFi 密码
        "Backup-WiFi": # 备用 WiFi 名称
          password: "BackupPassword456" # 备用 WiFi 密码

场景四:网桥配置(虚拟化环境)

用于 KVM、Docker 等虚拟化环境:

yaml
# /etc/netplan/03-bridge-config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:
      dhcp4: no
  bridges: # 网桥配置
    br0: # 网桥名称
      dhcp4: yes # 启用 DHCP
      interfaces:
        - ens18 # 物理网卡

场景五:网卡绑定(高可用性)

用于关键服务器,提供网络冗余:

yaml
# /etc/netplan/04-bond-config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:
      dhcp4: no
    ens19:
      dhcp4: no
  bonds:
    bond0:
      dhcp4: yes
      interfaces:
        - ens18
        - ens19
      parameters:
        mode: active-backup # 主备模式
        primary: ens18
        mii-monitor-interval: 100

场景六:VLAN 配置

用于网络隔离和流量管理:

yaml
# /etc/netplan/05-vlan-config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:
      dhcp4: no
  vlans:
    vlan100:
      id: 100
      link: ens18
      addresses:
        - 192.168.100.10/24
    vlan200:
      id: 200
      link: ens18
      addresses:
        - 192.168.200.10/24

常用命令与操作

基础命令

bash
# 应用配置
sudo netplan apply

# 验证配置语法
sudo netplan try

# 生成配置文件(不应用)
sudo netplan generate

# 查看当前配置
sudo netplan get

# 调试模式
sudo netplan --debug apply

WARNING

在远程服务器上修改网络配置时,建议使用 netplan try 命令,它会在超时后自动回滚配置。

故障排除流程

高级配置示例

多网卡多网关配置

yaml
# /etc/netplan/06-multi-gateway.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18: # 内网
      addresses:
        - 192.168.1.100/24
      routes:
        - to: 192.168.0.0/16
          via: 192.168.1.1
          metric: 100
    ens19: # 外网
      addresses:
        - 10.0.1.100/24
      gateway4: 10.0.1.1
      nameservers:
        addresses:
          - 8.8.8.8

带认证的企业 WiFi

yaml
# /etc/netplan/07-enterprise-wifi.yaml
network:
  version: 2
  renderer: NetworkManager
  wifis:
    wlan0:
      access-points:
        "Enterprise-WiFi":
          auth:
            method: eap
            identity: "username@domain.com"
            password: "password"
            ca-certificate: /etc/ssl/certs/ca-cert.pem

最佳实践

配置文件管理

TIP

建议的配置文件命名规范:

  • 01-base-network.yaml - 基础网络配置
  • 02-wifi.yaml - WiFi 配置
  • 03-advanced.yaml - 高级配置

安全考虑

yaml
# WiFi密码加密存储示例
network:
  version: 2
  renderer: NetworkManager
  wifis:
    wlan0:
      access-points:
        "MyNetwork":
          # 使用加密的密码
          password: "@/path/to/password/file"

CAUTION

不要在配置文件中直接存储明文密码,特别是在版本控制系统中。

常见问题与解决方案

问题 1:配置不生效

bash
# 检查配置文件权限
ls -la /etc/netplan/
# 应该是 root:root 644

# 重新生成配置
sudo netplan generate
sudo netplan apply

问题 2:DNS 解析失败

yaml
# 确保DNS配置正确
ethernets:
  ens18:
    nameservers:
      addresses:
        - 8.8.8.8
        - 1.1.1.1
      search:
        - local.domain

问题 3:网卡名称变化

bash
# 查看当前网卡名称
ip link show

# 使用 MAC 地址匹配网卡
ethernets:
  network-card:
    match:
      macaddress: "52:54:00:12:34:56"
    set-name: eth0
    addresses:
      - 192.168.1.100/24

监控与维护

网络状态监控脚本

bash
#!/bin/bash
# /usr/local/bin/network-check.sh

echo "=== 网络接口状态 ==="
ip a

echo "=== 路由表 ==="
ip route

echo "=== DNS配置 ==="
cat /etc/resolv.conf

echo "=== 网络连通性测试 ==="
ping -c 3 8.8.8.8