在 Netplan 配置中,ethernets
、bonds
、vlans
和 bridges
是四种核心网络组件,它们之间存在层级关系和功能依赖。理解它们之间的关系是构建复杂网络架构的关键。
组件 | 功能描述 | OSI层级 | 关键特性 |
---|---|---|---|
ethernets | 物理网络接口配置 | L1/L2 | 直接对应硬件网卡(如 enp3s0) |
bonds | 网络接口绑定(聚合) | L1/L2 | 将多个物理接口聚合成单一逻辑接口 |
vlans | 虚拟局域网接口 | L2 | 基于802.1Q协议在单接口上创建多个逻辑网络 |
bridges | 虚拟交换机 | L2 | 连接多个接口,实现二层数据转发 |
[物理硬件]
│
└── **ethernets** (物理接口)
│
├── **bonds** (可选: 接口聚合)
│ │
│ └── **vlans** (可选: 逻辑分区)
│ │
│ └── **bridges** (虚拟交换机)
│
└── **vlans** (可选: 直接基于物理接口)
│
└── **bridges** (虚拟交换机)
物理帧 → **ethernet** → [可选: **bond**] → [可选: **vlan**] → **bridge** → 虚拟机/容器
ethernets:
enp3s0:
dhcp4: false # 通常禁用独立IP
# 可添加MTU等硬件参数
bonds:
bond0:
interfaces: [enp3s0, enp4s0] # 绑定物理接口
parameters:
mode: 802.3ad # LACP聚合模式
vlans:
vlan10:
id: 10
link: bond0 # 基于bond接口
bridges:
br0:
interfaces: [bond0, vlan10] # 绑定多个下层接口
dhcp4: true
ethernets:
enp3s0: {dhcp4: no}
bridges:
br0:
interfaces: [enp3s0] # 直接桥接物理接口
dhcp4: yes
ethernets:
enp3s0: {dhcp4: no}
enp4s0: {dhcp4: no}
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
parameters: {mode: 802.3ad}
bridges:
br-bond:
interfaces: [bond0] # 桥接绑定接口
dhcp4: yes
ethernets:
enp3s0: {dhcp4: no}
vlans:
vlan10:
id: 10
link: enp3s0
bridges:
br-vlan10:
interfaces: [vlan10] # 桥接VLAN接口
addresses: [10.10.10.2/24]
ethernets:
enp3s0: {dhcp4: no}
enp4s0: {dhcp4: no}
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
vlans:
vlan10:
id: 10
link: bond0 # VLAN基于bond
bridges:
br-complex:
interfaces: [vlan10] # 桥接VLAN
addresses: [192.168.1.100/24]
1. 解析 ethernets 配置
2. 创建 bonds(依赖ethernets)
3. 创建 vlans(依赖ethernets或bonds)
4. 创建 bridges(聚合所有下层接口)
5. 应用网络配置
/etc/netplan/
├── 00-physical.yaml # 物理接口配置
├── 10-bonds.yaml # 绑定配置
├── 20-vlans.yaml # VLAN配置
└── 30-bridges.yaml # 网桥配置
物理接口禁用IP:
ethernets:
enp3s0:
dhcp4: false
dhcp6: false
显式指定依赖:
bridges:
br0:
interfaces: [bond0.vlan10] # 明确接口关系
云环境特殊处理:
ethernets:
eth0:
dhcp4-overrides: {use-routes: false}
循环依赖:
bridges:
br1: {interfaces: [br2]} # 错误!网桥不能相互嵌套
br2: {interfaces: [br1]}
缺少下层配置:
vlans:
vlan10: {link: non_existent} # 引用不存在的接口
DHCP冲突:
ethernets:
enp3s0: {dhcp4: true} # 错误!
bridges:
br0: {interfaces: [enp3s0], dhcp4: true}
# 查看接口关系
ip -br -c link show
# 检查VLAN配置
cat /proc/net/vlan/config
# 验证bond状态
cat /proc/net/bonding/bond0
# 查看网桥拓扑
bridge -c link show
# 查看Netplan应用日志
journalctl -u systemd-networkd -u netplan-apply
# 调试渲染过程
sudo netplan --debug apply
通过合理组合这些组件,可以构建从简单家庭网络到复杂数据中心的各种网络架构,满足不同场景下的性能、可靠性和隔离需求。
在 Netplan 中,ethernets
、bonds
、vlans
和 bridges
构成了一个清晰的网络配置层级体系,它们之间具有明确的依赖关系和协作模式。
ethernets:
enp3s0:
dhcp4: no # 必须禁用独立IP配置
optional: true
ethernets
定义的物理接口bonds:
bond0:
interfaces: [enp3s0, enp3s1]
parameters:
mode: 802.3ad
ethernets
或 bonds
)bridges
的成员vlans:
vlan100:
id: 100
link: bond0 # 父接口
# 不能配置IP地址!
bridges:
br0:
interfaces:
- enp4s0 # 物理接口
- bond1 # 绑定接口
- vlan100 # VLAN接口
addresses: [192.168.1.10/24] # 唯一可配置IP的地方
## ⚙️ 配置依赖规则
1. **自底向上定义**:
```mermaid
sequenceDiagram
物理接口->>ethernets: 定义基础
ethernets->>bonds: 可选聚合
ethernets/bonds->>vlans: 可选隔离
所有组件->>bridges: 最终整合
IP配置规则:
初始化顺序:
Netplan按以下顺序激活接口:
1. 物理接口 (ethernets)
2. 绑定接口 (bonds)
3. VLAN接口 (vlans)
4. 网桥接口 (bridges)
network:
version: 2
ethernets:
enp3s0: {dhcp4: no}
bridges:
br0:
interfaces: [enp3s0] # 物理接口直接加入网桥
dhcp4: yes
network:
version: 2
ethernets:
eno1: {dhcp4: no}
eno2: {dhcp4: no}
bonds:
bond0:
interfaces: [eno1, eno2] # 聚合物理接口
parameters: {mode: active-backup}
bridges:
br-bond:
interfaces: [bond0] # 绑定接口加入网桥
addresses: [10.0.0.5/24]
network:
version: 2
ethernets:
enp4s0: {dhcp4: no}
vlans:
vlan100:
id: 100
link: enp4s0 # 基于物理接口创建VLAN
bridges:
br-vlan100:
interfaces: [vlan100] # VLAN接口加入网桥
addresses: [192.168.100.10/24]
network:
version: 2
ethernets:
enp5s0f0: {dhcp4: no}
enp5s0f1: {dhcp4: no}
bonds:
bond-trunk:
interfaces: [enp5s0f0, enp5s0f1]
parameters: {mode: 802.3ad}
vlans:
vlan10:
id: 10
link: bond-trunk # 基于绑定接口创建VLAN
vlan20:
id: 20
link: bond-trunk
bridges:
br-mgmt:
interfaces: [vlan10] # VLAN10加入管理网桥
addresses: [10.10.10.2/24]
br-data:
interfaces: [vlan20] # VLAN20加入数据网桥
addresses: [10.20.20.2/24]
交互方向 | 允许性 | 示例 | 注意事项 |
---|---|---|---|
ethernets → bonds | ✓ | bond0包含enp1, enp2 | 物理接口需禁用DHCP |
ethernets → vlans | ✓ | vlan100基于enp3 | VLAN需指定父接口 |
ethernets → bridges | ✓ | br0包含enp4 | 最常见简单配置 |
bonds → vlans | ✓ | vlan200基于bond0 | 绑定模式需支持VLAN |
bonds → bridges | ✓ | br-bond包含bond1 | 高可用网络方案 |
vlans → bridges | ✓ | br-vlan包含vlan300 | 唯一正确配置VLAN IP的方式 |
vlans → bonds | ✗ | 无效配置 | VLAN不能作为bond成员 |
bridges → 其他 | ✗ | 无效配置 | 网桥是最终节点 |
简单网络:物理接口 → 网桥
ethernets → bridges
高可用网络:物理接口 → 绑定 → 网桥
ethernets → bonds → bridges
隔离网络:物理接口 → VLAN → 网桥
ethernets → vlans → bridges
企业级网络:物理 → 绑定 → VLAN → 网桥
ethernets → bonds → vlans → bridges
关键原则:IP地址只配置在bridges层级!下层接口必须设置
dhcp4: no
。
错误1:物理接口未禁用DHCP
ethernets:
enp3s0:
dhcp4: yes # 错误!必须设为no
错误2:VLAN接口配置IP
vlans:
vlan100:
addresses: [192.168.1.1/24] # 错误!IP应在bridge中配置
错误3:错误引用顺序
bridges:
br0:
interfaces: [bond0] # 必须在bonds之后定义
bonds: # 应定义在bridges之前!
bond0: ...
解决方案:始终遵循定义顺序:
ethernets → bonds → vlans → bridges
通过理解这些组件间的层级关系和配置规则,您可以构建从简单到复杂的企业级网络架构,实现灵活可靠的网络配置。
在 Netplan 中,ethernets
、bonds
、vlans
和 bridges
是四种核心网络组件类型,它们之间存在层级关系和组合方式,共同构建复杂的网络拓扑。以下是它们的详细关系和交互方式:
graph TD
A[物理网卡
(ethernets)] -->|作为基础| B[绑定接口
(bonds)]
A -->|直接使用| D[网桥
(bridges)]
A -->|承载| C[VLAN接口
(vlans)]
B -->|聚合后承载| C
B -->|聚合后加入| D
C -->|作为虚拟接口加入| D
enp3s0
, eth0
)ethernets:
enp3s0:
dhcp4: no # 禁用独立IP
enp4s0:
dhcp4: no
ethernets
定义的物理网卡bonds:
bond0:
interfaces: [enp3s0, enp4s0] # 引用物理网卡
parameters:
mode: 802.3ad # 绑定模式
ethernets
或 bonds
)vlans:
vlan10:
id: 10
link: bond0 # 基于绑定接口
ethernets
, bonds
, vlans
所有类型接口bridges:
br0:
interfaces:
- enp5s0 # 直接物理网卡
- bond0 # 绑定接口
- vlan10 # VLAN接口
dhcp4: yes
层级 | 组件类型 | 依赖关系 | 典型位置 |
---|---|---|---|
物理层 | ethernets |
无依赖 | 最底层 |
聚合层 | bonds |
依赖 ethernets |
中间层 |
虚拟层 | vlans |
依赖 ethernets 或 bonds |
中间层 |
桥接层 | bridges |
可包含所有下层组件 | 最顶层(含IP配置) |
ethernets:
enp3s0: {dhcp4: no}
bridges:
br0:
interfaces: [enp3s0] # 物理网卡直接加入网桥
dhcp4: yes
ethernets:
eth0: {dhcp4: no}
eth1: {dhcp4: no}
bonds:
bond0:
interfaces: [eth0, eth1]
parameters: {mode: active-backup}
bridges:
br0:
interfaces: [bond0] # 绑定接口加入网桥
addresses: [192.168.1.10/24]
ethernets:
enp3s0: {dhcp4: no}
vlans:
vlan20:
id: 20
link: enp3s0 # 基于物理网卡
bridges:
br-vlan20:
interfaces: [vlan20] # VLAN加入网桥
dhcp4: yes
ethernets:
eth0: {dhcp4: no}
eth1: {dhcp4: no}
bonds:
bond0:
interfaces: [eth0, eth1]
parameters: {mode: 802.3ad}
vlans:
vlan30:
id: 30
link: bond0 # 基于绑定接口
bridges:
br-mgmt:
interfaces: [vlan30] # VLAN加入网桥
addresses: [10.30.0.5/24]
IP 地址位置:
bridges
)ethernets
/bonds
/vlans
)禁用 DHCP接口引用顺序:
# 正确顺序:先定义下层,再引用
ethernets:
eth0: ... # 先定义
bonds:
bond0:
interfaces: [eth0] # 后引用
STP 优化:
bridges:
br0:
parameters:
stp: true # 多接口时启用
forward-delay: 4
依赖检查:
# 查看接口依赖关系
ip -d link show
层级验证:
# 物理网卡 → 绑定
cat /proc/net/bonding/bond0
# 绑定 → VLAN
ip -d link show vlan20
# VLAN → 网桥
bridge link show
启动顺序:
# 查看初始化日志
journalctl -u systemd-networkd -b
命名规范:
eth0
, enp3s0
bond0
, bond-data
vlan10
, vlan-mgmt
br0
, br-wan
性能优化:
bonds:
bond0:
parameters:
lacp-rate: fast # 快速LACP检测
bridges:
br0:
parameters:
ageing-time: 300 # 减少MAC表刷新
安全隔离:
bridges:
br-guest:
interfaces: [vlan20]
accept-ra: false # 禁用IPv6路由通告
firewall: [...] # 防火墙规则
通过理解这些组件间的层级关系和组合方式,您可以设计出从简单家庭网络到复杂企业级架构的各种网络拓扑。
在 Netplan 中,bridges
(网桥)、bonds
(绑定)、ethernets
(物理网卡)、vlans
(虚拟局域网)是构建复杂网络拓扑的核心组件。它们的关系可以总结为 “物理层 → 虚拟化层 → 逻辑网络层” 的分层架构。以下是详细解析及配置示例:
物理层:ethernets(物理网卡)
↓
虚拟化层:bonds(绑定接口) 或 vlans(VLAN子接口)
↓
逻辑网络层:bridges(网桥)或其他逻辑接口(如 routes、firewall)
enp1s0
、eth0
)。ethernets:
enp1s0:
dhcp4: false # 必须禁用自动IP(手动配置或绑定到其他接口)
802.1q
协议划分逻辑网络。ethernets
或 bonds
)。vlans:
vlan10:
id: 10 # VLAN ID
link: enp1s0 # 绑定到物理网卡 enp1s0
dhcp4: false
balance-rr
)或实现故障转移(模式 active-backup
)。ethernets
)。bonds:
bond0:
interfaces: [enp1s0, enp2s0] # 绑定两个物理网卡
parameters:
mode: balance-rr # 负载均衡模式
mii-monitor-interval: 100 # 链路监控间隔(毫秒)
ethernets
、vlans
或 bonds
作为成员接口。bridges:
br0:
interfaces: [enp1s0] # 直接绑定物理网卡
dhcp4: true # 通过网桥获取IP
network:
version: 2
ethernets:
enp1s0:
dhcp4: false
bridges:
br0:
interfaces: [enp1s0]
dhcp4: true
network:
version: 2
ethernets:
enp1s0:
dhcp4: false
enp2s0:
dhcp4: false
bonds:
bond0:
interfaces: [enp1s0, enp2s0]
parameters:
mode: active-backup
vlans:
vlan100:
id: 100
link: bond0
dhcp4: false
bridges:
br0:
interfaces: [vlan100] # 网桥绑定VLAN接口
addresses: [192.168.1.100/24]
network:
version: 2
ethernets:
enp3s0:
dhcp4: false
enp4s0:
dhcp4: false
vlans:
mgmt-vlan:
id: 10
link: enp3s0
dhcp4: false
data-vlan:
id: 20
link: enp4s0
dhcp4: false
bridges:
br-mgmt:
interfaces: [mgmt-vlan]
addresses: [10.0.0.1/24]
br-data:
interfaces: [data-vlan]
dhcp4: true
组件 | 依赖 | 作用 | 典型场景 |
---|---|---|---|
ethernets |
无 | 提供物理网络接口,是所有虚拟接口的基础。 | 基础网络配置 |
vlans |
ethernets 或 bonds |
在物理或绑定接口上划分逻辑子网,实现流量隔离。 | 多部门网络隔离、虚拟化环境 |
bonds |
ethernets |
聚合多个物理接口,提升带宽或冗余能力。 | 服务器高可用、负载均衡 |
bridges |
ethernets 、vlans 、bonds |
连接多个接口为一个逻辑交换机,实现二层网络互通。 | 虚拟化桥接、家庭网络多设备互联 |
通过灵活组合这些组件,您可以构建从简单家庭网络到复杂数据中心的各种网络拓扑,满足高可用性、高性能和安全性需求。
在 Netplan 配置中,bridges
、bonds
、ethernets
和 vlans
是用于定义不同类型的网络接口及其组合关系的核心概念。它们之间的关系可以通过以下逻辑理解:
ethernets
ethernets
是 Netplan 中对物理以太网接口(如 enp0s3
、eth0
等)的抽象。ethernets:
enp0s3:
dhcp4: no
bonds
、bridges
、vlans
)通常都依赖于 ethernets
接口作为基础。bonds
bonds
用于将多个物理网卡(ethernets
)绑定为一个逻辑接口,以实现负载均衡或冗余(如 LACP)。bonds
需要引用多个 ethernets
接口。bonds:
bond0:
interfaces: [enp0s3, enp0s8]
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
parameters:
mode: active-backup
miimon: 100
bond0
的 interfaces
列表中必须包含已定义的 ethernets
接口(如 enp0s3
和 enp0s8
)。bridges
bridges
用于将多个物理或虚拟接口(如 ethernets
、bonds
、vlans
)桥接为一个逻辑网络设备,常用于虚拟化场景(如 KVM、Docker)。bridges
的 interfaces
列表可以包含 ethernets
、bonds
或 vlans
接口。bridges:
br0:
interfaces: [enp0s3, bond0]
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
parameters:
stp: false
br0
可以同时桥接物理网卡(enp0s3
)和链路聚合接口(bond0
)。stp: false
表示禁用生成树协议(STP)。vlans
vlans
用于在物理或逻辑接口上划分虚拟局域网(VLAN),通过 id
指定 VLAN ID。vlans
需要引用一个基础接口(ethernets
、bonds
或 bridges
)作为 link
。vlans:
vlan10:
id: 10
link: enp0s3
addresses: [192.168.10.100/24]
vlan10
的 link
字段指向物理网卡 enp0s3
。bridges
或 bonds
中。接口类型 | 依赖关系 | 典型用途 |
---|---|---|
ethernets |
无 | 物理网卡的基础配置 |
bonds |
依赖 ethernets |
链路聚合(负载均衡/冗余) |
bridges |
依赖 ethernets 、bonds 、vlans |
虚拟化网络桥接 |
vlans |
依赖 ethernets 、bonds 、bridges |
划分虚拟局域网 |
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
enp0s8:
dhcp4: no
bonds:
bond0:
interfaces: [enp0s3, enp0s8]
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
parameters:
mode: active-backup
vlans:
vlan10:
id: 10
link: bond0
addresses: [192.168.10.100/24]
bridges:
br0:
interfaces: [vlan10]
dhcp4: no
addresses: [192.168.1.200/24]
enp0s3
和 enp0s8
被绑定为 bond0
。vlan10
基于 bond0
创建。br0
将 vlan10
桥接为一个逻辑网络设备。接口名称匹配:
interfaces
、link
或 bonds
中引用的接口名称与实际系统中的接口一致(可通过 ip link show
查看)。match
规则通过 MAC 地址匹配接口:ethernets:
mainif:
match:
macaddress: "00:11:22:33:44:55"
set-name: mainif
YAML 缩进规则:
依赖顺序:
bonds
、vlans
或 bridges
的 interfaces
或 link
必须先定义对应的 ethernets
接口。ethernets
)放在前面。Renderer 选择:
renderer: networkd
(默认)适用于大多数服务器场景。renderer: NetworkManager
适用于需要图形界面管理的桌面环境。renderer
对某些高级功能(如 VLAN、BOND)的支持可能略有差异。ethernets
是所有网络配置的基础。bonds
和 vlans
是对 ethernets
的扩展,分别用于链路聚合和虚拟局域网。bridges
是更高层次的逻辑设备,可将 ethernets
、bonds
或 vlans
组合成一个网络。在 Netplan 的配置模型中,bridges
、bonds
、ethernets
和 vlans
是定义网络拓扑的核心组件,它们通过层级关系组合实现复杂的网络结构。理解这些组件的关系是配置高级网络的关键。
ethernets
ethernets:
eth0:
dhcp4: no
vlans
eth0
上创建 VLAN 10 和 20ethernets:
eth0:
dhcp4: no
vlans:
vlan10:
id: 10
link: eth0
vlan20:
id: 20
link: eth0
bonds
eth0
和 eth1
绑定为 bond0
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
bonds:
bond0:
interfaces: [eth0, eth1]
parameters:
mode: 802.3ad # 链路聚合模式
bridges
eth0
和 VLAN 接口加入网桥bridges:
br0:
interfaces: [eth0, vlan10]
物理网卡(ethernets) → 逻辑接口(vlans/bonds) → 桥接(bridges)
ethernets
是最底层的物理设备vlans
和 bonds
基于 ethernets
创建bridges
可以包含 ethernets
、vlans
或 bonds
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
bonds:
bond0:
interfaces: [eth0, eth1] # Bond基于物理网卡
parameters:
mode: active-backup
vlans:
vlan10:
id: 10
link: bond0 # VLAN基于Bond接口
bridges:
br0:
interfaces: [vlan10] # 网桥包含VLAN接口
addresses: [192.168.1.10/24]
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
bridges:
br0:
interfaces: [eth0]
addresses: [192.168.1.10/24]
# 虚拟机通过br0获取独立IP
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
vlans:
vlan10:
id: 10
link: eth0
vlan20:
id: 20
link: eth0
bridges:
br10:
interfaces: [vlan10]
addresses: [192.168.10.1/24] # 管理网络
br20:
interfaces: [vlan20]
addresses: [192.168.20.1/24] # 业务网络
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
bonds:
bond0:
interfaces: [eth0, eth1]
parameters:
mode: 802.3ad
bridges:
br0:
interfaces: [bond0]
addresses: [192.168.1.10/24]
VLAN 必须指定父接口
vlans:
vlan10:
id: 10
link: eth0 # 必须指向ethernets或bonds中的接口
Bond 必须包含多个物理网卡
bonds:
bond0:
interfaces: [eth0, eth1] # 至少两个物理接口
Bridge 可混合包含不同类型接口
bridges:
br0:
interfaces: [eth0, vlan10, bond0] # 合法组合
IP 地址只能配置在最上层接口
bridges
)可配置 IP# 查看网桥信息
brctl show br0
# 查看VLAN标签
ip -d link show
# 查看Bond状态
cat /proc/net/bonding/bond0
# 查看完整网络配置
networkctl status
避免环路
启用 STP(生成树协议)防止网络环路:
bridges:
br0:
parameters:
stp: true
MTU 一致性
确保同一网络路径上的所有接口 MTU 一致,避免分片问题。
DHCP 与静态 IP 冲突
同一网络中只能有一个设备使用静态 IP 或启用 DHCP。
通过合理组合 bridges
、bonds
、ethernets
和 vlans
,可以构建从简单到复杂的各种网络拓扑,满足服务器、虚拟化和容器环境的需求。
Netplan 是一个声明式的网络配置工具,用于配置网络接口和各种网络功能。在 Netplan 中,bridges、bonds、ethernets、vlans 等都是网络配置的组成部分,它们之间的关系主要体现在网络拓扑结构和功能实现上。
网桥(bridges)与物理以太网接口(ethernets):
网桥(bridges)与链路聚合(bonds):
网桥(bridges)与 VLAN(vlans):
链路聚合(bonds)与物理以太网接口(ethernets):
VLAN(vlans)与物理以太网接口(ethernets):
VLAN(vlans)与网桥(bridges)和链路聚合(bonds):
network:
version: 2
renderer: networkd
ethernets:
enp1s0:
dhcp4: no
enp2s0:
dhcp4: no
bonds:
bond0:
interfaces:
- enp1s0
- enp2s0
parameters:
mode: 802.3ad
lacp-rate: fast
TransmitHashPolicy: layer2
bridges:
br0:
address: 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
interfaces:
- bond0
vlans:
vlan10:
id: 10
link: bond0
addresses:
- 192.168.10.1/24
enp1s0
和 enp2s0
是物理接口,配置为无 DHCP。enp1s0
和 enp2s0
绑定在一起形成 bond0
。br0
网桥,将 bond0
作为其成员接口,并分配静态 IP 地址和网关。bond0
上创建 VLAN 接口 vlan10
,分配 VLAN ID 为 10,并配置其 IP 地址。这个示例将物理接口绑定在一起形成一个高可用的网络连接,然后将这个绑定接口桥接到一个网桥上,再在桥接接口上创建 VLAN 接口,实现网络的灵活配置。
Netplan 是一个用于 Linux 系统的网络配置工具,它使用 YAML 格式文件(通常位于 /etc/netplan/
目录下)来定义和管理网络接口。在 Netplan 配置中,bridges
、bonds
、ethernets
和 vlans
是顶层键(top-level keys),分别代表不同类型的网络设备。它们协同工作,构建灵活的网络拓扑结构。下面我将逐步解释每个设备类型的作用、区别以及它们之间的关系,确保回答基于真实可靠的网络配置原理。回答中,我会引用用户提供的参考内容来支持解释。
ethernets:
enp0s25:
dhcp4: true # 使用 DHCP 获取 IP 地址
enp0s25
是一个物理以太网接口,通过 DHCP 自动配置。ethernets
或 bonds
)。id
参数指定 VLAN ID(例如,VLAN 15)。ethernets
的关系:vlans
通常基于 ethernets
接口创建(例如,在物理接口上添加 VLAN 标签)。bridges
的关系:vlans
可以作为 bridges
的成员,实现跨 VLAN 的桥接。vlans:
vlan15:
id: 15
link: enp0s25 # 基于物理接口 enp0s25
accept-ra: no # 禁用路由器广告
enp0s25
。ethernets
)绑定成一个逻辑接口,提供冗余(故障转移)或负载均衡。这提高了网络可靠性和吞吐量。balance-rr
轮询负载均衡)。ethernets
)。ethernets
的关系:bonds
聚合多个 ethernets
接口(例如,两个物理网卡绑定成一个逻辑接口)。vlans
的关系:bonds
可以作为 vlans
的基础,实现 VLAN 在绑定接口上的应用。bridges
的关系:bonds
可以作为 bridges
的成员,用于构建高可用网桥。bonds:
bond0:
interfaces: [enp0s25, enp0s30] # 绑定两个物理接口
mode: active-backup # 模式为主动-备份冗余
ethernets
、vlans
或 bonds
),实现数据包在接口间转发。常用于虚拟化环境(如 KVM)或连接多个子网。ethernets
的关系:bridges
可以包含 ethernets
接口作为成员。vlans
的关系:bridges
可以整合 vlans
(例如,将 VLAN 接口加入网桥),实现跨 VLAN 路由。bonds
的关系:bridges
可以使用 bonds
作为成员,提供高可用性。bridges
是连接层设备,而 bonds
是链路聚合工具,vlans
是网络分段工具,ethernets
是物理基础。bridges:
br0:
addresses: [10.3.99.25/24] # 网桥的 IP 地址
interfaces: [vlan15] # 包含 VLAN 接口
br0
,包含 VLAN 15 接口,并分配静态 IP。层级关系:
ethernets
是最底层,代表物理设备。vlans
和 bonds
基于 ethernets
构建(例如,VLAN 在物理接口上创建,bond 聚合多个物理接口)。bridges
是最高层,可以整合 ethernets
、vlans
或 bonds
作为成员接口。ethernets (物理层) → bonds (聚合层) → vlans (虚拟层) → bridges (桥接层)
例如,一个网桥可以包含一个 bond(绑定多个以太网接口),并在其上配置 VLAN。协同工作示例:
假设一个场景:需要高可用网络,带 VLAN 分段。
ethernets:
enp0s25: {} # 物理接口1
enp0s30: {} # 物理接口2
bonds:
bond0:
interfaces: [enp0s25, enp0s30] # 绑定两个物理接口
mode: balance-rr # 负载均衡模式
vlans:
vlan15:
id: 15
link: bond0 # 基于绑定接口创建 VLAN
bridges:
br0:
interfaces: [vlan15] # 网桥包含 VLAN 接口
addresses: [192.168.1.1/24]
bonds
提供冗余,vlans
分割网络,bridges
连接所有部分,形成一个完整的拓扑。关键区别总结:
设备类型 | 主要作用 | 依赖关系 | 典型应用场景 |
---|---|---|---|
ethernets | 管理物理网络接口 | 无(基础层) | 直接连接物理网络 |
vlans | 创建虚拟网络分段 | 基于 ethernets 或 bonds | 网络隔离(如企业 VLAN) |
bonds | 聚合多个接口提供高可用 | 基于多个 ethernets | 服务器冗余或负载均衡 |
bridges | 连接多个接口实现二层转发 | 可包含任何接口类型 | 虚拟化或跨子网通信 |
dhcp4: true
)。renderer
指定后端工具(如 networkd
或 NetworkManager
),影响配置生效方式。version: 2
是当前标准,确保配置兼容性。netplan try
命令避免网络中断。在 Netplan 中,ethernets
、vlans
、bonds
和 bridges
是互锁的网络构建块:ethernets
提供物理基础,bonds
增强可靠性,vlans
实现逻辑分割,bridges
整合所有部分实现灵活连接。理解它们的关系(如 vlans
基于 ethernets
,bridges
包含 vlans
)能帮助您设计高效网络拓扑。始终参考官方文档测试配置,以确保稳定性。
在 Netplan 中,bridges
、bonds
、ethernets
和 vlans
是网络配置的核心组件,它们通过层级化和模块化的方式协同工作,共同构建复杂的网络拓扑。以下是它们的关系与协作逻辑:
组件 | 作用 | 典型场景 |
---|---|---|
ethernets | 定义物理或虚拟以太网接口的基础参数(如 DHCP、静态 IP、MTU 等)。 | 单个网卡配置(如 eth0 、enp0s3 ) |
bonds | 将多个物理网卡绑定为一个逻辑接口,提供冗余和负载均衡(如 bond0 )。 |
高可用性服务器、带宽聚合 |
bridges | 将多个接口(物理/虚拟/Bond/VLAN)桥接为单一逻辑网络,实现二层互通。 | 虚拟机网络、物理网络扩展 |
vlans | 在物理或逻辑接口上创建虚拟局域网子接口,实现流量隔离(如 eth0.100 )。 |
多租户网络、VLAN 划分 |
lo
、veth
)。ethernets:
eth0:
dhcp4: no
optional: true
eth1:
dhcp4: no
optional: true
ethernets
绑定为一个逻辑接口(如 bond0
),支持多种模式(如 active-backup
、802.3ad
)。bonds:
bond0:
interfaces: [eth0, eth1]
parameters:
mode: active-backup
primary: eth0
ethernets
,上层可被 bridges
或 vlans
使用。eth0.100
),实现流量隔离。vlans:
eth0.100:
id: 100
link: eth0
addresses: [192.168.100.1/24]
ethernets
或 bonds
作为底层接口。bridges
直接桥接或通过 ethernets
配置 IP。ethernets
、bonds
、vlans
)桥接为单一逻辑网络。bridges:
br0:
interfaces: [bond0, eth0.100]
dhcp4: yes
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
bonds:
bond0:
interfaces: [eth0, eth1]
parameters:
mode: 802.3ad
vlans:
bond0.100:
id: 100
link: bond0
bridges:
br0:
interfaces: [bond0.100]
dhcp4: yes
eth0
和 eth1
被绑定为 bond0
(高可用)。bond0
上创建 VLAN 100 子接口 bond0.100
。br0
桥接 bond0.100
,并通过 DHCP 获取 IP。network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
bridges:
br-lan:
interfaces: [eth0, eth1]
dhcp4: yes
br-vm:
interfaces: [eth0.200]
dhcp4: no
addresses: [192.168.200.1/24]
vlans:
eth0.200:
id: 200
link: eth0
eth0
和 eth1
直接桥接到 br-lan
(物理网络扩展)。eth0
创建 VLAN 200 子接口 eth0.200
,桥接到 br-vm
(虚拟机网络)。依赖顺序:
ethernets
必须先定义,供 bonds
、vlans
和 bridges
引用。bonds
和 vlans
需在 bridges
之前定义,以便被桥接。接口唯一性:
bonds
或 bridges
(需通过 dummy-devices
或 modems
扩展)。模式兼容性:
bonds
的模式(如 802.3ad
)需交换机端配合(如启用 LACP)。vlans
的 ID 需与网络规划一致,避免冲突。bridges
引用了未定义的 bond
)。ifenslave
内核模块或配置参数错误。sudo apt install ifenslave
)并验证 parameters
。Netplan 通过 分层配置 实现复杂网络拓扑:
在 Netplan 中,bridges
、bonds
、ethernets
和 vlans
是描述网络拓扑的核心组件,它们通过层级嵌套和引用关系协同工作,共同构建复杂的网络结构。以下是它们的定义、交互关系及典型配置模式:
组件 | 功能 | 典型场景 |
---|---|---|
ethernets |
定义物理网卡(如 enp0s3 )或虚拟以太网接口的基础属性(IP、DHCP、MTU 等) |
服务器物理网卡、虚拟机虚拟网卡 |
bonds |
将多个 ethernets 接口聚合成单一逻辑接口,提供冗余或带宽聚合 |
高可用服务器、负载均衡网络 |
vlans |
在物理接口(ethernets 或 bonds )上创建带 VLAN ID 的子接口,实现流量隔离 |
多租户网络、部门网络隔离 |
bridges |
将多个接口(包括 ethernets 、bonds 、vlans )桥接为同一广播域,模拟二层交换机 |
虚拟机网络互联、容器跨主机通信 |
ethernets
是其他组件的底层依赖,所有高级配置需基于物理或虚拟以太网接口。bonds
通过 interfaces
列表引用多个 ethernets
接口(如 [eth0, eth1]
)。vlans
需通过 link
属性绑定到物理接口或 Bond 接口(如 link: bond0
)。bridges
的 interfaces
可包含 ethernets
、bonds
或 vlans
接口(如 [eth0, bond0.10]
)。network:
version: 2
renderer: networkd
ethernets:
eth0: dhcp4: no # 物理网卡不直接持有 IP
eth1: dhcp4: no
bonds: # 聚合 eth0 和 eth1
bond0:
interfaces: [eth0, eth1]
parameters: mode: 802.3ad
vlans: # 在 Bond 上创建 VLAN
bond0.10:
id: 10
link: bond0 # 绑定到 bond0
bridges: # 桥接 VLAN 接口
br0:
interfaces: [bond0.10] # 引用 VLAN 接口
dhcp4: yes
ethernets:
enp3s0: dhcp4: no # 物理网卡
vlans:
vlan100:
id: 100
link: enp3s0 # 基于物理网卡创建 VLAN
bridges:
br-vlan100:
interfaces: [vlan100] # 桥接 VLAN 接口
addresses: [192.168.100.2/24]
作用:
虚拟机通过 br-vlan100
接入 VLAN 100 的隔离网络。
ethernets:
eth0: {}
eth1: {}
bonds:
bond0:
interfaces: [eth0, eth1]
parameters: mode: active-backup # 主备冗余
bridges:
br0:
interfaces: [bond0] # 桥接 Bond 接口
dhcp4: yes
作用:
bond0
提供网卡冗余,br0
为虚拟机提供统一网络出口。
vlans:
eth0.10:
id: 10
link: eth0
eth0.20:
id: 20
link: eth0
bridges:
br-vlan10: interfaces: [eth0.10]
br-vlan20: interfaces: [eth0.20]
作用:
不同容器连接到 br-vlan10
或 br-vlan20
,实现跨 VLAN 的流量隔离。
ethernets
)加入 bonds
或 bridges
后,必须禁用自身 IP(dhcp4: no
),IP 由上层逻辑接口持有。vlans
的 id
必须在 1-4094 范围内,且同一 link
接口上的 VLAN ID 不可重复。bonds
的 mode
(如 802.3ad
)需与交换机配置匹配,否则聚合可能失效。stp: true
避免广播风暴,小型网络可关闭以降低延迟。ethernets
→ bonds
/vlans
→ bridges
,下层为上层提供基础接口,上层整合下层实现高级功能。ethernets
)向上逐层配置,用 ip link
和 brctl show
验证接口绑定状态。通过合理组合这些组件,可构建适应虚拟化、容器化、高可用等复杂场景的网络架构,同时保持配置的简洁性与可维护性。
在Netplan中,bridges
、bonds
、ethernets
、vlans
是用于定义不同网络接口类型的组件。它们可以独立使用,也可组合成复杂的网络拓扑。以下是它们之间的关系和典型应用场景:
eth0
),是其他组件的基础。ethernets:
eth0:
dhcp4: false
ethernets
)绑定成一个逻辑接口,提供冗余或带宽叠加。active-backup
(故障切换)、balance-tlb
(负载均衡)等。ethernets
。bonds:
bond0:
interfaces: [eth0, eth1] # 依赖两个以太网接口
parameters:
mode: active-backup
ethernet
、bond
或 bridge
)上创建隔离的802.1Q VLAN子接口。link
字段)。vlans:
vlan100:
id: 100
link: bond0 # 父接口是 bond0
dhcp4: true
ethernet
、bond
、vlan
等)桥接成一个共享广播域,类似虚拟交换机。bridges:
br0:
interfaces: [vlan100] # 桥接 VLAN 接口
dhcp4: true
场景:高可用虚拟化网络。
配置逻辑:
eth0
和 eth1
绑定为 bond0
(冗余)。bond0
上创建 vlan100
(网络隔离)。vlan100
加入 br0
(供虚拟机或容器使用)。YAML 示例:
network:
version: 2
ethernets:
eth0: {}
eth1: {}
bonds:
bond0:
interfaces: [eth0, eth1]
parameters:
mode: active-backup
vlans:
vlan100:
id: 100
link: bond0
bridges:
br0:
interfaces: [vlan100]
dhcp4: true
eth0
和 eth1
上分别创建 vlan10
和 vlan20
。bond0
(负载均衡)。bond0
加入 br0
。依赖关系:
bonds
→ ethernets
(必须基于物理接口)。vlans
→ 父接口(任意类型)。bridges
→ 任何子接口(灵活组合)。设计逻辑:
ethernets
)提供硬件连接。bonds
和 vlans
增强可靠性和逻辑分割。bridges
整合网络资源,供应用层(如虚拟机)使用。通过合理组合这些组件,可以构建复杂、高可用的网络拓扑,适用于服务器、虚拟化、容器化等场景。
在 Netplan 的 YAML 配置中,bridges
(网桥)、bonds
(聚合接口)、ethernets
(物理网卡)和 vlans
(虚拟局域网)是定义不同网络接口类型的核心组件。它们通过分层组合实现复杂的网络架构。以下是它们的角色和关系详解:
组件 | 作用 | 典型用途 |
---|---|---|
ethernets |
定义物理网卡(如 enp0s3 , eth0 )的底层配置。 |
直接操作服务器的物理网络接口。 |
bonds |
将多个物理网卡聚合为一个逻辑接口,提升带宽或容灾能力(如 LACP)。 | 链路聚合,保证网络高可用性。 |
vlans |
在物理/绑定接口上划分虚拟子网(如 eth0.100 )。 |
通过 VLAN 隔离不同业务流量。 |
bridges |
创建一个二层桥接接口,连接多个接口到同一广播域。 | 虚拟机/容器共享物理网络或 VLAN。 |
+----------------+ +----------------+ +----------------+
| ethernets | | bonds | | vlans |
| (物理网卡) | | (聚合接口) | | (虚拟子网) |
| enp0s3, eth0 | →←→←→ | bond0, bond1 | →←→←→ | vlan100, vlan200|
+----------------+ +----------------+ +----------------+
↓ ↓ ↓
+-------------------------+-------------------------+
↓
+-----------------+
| bridges |
| (桥接接口) |
| br0, br1 |
+-----------------+
ethernets
)是高层级组件(如 bonds
/vlans
)的依赖。network:
version: 2
ethernets:
enp3s0:
dhcp4: no # 禁用物理网卡独立 IP
bridges:
br0:
dhcp4: yes # 桥接接口启用 DHCP
interfaces: [enp3s0] # 绑定物理网卡到桥接
network:
version: 2
ethernets:
enp3s0: { dhcp4: no }
enp4s0: { dhcp4: no }
bonds:
bond0: # 聚合两个物理网卡
interfaces: [enp3s0, enp4s0]
parameters:
mode: 802.3ad # LACP 动态聚合模式
bridges:
br0:
dhcp4: yes
interfaces: [bond0] # 桥接聚合接口
network:
version: 2
ethernets:
enp3s0: { dhcp4: no }
vlans:
vlan100: # 创建 VLAN 100
id: 100
link: enp3s0 # 绑定到物理网卡
bridges:
br0:
dhcp4: yes
interfaces: [vlan100] # 桥接 VLAN 接口
network:
version: 2
ethernets:
enp3s0: { dhcp4: no }
enp4s0: { dhcp4: no }
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
vlans:
vlan200:
id: 200
link: bond0 # 在聚合接口上划分 VLAN
bridges:
br0:
dhcp4: yes
interfaces: [vlan200] # 桥接 VLAN 接口
从属关系
bonds
依赖 ethernets
:必须先在 ethernets
中定义物理网卡,才能将其加入 bonds
。vlans
依赖 ethernets
或 bonds
:必须在已有接口(物理或聚合接口)上创建 VLAN。bridges
聚合任意接口:可以绑定物理网卡、聚合接口、VLAN 或其他桥接接口。IP 地址配置
ethernets
)通常不配置 IP,由上层接口(bonds
/bridges
)管理。br0
)。# 1. 查看网络接口状态
ip link show
# 2. 检查桥接接口和绑定设备
bridge link # 或 brctl show
# 3. 验证 VLAN 配置
ip -d link show vlan100 # 查看 VLAN 详情
# 4. 测试网络连通性
ping 8.8.8.8
# 5. 查看日志定位错误
journalctl -u systemd-networkd # networkd 后端日志
dhcp4: no
?br0
)会接管 IP 分配,物理网卡仅作为数据通道,无需独立 IP。bonds
的 mode
?mode=802.3ad
:动态 LACP,需交换机支持。mode=active-backup
:主备模式,仅一个接口活跃。bridge link | grep enp3s0
sudo ufw disable
(临时在 Netplan 中,ethernets
、bonds
、vlans
和 bridges
是四种核心网络组件类型,它们可以独立使用,也可以相互组合形成复杂的网络拓扑结构。理解它们之间的关系对于构建高效网络配置至关重要。
ethernets:
enp3s0:
dhcp4: no
# 当此接口加入其他组件时,必须禁用独立IP配置
ethernets
接口bonds:
bond0:
interfaces: [enp3s0, enp4s0] # 依赖两个ethernets接口
parameters:
mode: 802.3ad
lacp-rate: fast
ethernets
或 bonds
vlans:
vlan100:
id: 100
link: enp3s0 # 基于ethernet接口
# 或 link: bond0 # 基于bond接口
bridges:
br0:
interfaces:
- enp3s0 # ethernet接口
- vlan100 # vlan接口
- bond0 # bond接口
dhcp4: yes
ethernets:
enp3s0: { ... }
enp4s0: { ... }
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
parameters: { ... }
# 基于物理接口
vlans:
vlan10:
id: 10
link: enp3s0
# 基于绑定接口
vlans:
vlan20:
id: 20
link: bond0
bridges:
br-lan:
interfaces:
- enp3s0 # 物理接口
- bond0 # 绑定接口
- vlan100 # VLAN接口
network:
version: 2
renderer: networkd
# 物理接口层
ethernets:
enp3s0: { dhcp4: no }
enp4s0: { dhcp4: no }
# 聚合层
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
parameters:
mode: 802.3ad
# 虚拟化层
vlans:
vlan100:
id: 100
link: bond0
dhcp4: no
# 交换层
bridges:
br0:
interfaces: [vlan100]
addresses: [192.168.100.1/24]
层级 | 组件类型 | 功能 | 典型配置 |
---|---|---|---|
物理层 | ethernets | 硬件接口 | MAC地址、MTU |
聚合层 | bonds | 接口捆绑 | 绑定模式、监控 |
虚拟化层 | vlans | 网络分段 | VLAN ID |
交换层 | bridges | 二层交换 | IP地址、STP |
IP地址分配:
依赖顺序:
配置继承:
ethernets:
enp3s0: { ... }
enp4s0: { ... }
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
vlans:
vlan100:
id: 100
link: bond0 # 在绑定接口上创建VLAN
bridges:
br-vlan100:
interfaces: [vlan100] # VLAN接口加入网桥
addresses: [10.0.100.1/24]
ethernets:
enp3s0: { ... }
enp4s0: { ... }
vlans:
vlan10:
id: 10
link: enp3s0
vlan20:
id: 20
link: enp3s0 # 同一物理接口不同VLAN
bridges:
br-vlan10:
interfaces: [vlan10]
addresses: [192.168.10.1/24]
br-vlan20:
interfaces: [vlan20]
addresses: [192.168.20.1/24]
接口未正确关联:
# 检查接口状态
ip link show
bridge link
# 验证依赖关系
ip -d link show bond0
IP地址冲突:
dhcp4: no
VLAN标签问题:
# 查看VLAN配置
ip -d link show vlan100
# 检查交换机端口配置(需设为trunk模式)
绑定接口故障:
# 查看绑定状态
cat /proc/net/bonding/bond0
# 检查物理链路状态
ethtool enp3s0
命名规范:
配置顺序:
# 推荐配置顺序
ethernets -> bonds -> vlans -> bridges
性能优化:
ethernets:
enp3s0:
offload: # 禁用卸载功能
rx: off
tx: off
tso: off
gso: off
gro: off
安全性:
bridges:
br0:
parameters:
stp: false # 简单网络中禁用STP
forward-delay: 0
# 禁用MAC学习(隔离模式)
ageing-time: 0
通过合理组合这些组件,您可以构建出适应各种场景的网络架构,从简单的家庭网络到复杂的企业级虚拟化环境。
在 Netplan 的 YAML 配置中,ethernets
、bonds
、vlans
和 bridges
是构建网络拓扑的核心组件,它们之间存在明确的层级关系和协作方式。以下是它们的详细关系和交互逻辑:
dhcp4: no, dhcp6: no
)ethernets:
enp3s0:
dhcp4: no
enp4s0:
dhcp4: no
ethernets
定义的接口balance-rr
(轮询)802.3ad
(LACP)active-backup
(主备)bonds:
bond0:
interfaces: [enp3s0, enp4s0]
parameters:
mode: 802.3ad
lacp-rate: fast
link
属性)id
: VLAN ID (1-4094)link
: 基础接口名vlans:
vlan10:
id: 10
link: bond0 # 基于bond创建
ethernets
)bonds
)vlans
)bridges:
br0:
interfaces: [bond0, vlan10] # 混合成员
addresses: [192.168.1.100/24]
ethernets:
enp3s0: {dhcp4: no}
bridges:
br0:
interfaces: [enp3s0]
addresses: [192.168.1.100/24]
ethernets:
enp3s0: {dhcp4: no}
enp4s0: {dhcp4: no}
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
parameters: {mode: 802.3ad}
bridges:
br0:
interfaces: [bond0]
addresses: [192.168.1.100/24]
ethernets:
eno1: {dhcp4: no} # 单物理接口
vlans:
vlan10: {id: 10, link: eno1}
vlan20: {id: 20, link: eno1}
bridges:
br-vlan10:
interfaces: [vlan10]
addresses: [10.10.0.1/24]
br-vlan20:
interfaces: [vlan20]
addresses: [10.20.0.1/24]
ethernets:
eno1: {dhcp4: no} # 管理流量
eno2: {dhcp4: no} # 数据流量
eno3: {dhcp4: no} # 数据流量
bonds:
bond-data:
interfaces: [eno2, eno3]
parameters: {mode: active-backup}
vlans:
vlan-data:
id: 100
link: bond-data
bridges:
br-mgmt:
interfaces: [eno1]
addresses: [192.168.100.10/24]
br-data:
interfaces: [vlan-data]
addresses: [10.100.0.1/24]
接口唯一性:
IP 地址配置:
bridges
bonds
(当不加入网桥时)vlans
(当不加入网桥时)必需属性:
组件 | 必需属性 | 示例值 |
---|---|---|
bonds |
interfaces |
[enp3s0, enp4s0] |
vlans |
id , link |
id: 10, link: eth0 |
bridges |
interfaces (可为空) |
[bond0, vlan10] |
渲染器兼容性:
# 必须统一渲染器
network:
renderer: networkd # 或 NetworkManager
ethernets: ...
bridges: ...
依赖检查:
# 检查未使用的接口
sudo netplan generate --debug 2>&1 | grep "unused"
拓扑可视化:
# 生成当前网络拓扑
bridge link && ip -d link show
层级验证命令:
# 查看物理接口 → Bond 映射
cat /proc/net/bonding/bond0
# 查看网桥成员
bridge link show br0
# 查看VLAN配置
ip -d link show vlan10
关键原则:Netplan 的配置是声明式的,需确保从底层(物理接口)到顶层(网桥)的完整链路定义。配置顺序应为:
ethernets
→bonds
→vlans
→bridges
。
在 Netplan 中,bridges
、bonds
、ethernets
和 vlans
是构建复杂网络拓扑的核心组件,它们通过层级关系相互连接。以下是它们之间的详细关系和协作方式:
组件 | 作用 | 典型应用场景 |
---|---|---|
ethernets | 物理网络接口配置 (如 eth0, enp3s0) | 定义底层物理网卡的基本参数 |
bonds | 将多个物理接口绑定为单一逻辑接口 (链路聚合) | 网络冗余/负载均衡 |
vlans | 在物理接口/Bond/桥接上创建虚拟局域网接口 | 网络隔离/多租户环境 |
bridges | 创建二层桥接设备,连接多个物理/虚拟接口 | 虚拟机网络/KVM虚拟化 |
ethernets:
eno1: {} # ← 物理接口1
eno2: {} # ← 物理接口2
bonds:
bond0:
interfaces: [eno1, eno2] # ← 聚合两个物理接口
parameters: {mode: 802.3ad}
vlans:
vlan100:
id: 100
link: bond0 # ← 基于bond0创建VLAN
bridges:
br0:
interfaces: [vlan100] # ← 桥接VLAN接口
dhcp4: yes
network:
version: 2
renderer: networkd
# 1. 物理接口 (不直接配置IP)
ethernets:
eno1:
dhcp4: no
optional: true
eno2:
dhcp4: no
optional: true
# 2. 绑定双网卡 (链路聚合)
bonds:
bond0:
interfaces: [eno1, eno2]
parameters:
mode: 802.3ad
lacp-rate: fast
# 3. 在绑定接口上创建VLAN
vlans:
vlan100:
id: 100
link: bond0 # 基于bond0创建
# 4. 桥接VLAN接口 (最终网络出口)
bridges:
br-vlan100:
interfaces: [vlan100]
addresses: [192.168.100.10/24]
gateway4: 192.168.100.1
nameservers:
addresses: [8.8.8.8]
层级限制:
# 有效配置
bridges:
br0:
interfaces: [vlan100, bond0, eth0] # √
# 无效配置
vlans:
vlan100:
link: br0 # X (不能基于桥接创建VLAN)
IP 配置位置:
bridges
或 bonds
)ethernets
)必须禁用 DHCPethernets:
eth0:
dhcp4: no # ← 必须禁用
bridges:
br0:
interfaces: [eth0]
dhcp4: yes # ← IP在此配置
接口复用限制:
物理网卡 → Bridge → 虚拟机
↑
(直接分配IP)
物理网卡1 → Bond0 → VLAN100 → Bridge → 虚拟机
物理网卡2 ↗ (故障切换+网络隔离)
物理网卡 → Bond0 → Bridge → 容器
↗
VLAN200 (可选)
关系 | 验证命令 |
---|---|
Bond ↔ 物理接口 | cat /proc/net/bonding/bond0 |
Bridge ↔ 成员接口 | bridge link show br0 |
VLAN ↔ 父接口 | ip -d link show vlan100 |
整体拓扑 | networkctl status --all |
掌握这些组件之间的关系,可以灵活构建从简单家庭网络到复杂数据中心的各种网络架构。关键是根据实际需求选择正确的组合方式,并遵循 Netplan 的层级规则。
在Netplan中,bridges
(网桥)、bonds
(绑定接口)、ethernets
(以太网接口)、vlans
(VLAN接口)是四种核心网络配置类型,它们通过嵌套绑定和逻辑分层实现复杂网络拓扑。以下是它们的关系详解及配置示例:
ethernets
:物理/虚拟接口基础
eth0
)或虚拟接口(如veth
),是所有网络配置的底层依赖。bridges
:二层交换核心
ethernets
或其他接口(如vlans
),实现二层广播域的扩展。vlans
:逻辑子网划分
ethernets
或bonds
创建,通过802.1Q标签划分虚拟局域网。bonds
:链路聚合与冗余
ethernets
绑定为一个逻辑接口,提供带宽聚合或故障冗余。ethernets
→ bridges
eth0
)绑定到网桥(如br0
)后,自身不再配置IP,由网桥代表逻辑网络。ethernets:
eth0: { dhcp4: no } # 禁用IP,绑定到网桥
bridges:
br0:
interfaces: [eth0] # 绑定eth0
addresses: [192.168.1.100/24]
ethernets
→ vlans
→ bridges
eth0.10
),再将VLAN接口绑定到网桥。ethernets:
eth0: { dhcp4: no }
vlans:
vlan10: # 创建VLAN 10
id: 10
link: eth0 # 基于eth0
bridges:
br0:
interfaces: [vlan10] # 绑定VLAN接口
addresses: [192.168.10.1/24]
ethernets
→ bonds
→ bridges
bond0
),再绑定到网桥,实现高可用+二层交换。ethernets:
eth0: { dhcp4: no }
eth1: { dhcp4: no }
bonds:
bond0: # 创建绑定接口
interfaces: [eth0, eth1] # 绑定eth0和eth1
parameters: { mode: active-backup } # 主备模式
bridges:
br0:
interfaces: [bond0] # 绑定绑定接口
addresses: [192.168.1.100/24]
ethernets
→ bonds
→ vlans
→ bridges
ethernets:
eth0: { dhcp4: no }
eth1: { dhcp4: no }
bonds:
bond0:
interfaces: [eth0, eth1]
parameters: { mode: 802.3ad } # 链路聚合模式
vlans:
vlan20: # 基于绑定接口创建VLAN
id: 20
link: bond0
bridges:
br0:
interfaces: [vlan20] # 绑定VLAN接口
addresses: [192.168.20.1/24]
类型 | 核心参数 | 作用 |
---|---|---|
ethernets |
dhcp4 , addresses , gateway4 |
配置静态IP或DHCP,作为基础接口使用。 |
bridges |
interfaces , stp , forward-delay |
绑定成员接口,stp 防止环路,forward-delay 调整STP转发延迟。 |
vlans |
id , link |
id 为VLAN ID(1-4094),link 指定基础接口(如eth0 或bond0 )。 |
bonds |
interfaces , mode , miimon |
mode 支持8种聚合模式(如active-backup 、802.3ad ),miimon 监控链路状态。 |
虚拟机/容器网络
bridges
绑定ethernets
,为虚拟机提供二层交换环境(如KVM的br0
+tap
接口)。企业子网隔离
vlans
划分部门网络(如财务VLAN 10、研发VLAN 20),再绑定到bridges
实现跨VLAN通信(需三层路由)。高可用数据中心
bonds
聚合多网卡(如bond0
),绑定到bridges
,确保物理链路故障时网络不断连。多租户云环境
bonds
+vlans
+bridges
,为不同租户分配独立VLAN和网桥,实现资源隔离。在 Netplan 中,bridges
、bonds
、ethernets
和 vlans
是用于定义不同类型网络接口的配置项,它们的关系和用途如下:
ethernets
:物理以太网接口enp3s0
、eth0
)的配置。ethernets:
enp3s0:
dhcp4: false # 关闭物理网卡的 DHCP
bridges
:网桥接口bridge-utils
工具包。bridges:
br0:
interfaces: [enp3s0, enp4s0] # 将物理网卡加入网桥
dhcp4: true
bonds
:网卡绑定接口ifenslave
或 networkd-dispatcher
。bonds:
bond0:
interfaces: [enp3s0, enp4s0]
parameters:
mode: active-backup # 模式:主备
miimon: 100 # 链路监控间隔
vlans
:虚拟局域网接口vlans:
vlan10:
id: 10 # VLAN ID
link: enp3s0 # 物理网卡
dhcp4: true
层级关系:
ethernets
是基础,其他逻辑接口(bridges
、bonds
、vlans
)通常依赖于物理网卡。vlans
可以直接基于 ethernets
或 bonds
创建。bridges
可以包含 ethernets
、bonds
或 vlans
。组合使用场景:
bridges:
br0:
interfaces: [vlan10] # 将 VLAN 接口加入网桥
vlans:
vlan10:
id: 10
link: enp3s0
bridges:
br0:
interfaces: [bond0] # 将绑定接口加入网桥
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
bridges:
br0:
interfaces: [vlan10]
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
vlans:
vlan10:
id: 10
link: bond0
依赖关系:
bridges
必须包含至少一个接口(如 ethernets
、bonds
、vlans
)。vlans
必须指定关联的物理网卡(link
)。bonds
必须指定绑定的物理网卡和模式(如 active-backup
、balance-rr
)。network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: false
bridges:
br0:
interfaces: [enp3s0]
dhcp4: true
enp3s0
桥接到 br0
,供虚拟机直接访问外部网络。network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: false
enp4s0:
dhcp4: false
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
parameters:
mode: active-backup
bridges:
br0:
interfaces: [bond0]
dhcp4: true
bond0
,再桥接到 br0
,实现冗余和负载均衡。network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: false
vlans:
vlan10:
id: 10
link: enp3s0
dhcp4: false
bridges:
br0:
interfaces: [vlan10]
addresses: [192.168.10.1/24]
gateway4: 192.168.10.1
enp3s0
上创建 VLAN 10,再将其桥接到 br0
,分配静态 IP。YAML 格式:
-
表示(如 interfaces: [enp3s0, enp4s0]
)。接口名称匹配:
ethernets:
my-eth0:
match:
macaddress: "00:11:22:33:44:55"
dhcp4: false
调试工具:
sudo netplan apply
brctl show # 查看网桥状态
ip a show br0 # 查看网桥 IP
journalctl -xe | grep netplan # 查看日志
生成树协议(STP):
bridges:
br0:
parameters:
stp: true
ethernets
是物理网卡的基础。bridges
用于多接口聚合(如虚拟化场景)。bonds
用于提高网络可用性或带宽。vlans
用于网络分段。interfaces
字段关联,实现复杂的网络拓扑。在Netplan配置中,bridges
、bonds
、ethernets
和vlans
是定义网络接口层次关系的关键字。它们的关系可以概括为:ethernets
是物理基础,bonds
和bridges
是逻辑聚合,vlans
是虚拟划分。理解它们的层级关系是配置复杂网络的关键。
ethernets
(物理网卡)ethernets:
eth0: # 物理网卡名称
dhcp4: no
mtu: 9000 # 设置MTU为9000(巨型帧)
bonds
(链路聚合)ethernets
中的物理网卡,需指定聚合模式(如mode: active-backup
)。bonds:
bond0: # 绑定接口名称
interfaces: [eth0, eth1] # 依赖的物理网卡
mode: 802.3ad # LACP模式
parameters:
lacp-rate: fast
bridges
(网桥)ethernets
、bonds
或vlans
,实现跨设备通信。bridges:
br0: # 网桥名称
interfaces: [eth0, vnet0] # 关联物理网卡和虚拟网卡
dhcp4: yes
vlans
(虚拟局域网)ethernets
、bonds
或bridges
),通过VLAN ID区分。vlans:
eth0.10: # VLAN子接口(格式:父接口.VLAN ID)
id: 10 # VLAN ID
link: eth0 # 依赖的父接口
addresses: [192.168.10.10/24]
物理网卡(ethernets) → 逻辑聚合(bonds/bridges) → 虚拟划分(vlans)
ethernets:
eth0:
dhcp4: no
bridges:
br0:
interfaces: [eth0]
vlans:
br0.10:
id: 10
link: br0
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
bonds:
bond0:
interfaces: [eth0, eth1]
bridges:
br0:
interfaces: [bond0]
vlans:
br0.10:
id: 10
link: br0
bonds
依赖ethernets
:链路聚合必须基于物理网卡。bridges
可关联多种接口:
ethernets
)bonds
)vlans
)vlans
必须指定父接口:父接口可以是:
ethernets
)bonds
)bridges
)network:
version: 2
ethernets:
eth0:
dhcp4: no
bridges:
br0:
interfaces: [eth0]
vlans:
br0.10: # 虚拟机管理网络
id: 10
link: br0
addresses: [192.168.10.1/24]
br0.20: # 虚拟机业务网络
id: 20
link: br0
addresses: [192.168.20.1/24]
network:
version: 2
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
bonds:
bond0:
interfaces: [eth0, eth1]
mode: active-backup
bridges:
br0:
interfaces: [bond0]
addresses: [10.0.0.10/24]
network:
version: 2
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
bonds:
bond0:
interfaces: [eth0, eth1]
mode: 802.3ad
bridges:
br0:
interfaces: [bond0]
vlans:
br0.100: # 管理网络
id: 100
link: br0
br0.200: # 业务网络
id: 200
link: br0
IP地址配置:
ethernets
)桥接后无需配置IP(由上层网桥管理)。bonds
)直接配置IP或作为网桥成员。bridges
)和VLAN(vlans
)可独立配置IP。STP协议:
bridges
)多接口连接时必须启用STP(stp: yes
),防止环路。VLAN标签:
父接口.VLAN ID
格式(如eth0.10
)。MTU一致性:
Netplan配置中的这四个关键字通过层级组合,可构建从简单到复杂的网络架构:
ethernets
:物理网卡,网络的基础。bonds
:聚合多个网卡,提供冗余或高带宽。bridges
:创建广播域,类似交换机。vlans
:在现有接口上划分虚拟网络,隔离流量。理解它们的关系后,你可以根据实际需求灵活组合,如“物理网卡→绑定→网桥→VLAN”的四层结构,满足企业级网络的高可用、隔离和灵活扩展需求。