Appearance
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 命令查看网卡接口名称,不同系统可能是 eth0、ens18 等。
场景二: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 applyWARNING
在远程服务器上修改网络配置时,建议使用 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