Linux的systemd-networkd配置:以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)、网桥(Bridge)笔记250712

Linux的systemd-networkd配置:以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)、网桥(Bridge)笔记250712

在 systemd-networkd 中配置以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)和网桥(Bridge),需通过创建 .netdev(定义虚拟设备)和 .network(定义网络属性)配置文件实现。以下为详细配置指南,涵盖基础配置到高级拓扑(如 Bond + Bridge + VLAN),并附关键注意事项。


一、配置文件基础

  • 路径/etc/systemd/network/

  • 文件类型

    • .netdev:定义虚拟设备(Bond、VLAN、Bridge)
    • .network:配置 IP 地址、路由、绑定从属接口等
  • 优先级 :按文件名数字顺序生效(如 10-eth0.network20-bond0.netdev)。

  • 重载配置

    bash 复制代码
    systemctl restart systemd-networkd

二、以太网(Ethernet)配置

仅需 .network 文件,无需 .netdev
示例 :为 eth0 配置静态 IP

文件:10-eth0.network

ini 复制代码
[Match]
Name=eth0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8

💡 说明

  • Match 匹配物理接口名(如 eth0, enp3s0)。
  • 若需 DHCP,替换为 DHCP=ipv4

三、绑定(Bond)配置

聚合多网卡提升带宽或冗余。

1. 创建 Bond 设备

文件:20-bond0.netdev

ini 复制代码
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=802.3ad                 # 常用模式:802.3ad(LACP)、active-backup(主备)
TransmitHashPolicy=layer3+4  # 流量分发策略
MIIMonitorSec=1s             # 链路检测间隔
LACPTransmitRate=fast        # LACP 报文速率
2. 添加从属接口

文件:20-bond0-slaves.network

ini 复制代码
[Match]
Name=eth1 eth2               # 匹配多个物理接口

[Network]
Bond=bond0                   # 绑定到 bond0
3. 为 Bond 配置 IP

文件:30-bond0.network

ini 复制代码
[Match]
Name=bond0

[Network]
Address=10.0.0.5/24
BindCarrier=eth1 eth2        # 绑定物理接口状态

⚠️ 关键参数

  • Mode
    • balance-rr(轮询) | active-backup(主备) | 802.3ad(动态聚合)
  • MIIMonitorSec:链路检测频率(建议 ≤2s)。

四、虚拟局域网(VLAN)配置

在物理接口或 Bond 上创建 VLAN 子接口。

1. 定义 VLAN 设备

文件:40-vlan10.netdev

ini 复制代码
[NetDev]
Name=vlan10         # VLAN 接口名(自定义)
Kind=vlan

[VLAN]
Id=10               # VLAN ID(必需)
2. 关联父接口并配置 IP

文件:40-vlan10.network

ini 复制代码
[Match]
Name=vlan10

[Network]
# 指定父接口(物理网卡或 Bond)
VLAN=eth0.10        # 或 VLAN=bond0.10
Address=192.168.10.5/24

💡 注意

  • 父接口(如 eth0)需在 .network 文件中声明 VLAN=vlan10 以启用 VLAN 支持。
  • 避免同时使用 devvlan.parent(二者等价)。

五、网桥(Bridge)配置

用于连接虚拟机/容器或聚合多个网络接口。

1. 创建网桥设备

文件:30-br0.netdev

ini 复制代码
[NetDev]
Name=br0
Kind=bridge

[Bridge]
STP=false           # 禁用生成树协议(小型网络)
VLANFiltering=yes   # 启用 VLAN 过滤(若需 VLAN 支持)
2. 添加桥接端口

文件:30-br0-ports.network

ini 复制代码
[Match]
Name=eth3 bond0     # 支持物理接口或 Bond

[Network]
Bridge=br0          # 加入网桥
3. 为网桥配置 IP

文件:40-br0.network

ini 复制代码
[Match]
Name=br0

[Network]
Address=172.16.1.100/24
# 若需在网桥上承载 VLAN
VLAN=br0.20         # 需额外定义 VLAN 设备

⚠️ 高级场景

  • VLAN-aware 网桥
    • 启用 VLANFiltering=yes,并在 [BridgeVLAN] 段指定 VLAN 范围(如 VLAN=2-4094)。
  • 嵌套配置:将 Bond 加入网桥,再在网桥上创建 VLAN(见下文示例)。

六、高级拓扑示例:Bond + Bridge + VLAN

实现高可用与网络分段。

配置文件结构:
bash 复制代码
/etc/systemd/network/
├── 10-bond-slaves.network    # 绑定从属接口
├── 20-bond0.netdev           # 定义 Bond
├── 30-bond0.network          # Bond IP 配置
├── 40-br0.netdev             # 定义网桥
├── 50-br0-ports.network      # 将 Bond 加入网桥
├── 60-br0.network            # 网桥 IP 配置
└── 70-br0-vlan20.network     # 网桥上的 VLAN
关键步骤:
  1. Bond 配置20-bond0.netdev):

    ini 复制代码
    [NetDev]
    Name=bond0
    Kind=bond
    [Bond]
    Mode=802.3ad
  2. 网桥配置40-br0.netdev):

    ini 复制代码
    [NetDev]
    Name=br0
    Kind=bridge
    [Bridge]
    VLANFiltering=true
  3. 将 Bond 加入网桥50-br0-ports.network):

    ini 复制代码
    [Match]
    Name=bond0
    [Network]
    Bridge=br0
  4. 在网桥上创建 VLAN70-br0-vlan20.network):

    ini 复制代码
    [Match]
    Name=br0
    [Network]
    VLAN=br0.20
  5. 为 VLAN 配置 IP (新建 80-vlan20.network):

    ini 复制代码
    [Match]
    Name=br0.20
    [Network]
    Address=10.20.0.5/24

💡 验证命令

bash 复制代码
networkctl status bond0 br0 br0.20  # 查看设备状态
bridge vlan show                    # 检查网桥 VLAN 过滤

七、常见问题解决

  1. VLAN 无法通信

    • 检查父接口的 .network 文件是否包含 VLAN=vlanX
    • 若使用网桥,确认 VLANFiltering=yes 并重启服务。
  2. Bond 模式不生效

    • 确认交换机配置匹配(如 802.3ad 需启用 LACP)。
  3. 网桥未连接外部网络

    • 确保物理接口已加入网桥(Bridge=br0),且无独立 IP 配置。

最佳实践

  • 使用 systemd-analyze verify /etc/systemd/network/* 验证配置文件语法。
  • 复杂拓扑优先在测试环境验证,逐步叠加组件(物理接口 → Bond → 网桥 → VLAN)。






在 systemd-networkd 中配置以太网、绑定、VLAN 和网桥

systemd-networkd 是 systemd 生态系统的一部分,提供现代化的网络配置管理。下面详细介绍如何使用 systemd-networkd 配置各种网络组件。

目录结构概览

bash 复制代码
/etc/systemd/network/
├── 10-ethernet.network           # 基础以太网配置
├── 20-bond.netdev                # 绑定接口定义
├── 20-bond-slaves.network        # 绑定成员配置
├── 30-vlan.netdev                # VLAN 接口定义
├── 40-bridge.netdev              # 网桥接口定义
└── 40-bridge-ports.network       # 网桥成员配置

一、以太网 (Ethernet) 配置

1. 基本配置 (10-ethernet.network)

ini 复制代码
[Match]
Name=eth0

[Network]
DHCP=ipv4
# 静态IP配置示例
# Address=192.168.1.100/24
# Gateway=192.168.1.1
# DNS=8.8.8.8

2. 高级选项

ini 复制代码
[Match]
MACAddress=00:11:22:33:44:55

[Link]
MTUBytes=9000
RequiredForOnline=yes

[Network]
DHCP=no
Address=10.0.0.5/24

二、绑定 (Bond) 配置

1. 定义绑定接口 (20-bond.netdev)

ini 复制代码
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=802.3ad
TransmitHashPolicy=layer3+4
MIIMonitorSec=100ms
LACPTransmitRate=fast

2. 添加绑定成员 (20-bond-slaves.network)

ini 复制代码
# 文件1: 20-bond-slave-eth1.network
[Match]
Name=eth1

[Network]
Bond=bond0

# 文件2: 20-bond-slave-eth2.network
[Match]
Name=eth2

[Network]
Bond=bond0

3. 绑定接口网络配置 (25-bond.network)

ini 复制代码
[Match]
Name=bond0

[Network]
Address=192.168.10.5/24
Gateway=192.168.10.1
DNS=192.168.10.1

三、虚拟局域网 (VLAN) 配置

1. 定义 VLAN 接口 (30-vlan.netdev)

ini 复制代码
[NetDev]
Name=vlan100
Kind=vlan

[VLAN]
Id=100

2. VLAN 网络配置 (30-vlan.network)

ini 复制代码
[Match]
Name=vlan100

[Network]
Address=10.10.100.5/24
Gateway=10.10.100.1

3. 在绑定接口上创建 VLAN

ini 复制代码
# 30-vlan-on-bond.netdev
[NetDev]
Name=vlan200
Kind=vlan

[VLAN]
Id=200
Parent=bond0

四、网桥 (Bridge) 配置

1. 定义网桥接口 (40-bridge.netdev)

ini 复制代码
[NetDev]
Name=br0
Kind=bridge

[Bridge]
STP=yes
ForwardDelaySec=2
HelloTimeSec=1
MaxAgeSec=20

2. 添加网桥成员 (40-bridge-ports.network)

ini 复制代码
# 添加物理接口
[Match]
Name=eth3

[Network]
Bridge=br0

# 添加VLAN接口
[Match]
Name=vlan100

[Network]
Bridge=br0

3. 网桥网络配置 (45-bridge.network)

ini 复制代码
[Match]
Name=br0

[Network]
Address=172.16.0.10/24
DNS=172.16.0.1
# 或使用DHCP
# DHCP=ipv4

五、综合配置示例

场景:绑定 → VLAN → 网桥

ini 复制代码
# 1. 绑定配置 (20-bond.netdev)
[NetDev]
Name=trunk-bond
Kind=bond
[Bond]
Mode=802.3ad
LACPTransmitRate=fast

# 2. 绑定成员 (20-bond-slaves.network)
[Match]
Name=eth1
[Network]
Bond=trunk-bond

[Match]
Name=eth2
[Network]
Bond=trunk-bond

# 3. VLAN配置 (30-vlan.netdev)
[NetDev]
Name=mgmt-vlan
Kind=vlan
[VLAN]
Id=100
Parent=trunk-bond

# 4. 网桥配置 (40-bridge.netdev)
[NetDev]
Name=br-mgmt
Kind=bridge
[Bridge]
STP=no

# 5. 添加VLAN到网桥 (40-bridge-ports.network)
[Match]
Name=mgmt-vlan
[Network]
Bridge=br-mgmt

# 6. 网桥网络配置 (45-bridge.network)
[Match]
Name=br-mgmt
[Network]
Address=10.20.30.40/24
Gateway=10.20.30.1
DNS=10.20.30.1

六、配置文件命名规则与顺序

systemd-networkd 按字典序处理配置文件,建议使用数字前缀:

bash 复制代码
10-*.network       # 基础接口配置
20-*.netdev        # 虚拟设备定义
20-*.network       # 虚拟设备成员
30-*.network       # 虚拟设备网络配置
40-*.netdev        # 上层虚拟设备
40-*.network       # 上层设备成员
50-*.network       # 最终网络配置

七、管理命令与调试

1. 启动/重启服务

bash 复制代码
systemctl restart systemd-networkd

2. 查看设备状态

bash 复制代码
networkctl list
networkctl status br0

3. 检查绑定状态

bash 复制代码
cat /proc/net/bonding/bond0

4. 查看网桥信息

bash 复制代码
bridge link
bridge fdb show

5. 检查 VLAN 配置

bash 复制代码
ip -d link show

6. 日志查看

bash 复制代码
journalctl -u systemd-networkd -f

八、高级配置技巧

1. 启用巨帧

ini 复制代码
[Link]
MTUBytes=9000

2. VLAN 过滤

ini 复制代码
# 在网桥成员上配置
[BridgePort]
VLAN=100-200
PVID=100

3. DHCP 高级选项

ini 复制代码
[DHCP]
RouteMetric=100
UseDNS=yes
UseDomains=yes

4. IPv6 配置

ini 复制代码
[Network]
DHCP=ipv6
Address=2001:db8::1/64
Gateway=2001:db8::fffe

5. 多地址支持

ini 复制代码
[Network]
Address=192.168.1.100/24
Address=10.0.0.100/24
Address=2001:db8::100/64

九、故障排除指南

1. 接口未激活

  • 检查 [Match] 部分是否正确
  • 验证物理连接状态 ethtool eth0
  • 查看日志 journalctl -u systemd-networkd

2. VLAN 流量不通

  • 确认交换机端口配置为 trunk
  • 检查 VLAN ID 是否匹配
  • 验证父接口状态

3. 绑定接口故障

  • 检查 /proc/net/bonding/bond0
  • 确认 MIIMonitor 设置
  • 验证链路聚合协议 (LACP) 配置

4. 网桥问题

  • 使用 bridge fdb show 检查 MAC 表
  • 验证 STP 状态 bridge stp show
  • 检查端口状态 bridge link

十、完整配置示例

企业级网络拓扑

kotlin 复制代码
物理接口: eth1, eth2 → 绑定接口 bond0
绑定接口 bond0 → VLAN 100 (管理), VLAN 200 (数据)
VLAN 100 → 网桥 br-mgmt
VLAN 200 → 网桥 br-data

配置文件结构

kotlin 复制代码
/etc/systemd/network/
├── 10-bond-slave-eth1.network
├── 10-bond-slave-eth2.network
├── 20-bond.netdev
├── 30-vlan-mgmt.netdev
├── 30-vlan-data.netdev
├── 35-vlan-ports.network
├── 40-bridge-mgmt.netdev
├── 40-bridge-data.netdev
├── 45-bridge-mgmt.network
└── 45-bridge-data.network

文件内容

20-bond.netdev:

ini 复制代码
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=802.3ad
LACPTransmitRate=fast
MIIMonitorSec=100ms

30-vlan-mgmt.netdev:

ini 复制代码
[NetDev]
Name=mgmt-vlan
Kind=vlan

[VLAN]
Id=100
Parent=bond0

40-bridge-mgmt.netdev:

ini 复制代码
[NetDev]
Name=br-mgmt
Kind=bridge

[Bridge]
STP=yes
ForwardDelaySec=2

45-bridge-mgmt.network:

ini 复制代码
[Match]
Name=br-mgmt

[Network]
Address=10.100.0.5/24
Gateway=10.100.0.1
DNS=10.100.0.1

十一、最佳实践建议

  1. 命名规范

    • 使用描述性名称 (如 br-mgmt 替代 br0)
    • 保持命名一致性
  2. 配置顺序

    graph LR A[物理接口] --> B[绑定接口] B --> C[VLAN接口] C --> D[网桥接口] D --> E[IP配置]
  3. 安全增强

    ini 复制代码
    [Bridge]
    VLANFiltering=yes
  4. 性能优化

    ini 复制代码
    [Link]
    MTUBytes=9000
    TCPCongestionControl=bbr
  5. 文档化

    ini 复制代码
    # /etc/systemd/network/README
    # 网络配置说明
    # bond0: 聚合 eth1 和 eth2
    # br-mgmt: 承载管理流量 (VLAN100)
    # br-data: 承载数据流量 (VLAN200)

十二、迁移与备份

1. 备份配置

bash 复制代码
tar czf network-config-backup-$(date +%F).tgz /etc/systemd/network/

2. 配置重置

bash 复制代码
rm /etc/systemd/network/* && systemctl restart systemd-networkd

3. 转换传统配置

bash 复制代码
# 将 ifupdown 配置转换为 systemd-networkd
ifupdown2networkd -i /etc/network/interfaces

通过 systemd-networkd,您可以构建从简单到复杂的企业级网络架构,其声明式配置易于版本控制和自动化管理。







在 systemd-networkd 中配置以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)和网桥(Bridge),需通过创建 .netdev(定义虚拟设备)和 .network(定义网络属性)配置文件实现。以下为详细配置指南,涵盖基础配置到高级拓扑(如 Bond + Bridge + VLAN),并附关键注意事项。


一、配置文件基础

  • 路径/etc/systemd/network/

  • 文件类型

    • .netdev:定义虚拟设备(Bond、VLAN、Bridge)
    • .network:配置 IP 地址、路由、绑定从属接口等
  • 优先级 :按文件名数字顺序生效(如 10-eth0.network20-bond0.netdev)。

  • 重载配置

    bash 复制代码
    systemctl restart systemd-networkd

二、以太网(Ethernet)配置

仅需 .network 文件,无需 .netdev
示例 :为 eth0 配置静态 IP

文件:10-eth0.network

ini 复制代码
[Match]
Name=eth0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8

💡 说明

  • Match 匹配物理接口名(如 eth0, enp3s0)。
  • 若需 DHCP,替换为 DHCP=ipv4

三、绑定(Bond)配置

聚合多网卡提升带宽或冗余。

1. 创建 Bond 设备

文件:20-bond0.netdev

ini 复制代码
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=802.3ad                 # 常用模式:802.3ad(LACP)、active-backup(主备)
TransmitHashPolicy=layer3+4  # 流量分发策略
MIIMonitorSec=1s             # 链路检测间隔
LACPTransmitRate=fast        # LACP 报文速率
2. 添加从属接口

文件:20-bond0-slaves.network

ini 复制代码
[Match]
Name=eth1 eth2               # 匹配多个物理接口

[Network]
Bond=bond0                   # 绑定到 bond0
3. 为 Bond 配置 IP

文件:30-bond0.network

ini 复制代码
[Match]
Name=bond0

[Network]
Address=10.0.0.5/24
BindCarrier=eth1 eth2        # 绑定物理接口状态

⚠️ 关键参数

  • Mode
    • balance-rr(轮询) | active-backup(主备) | 802.3ad(动态聚合)
  • MIIMonitorSec:链路检测频率(建议 ≤2s)。

四、虚拟局域网(VLAN)配置

在物理接口或 Bond 上创建 VLAN 子接口。

1. 定义 VLAN 设备

文件:40-vlan10.netdev

ini 复制代码
[NetDev]
Name=vlan10         # VLAN 接口名(自定义)
Kind=vlan

[VLAN]
Id=10               # VLAN ID(必需)
2. 关联父接口并配置 IP

文件:40-vlan10.network

ini 复制代码
[Match]
Name=vlan10

[Network]
# 指定父接口(物理网卡或 Bond)
VLAN=eth0.10        # 或 VLAN=bond0.10
Address=192.168.10.5/24

💡 注意

  • 父接口(如 eth0)需在 .network 文件中声明 VLAN=vlan10 以启用 VLAN 支持。
  • 避免同时使用 devvlan.parent(二者等价)。

五、网桥(Bridge)配置

用于连接虚拟机/容器或聚合多个网络接口。

1. 创建网桥设备

文件:30-br0.netdev

ini 复制代码
[NetDev]
Name=br0
Kind=bridge

[Bridge]
STP=false           # 禁用生成树协议(小型网络)
VLANFiltering=yes   # 启用 VLAN 过滤(若需 VLAN 支持)
2. 添加桥接端口

文件:30-br0-ports.network

ini 复制代码
[Match]
Name=eth3 bond0     # 支持物理接口或 Bond

[Network]
Bridge=br0          # 加入网桥
3. 为网桥配置 IP

文件:40-br0.network

ini 复制代码
[Match]
Name=br0

[Network]
Address=172.16.1.100/24
# 若需在网桥上承载 VLAN
VLAN=br0.20         # 需额外定义 VLAN 设备

⚠️ 高级场景

  • VLAN-aware 网桥
    • 启用 VLANFiltering=yes,并在 [BridgeVLAN] 段指定 VLAN 范围(如 VLAN=2-4094)。
  • 嵌套配置:将 Bond 加入网桥,再在网桥上创建 VLAN(见下文示例)。

六、高级拓扑示例:Bond + Bridge + VLAN

实现高可用与网络分段。

配置文件结构:
bash 复制代码
/etc/systemd/network/
├── 10-bond-slaves.network    # 绑定从属接口
├── 20-bond0.netdev           # 定义 Bond
├── 30-bond0.network          # Bond IP 配置
├── 40-br0.netdev             # 定义网桥
├── 50-br0-ports.network      # 将 Bond 加入网桥
├── 60-br0.network            # 网桥 IP 配置
└── 70-br0-vlan20.network     # 网桥上的 VLAN
关键步骤:
  1. Bond 配置20-bond0.netdev):

    ini 复制代码
    [NetDev]
    Name=bond0
    Kind=bond
    [Bond]
    Mode=802.3ad
  2. 网桥配置40-br0.netdev):

    ini 复制代码
    [NetDev]
    Name=br0
    Kind=bridge
    [Bridge]
    VLANFiltering=true
  3. 将 Bond 加入网桥50-br0-ports.network):

    ini 复制代码
    [Match]
    Name=bond0
    [Network]
    Bridge=br0
  4. 在网桥上创建 VLAN70-br0-vlan20.network):

    ini 复制代码
    [Match]
    Name=br0
    [Network]
    VLAN=br0.20
  5. 为 VLAN 配置 IP (新建 80-vlan20.network):

    ini 复制代码
    [Match]
    Name=br0.20
    [Network]
    Address=10.20.0.5/24

💡 验证命令

bash 复制代码
networkctl status bond0 br0 br0.20  # 查看设备状态
bridge vlan show                    # 检查网桥 VLAN 过滤

七、常见问题解决

  1. VLAN 无法通信

    • 检查父接口的 .network 文件是否包含 VLAN=vlanX
    • 若使用网桥,确认 VLANFiltering=yes 并重启服务。
  2. Bond 模式不生效

    • 确认交换机配置匹配(如 802.3ad 需启用 LACP)。
  3. 网桥未连接外部网络

    • 确保物理接口已加入网桥(Bridge=br0),且无独立 IP 配置。

最佳实践

  • 使用 systemd-analyze verify /etc/systemd/network/* 验证配置文件语法。
  • 复杂拓扑优先在测试环境验证,逐步叠加组件(物理接口 → Bond → 网桥 → VLAN)。






使用 systemd-networkd 配置 Ethernet、Bond、VLAN 和 Bridge

systemd-networkd 是现代化的 Linux 网络管理服务,提供简单高效的网络配置方式。以下是针对不同网络组件的完整配置指南:

graph LR A[物理网卡] -->|Bonding| B(绑定接口) A -->|直接使用| C[VLAN] B -->|承载| C C -->|桥接| D[网桥] D -->|IP配置| E[网络访问]

一、配置文件结构

bash 复制代码
/etc/systemd/network/
├── 10-ethernet.network       # 物理网卡配置
├── 20-bond.netdev            # 绑定接口定义
├── 21-bond-slave.network     # 绑定从属配置
├── 30-vlan.netdev            # VLAN接口定义
├── 31-vlan.network           # VLAN网络配置
├── 40-bridge.netdev          # 网桥定义
└── 41-bridge-slave.network   # 网桥从属配置

二、物理以太网卡 (Ethernet) 配置

示例:/etc/systemd/network/10-enp1s0.network

ini 复制代码
[Match]
Name=enp1s0

[Network]
# 使用 DHCP
DHCP=ipv4

# 静态 IP 配置(可选)
# Address=192.168.1.100/24
# Gateway=192.168.1.1
# DNS=8.8.8.8

三、绑定接口 (Bond) 配置

1. 创建绑定接口:/etc/systemd/network/20-bond0.netdev

ini 复制代码
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=802.3ad
TransmitHashPolicy=layer3+4
MIIMonitorSec=100ms
LACPTransmitRate=fast

2. 配置绑定从属:/etc/systemd/network/21-bond-slaves.network

ini 复制代码
# 从属接口 1
[Match]
Name=enp2s0

[Network]
Bond=bond0

# 从属接口 2
[Match]
Name=enp3s0

[Network]
Bond=bond0

3. 绑定接口网络配置:/etc/systemd/network/25-bond0.network

ini 复制代码
[Match]
Name=bond0

[Network]
DHCP=ipv4

四、虚拟局域网 (VLAN) 配置

1. 创建 VLAN 接口:/etc/systemd/network/30-vlan10.netdev

ini 复制代码
[NetDev]
Name=vlan10
Kind=vlan

[VLAN]
Id=10

2. VLAN 网络配置:/etc/systemd/network/31-vlan10.network

ini 复制代码
[Match]
Name=vlan10

[Network]
Address=10.10.10.2/24
Gateway=10.10.10.1
DNS=10.10.10.53

五、网桥 (Bridge) 配置

1. 创建网桥:/etc/systemd/network/40-br0.netdev

ini 复制代码
[NetDev]
Name=br0
Kind=bridge

[Bridge]
STP=no
ForwardDelaySec=0
HelloTimeSec=2
MaxAgeSec=20
AgeingTimeSec=300

2. 添加接口到网桥:/etc/systemd/network/41-bridge-slaves.network

ini 复制代码
# 添加物理接口
[Match]
Name=enp4s0

[Network]
Bridge=br0

# 添加 VLAN 接口
[Match]
Name=vlan10

[Network]
Bridge=br0

3. 网桥网络配置:/etc/systemd/network/45-br0.network

ini 复制代码
[Match]
Name=br0

[Network]
DHCP=ipv4

# 静态 IP 配置
# Address=192.168.1.200/24
# Gateway=192.168.1.1

六、高级组合配置示例

场景:Bonding + VLAN + Bridge

bash 复制代码
# 绑定接口 (bond0)
/etc/systemd/network/20-bond0.netdev
/etc/systemd/network/21-bond-slaves.network

# 在绑定上创建 VLAN
/etc/systemd/network/30-vlan100.netdev:
[NetDev]
Name=vlan100
Kind=vlan
[VLAN]
Id=100

# 将 VLAN 加入网桥
/etc/systemd/network/40-br-vlan100.netdev:
[NetDev]
Name=br-vlan100
Kind=bridge

/etc/systemd/network/41-bridge-vlan100.network:
[Match]
Name=vlan100
[Network]
Bridge=br-vlan100

# 网桥 IP 配置
/etc/systemd/network/45-br-vlan100.network:
[Match]
Name=br-vlan100
[Network]
Address=10.100.0.1/24

七、配置优先级说明

文件前缀 配置类型 处理顺序
10-* 物理接口 最先处理
20-* Bond/VLAN 次级处理
30-* 虚拟接口 再次级处理
40-* 网桥 最后处理

八、管理命令

1. 启用并启动服务

bash 复制代码
sudo systemctl enable --now systemd-networkd
sudo systemctl enable --now systemd-resolved  # DNS 解析服务

2. 检查配置状态

bash 复制代码
# 查看网络设备状态
networkctl list

# 查看特定设备详情
networkctl status br0

# 检查绑定状态
cat /proc/net/bonding/bond0

# 查看网桥信息
bridge link

3. 重载配置

bash 复制代码
# 测试配置
sudo networkctl reconfigure bond0

# 完全重载
sudo systemctl restart systemd-networkd

九、故障排除

1. 查看日志

bash 复制代码
journalctl -u systemd-networkd -f

2. 调试命令

bash 复制代码
# 查看所有网络接口
ip -br link show

# 检查路由
ip route show

# 检查ARP表
ip neigh show

3. 常见问题解决

  • 接口未激活 :检查 [Match] 部分名称是否正确
  • VLAN 不通:确认交换机端口配置为 trunk 模式
  • 网桥 STP 问题 :禁用 STP(STP=no)或调整时间参数
  • 绑定模式不工作:确认网卡和交换机支持所选绑定模式

十、最佳实践

  1. 命名规范

    ini 复制代码
    [Match]
    Name=enp* eth*  # 使用通配符匹配接口
  2. 禁用未使用服务

    bash 复制代码
    sudo systemctl disable --now NetworkManager
  3. 配置备份

    bash 复制代码
    # 备份整个配置目录
    sudo cp -r /etc/systemd/network /etc/systemd/network.bak
  4. 性能优化

    ini 复制代码
    # 在 .network 文件中
    [Link]
    RequiredForOnline=no  # 避免接口延迟启动
  5. 安全增强

    ini 复制代码
    [Network]
    IPv6AcceptRA=no       # 禁用 IPv6 路由通告
    LLMNR=no              # 禁用链路本地多播名称解析

通过以上配置,您可以构建从简单到复杂的各种网络拓扑。systemd-networkd 的声明式配置方式提供了稳定可靠的网络管理方案,特别适合服务器和无头系统使用。







在 systemd-networkd 中配置以太网、绑定(Bond)、虚拟局域网(VLAN)和网桥(Bridge)需要创建 .netdev(定义虚拟设备)和 .network(配置网络参数)文件。以下是详细配置指南:


1. 以太网 (Ethernet)

配置文件 : /etc/systemd/network/20-wired.network

ini 复制代码
[Match]
Name=eth0

[Network]
# 动态IP (DHCP)
DHCP=ipv4

# 或静态IP
# Address=192.168.1.10/24
# Gateway=192.168.1.1
# DNS=8.8.8.8

2. 绑定 (Bond)

将多个物理接口聚合成一个逻辑接口(如 bond0)。

步骤 1: 创建 Bond 设备

配置文件 : /etc/systemd/network/10-bond.netdev

ini 复制代码
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=active-backup  # 模式:active-backup, balance-rr, 802.3ad 等
Miimon=100          # 链路监测间隔(ms)
步骤 2: 添加从属接口

配置文件 : /etc/systemd/network/20-bond-slaves.network

ini 复制代码
[Match]
Name=eth0 eth1      # 需绑定的物理接口

[Network]
Bond=bond0          # 关联到 bond0
步骤 3: 配置 Bond IP

配置文件 : /etc/systemd/network/30-bond-ip.network

ini 复制代码
[Match]
Name=bond0

[Network]
DHCP=ipv4
# 或静态IP
# Address=192.168.1.10/24
# Gateway=192.168.1.1

3. 虚拟局域网 (VLAN)

在物理接口上创建 VLAN 子接口(如 eth0.100)。

步骤 1: 创建 VLAN 设备

配置文件 : /etc/systemd/network/10-vlan100.netdev

ini 复制代码
[NetDev]
Name=eth0.100
Kind=vlan

[VLAN]
Id=100              # VLAN ID
步骤 2: 配置物理接口承载 VLAN

配置文件 : /etc/systemd/network/20-vlan-host.network

ini 复制代码
[Match]
Name=eth0           # 物理接口

[Network]
VLAN=eth0.100       # 承载的 VLAN 设备
步骤 3: 配置 VLAN IP

配置文件 : /etc/systemd/network/30-vlan-ip.network

ini 复制代码
[Match]
Name=eth0.100

[Network]
Address=192.168.100.10/24
Gateway=192.168.100.1

4. 网桥 (Bridge)

将多个接口桥接成一个二层网络(如 br0)。

步骤 1: 创建网桥设备

配置文件 : /etc/systemd/network/10-bridge.netdev

ini 复制代码
[NetDev]
Name=br0
Kind=bridge
步骤 2: 添加桥接成员

配置文件 : /etc/systemd/network/20-bridge-slaves.network

ini 复制代码
[Match]
Name=eth0           # 物理接口或 VLAN

[Network]
Bridge=br0          # 加入网桥
步骤 3: 配置网桥 IP

配置文件 : /etc/systemd/network/30-bridge-ip.network

ini 复制代码
[Match]
Name=br0

[Network]
DHCP=ipv4
# 或静态IP
# Address=192.168.1.10/24
# Gateway=192.168.1.1

完整示例:组合配置

目标

  • Bond 接口 bond0(成员 eth0, eth1
  • bond0 上创建 VLAN bond0.100
  • 将 VLAN 加入网桥 br0
文件结构
  1. /etc/systemd/network/10-bond.netdev → 定义 bond0
  2. /etc/systemd/network/20-bond-slaves.network → 绑定 eth0,eth1bond0
  3. /etc/systemd/network/30-vlan100.netdev → 在 bond0 上创建 VLAN 100
  4. /etc/systemd/network/40-bridge.netdev → 定义网桥 br0
  5. /etc/systemd/network/50-bridge-add.network → 将 bond0.100 加入 br0
  6. /etc/systemd/network/60-bridge-ip.network → 为 br0 配置 IP

关键命令

bash 复制代码
# 重启服务生效
sudo systemctl restart systemd-networkd

# 查看设备状态
networkctl list

# 检查网桥
bridge link

# 检查 Bond
cat /proc/net/bonding/bond0

注意事项

  1. 文件名前缀数字(如 10-, 20-)决定处理顺序。
  2. 物理接口(如 eth0)无需单独配置 IP,它们作为从属设备工作。
  3. 使用 systemd-networkd 时,需禁用其他网络服务(如 NetworkManager)。

通过以上配置,可灵活构建复杂网络拓扑。根据实际需求调整模式(如 Bond 的负载均衡策略)和参数。







systemd-networkd 中配置以太网、绑定、VLAN 和网桥需要创建一系列 .netdev.network 配置文件。以下是完整的配置指南,假设使用两个物理接口 eth0eth1


网络拓扑设计

graph LR eth0 --> bond0 eth1 --> bond0 bond0 --> vlan10 vlan10 --> br0 br0 --> IP配置

配置文件目录

所有配置文件位于 /etc/systemd/network/,按数字前缀排序执行:

bash 复制代码
/etc/systemd/network/
├── 10-eth0.network
├── 10-eth1.network
├── 20-bond0.netdev
├── 30-vlan10.netdev
├── 40-br0.netdev
├── 50-vlan10.network
└── 60-br0.network

1. 以太网接口配置

物理接口 eth0 (10-eth0.network):

ini 复制代码
[Match]
Name=eth0

[Network]
# 仅作为绑定从属,不配置IP
Bond=bond0

物理接口 eth1 (10-eth1.network):

ini 复制代码
[Match]
Name=eth1

[Network]
Bond=bond0

2. 绑定接口配置

创建绑定 bond0 (20-bond0.netdev):

ini 复制代码
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=802.3ad            # 链路聚合模式
LACPTransmitRate=fast   # 快速LACP
MIIMonitorSec=100ms     # 链路检测间隔
TransmitHashPolicy=layer3+4 # 流量分发策略

绑定网络参数 (可选,这里不配IP):

ini 复制代码
# 无需单独.network文件,IP将在网桥配置

3. VLAN 配置

创建 VLAN 接口 (30-vlan10.netdev):

ini 复制代码
[NetDev]
Name=vlan10
Kind=vlan

[VLAN]
Id=10                   # VLAN ID
Parent=bond0            # 基于绑定接口

关联 VLAN 到网桥 (50-vlan10.network):

ini 复制代码
[Match]
Name=vlan10

[Network]
Bridge=br0              # 加入网桥

4. 网桥配置

创建网桥 br0 (40-br0.netdev):

ini 复制代码
[NetDev]
Name=br0
Kind=bridge

[Bridge]
STP=on                  # 启用生成树
ForwardDelaySec=2       # 转发延迟
VLANFiltering=on        # 启用VLAN过滤

网桥 IP 配置 (60-br0.network):

ini 复制代码
[Match]
Name=br0

[Network]
Address=192.168.10.100/24
Gateway=192.168.10.1
DNS=8.8.8.8
DNS=8.8.4.4

# 可选DHCP
# DHCP=ipv4

5. 高级配置选项

VLAN 过滤规则

40-br0.netdev 添加:

ini 复制代码
[Bridge]
VLANFiltering=on
# 允许VLAN 10和20通过
BridgeVLAN=10
BridgeVLAN=20
网桥端口优先级

50-vlan10.network 添加:

ini 复制代码
[Bridge]
Priority=32             # 端口优先级(0-63)
Cost=200                # 路径成本

6. 应用配置

bash 复制代码
# 重启服务
sudo systemctl restart systemd-networkd

# 查看状态
networkctl list
bridge link
ip -d link show br0

7. 完整配置验证

bash 复制代码
# 1. 检查绑定状态
cat /proc/net/bonding/bond0

# 2. 验证VLAN
ip -d link show vlan10 | grep vlan

# 3. 检查网桥
bridge vlan show
bridge fdb show br0

# 4. 测试连通性
ping -I br0 192.168.10.1

8. 故障排除技巧

常见问题解决:
  1. 绑定接口不工作

    bash 复制代码
    journalctl -u systemd-networkd | grep bond0
    cat /sys/class/net/bond0/bonding/mode
  2. VLAN 流量不通

    bash 复制代码
    bridge vlan show
    # 确保物理接口允许VLAN
    bridge vlan add vid 10 dev eth0
  3. STP 阻塞端口

    bash 复制代码
    bridge link show | grep blocked
    # 调整端口优先级
    bridge link set dev vlan10 priority 32

9. 持久化与启动

所有配置已在 /etc/systemd/network/ 永久保存。验证重启:

bash 复制代码
sudo reboot
networkctl status br0

关键点:配置文件按数字前缀顺序处理,确保依赖关系正确(先创建设备后配置网络)。


这种配置适用于:

  • 服务器高可用网络
  • KVM/LXC 虚拟化平台
  • 复杂网络隔离环境
  • 需要链路聚合+VLAN+网桥的融合场景






在 systemd-networkd 中配置以太网、绑定(Bond)、虚拟局域网(VLAN)和网桥(Bridge)需要创建 .netdev.network 配置文件。以下分步骤详解配置方法:


1. 准备工作

  • 配置文件位置/etc/systemd/network/

  • 文件命名规则<优先级>-<名称>.<类型>(如 10-eth0.network

  • 启用服务

    bash 复制代码
    sudo systemctl enable --now systemd-networkd

2. 以太网(Ethernet)配置

示例 :为 eth0 配置静态 IP

创建文件 /etc/systemd/network/10-eth0.network

ini 复制代码
[Match]
Name=eth0

[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
DNS=8.8.8.8

3. 绑定(Bond)配置

步骤 1:创建 Bond 设备

创建文件 /etc/systemd/network/20-bond0.netdev

ini 复制代码
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=active-backup      # 绑定模式(如 active-backup、802.3ad)
MIIMonitorSec=1s        # 链路检测间隔
PrimaryReselectPolicy=always
步骤 2:添加从属接口(如 eth1, eth2)

创建文件 /etc/systemd/network/21-eth1.network

ini 复制代码
[Match]
Name=eth1

[Network]
Bond=bond0

创建文件 /etc/systemd/network/22-eth2.network(类似 eth1)。

步骤 3:配置 Bond 的网络

创建文件 /etc/systemd/network/30-bond0.network

ini 复制代码
[Match]
Name=bond0

[Network]
Address=192.168.2.10/24
Gateway=192.168.2.1

4. 虚拟局域网(VLAN)配置

步骤 1:创建 VLAN 设备

eth0 上创建 VLAN ID 10:

创建文件 /etc/systemd/network/40-vlan10.netdev

ini 复制代码
[NetDev]
Name=vlan10
Kind=vlan

[VLAN]
Id=10
步骤 2:配置父接口(eth0)

修改 /etc/systemd/network/10-eth0.network,添加:

ini 复制代码
[Network]
VLAN=vlan10  # 声明父接口承载此 VLAN
步骤 3:配置 VLAN 网络

创建文件 /etc/systemd/network/50-vlan10.network

ini 复制代码
[Match]
Name=vlan10

[Network]
Address=192.168.10.10/24

5. 网桥(Bridge)配置

步骤 1:创建网桥设备

创建文件 /etc/systemd/network/60-br0.netdev

ini 复制代码
[NetDev]
Name=br0
Kind=bridge

[Bridge]
STP=on      # 启用生成树协议
步骤 2:添加桥接接口(如 eth3)

创建文件 /etc/systemd/network/61-eth3.network

ini 复制代码
[Match]
Name=eth3

[Network]
Bridge=br0  # 将此接口加入网桥
步骤 3:配置网桥网络

创建文件 /etc/systemd/network/70-br0.network

ini 复制代码
[Match]
Name=br0

[Network]
Address=192.168.3.10/24

6. 应用配置

bash 复制代码
sudo networkctl reload  # 重新加载配置
sudo networkctl status  # 检查状态

关键说明

  1. 文件优先级 :systemd 按文件名顺序处理配置(如 10-... 优先于 20-...)。

  2. 依赖关系

    • Bond/VLAN/网桥需先定义 .netdev,再通过 .network 绑定接口。
    • 父接口(如 Bond 的从属接口)不应配置 IP,由聚合接口管理。
  3. 验证工具

    bash 复制代码
    networkctl list           # 列出所有设备
    networkctl status bond0   # 查看 bond0 状态
    ip addr show vlan10       # 检查 VLAN 接口
    bridge link               # 查看网桥成员

注意:若接口被其他服务管理(如 NetworkManager),需先禁用冲突服务。







systemd-networkd 中配置以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)和网桥(Bridge)需要创建 .network.netdev.link 文件。以下是详细配置步骤:


1. 以太网 (Ethernet)

配置静态 IP :创建 /etc/systemd/network/20-wired.network

ini 复制代码
[Match]
Name=eth0  # 替换为实际接口名

[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
DNS=8.8.8.8

DHCP 配置

ini 复制代码
[Match]
Name=eth0

[Network]
DHCP=ipv4

2. 绑定 (Bond)

步骤 1:创建绑定接口

创建 /etc/systemd/network/10-bond0.netdev

ini 复制代码
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=active-backup  # 模式:active-backup/balance-rr/802.3ad 等
MIIMonitorSec=1s    # 链路检测间隔

步骤 2:配置绑定接口网络

创建 /etc/systemd/network/20-bond0.network

ini 复制代码
[Match]
Name=bond0

[Network]
Address=192.168.1.20/24
Gateway=192.168.1.1

步骤 3:添加从属接口

创建 /etc/systemd/network/30-bond-slave.network

ini 复制代码
[Match]
Name=eth1 eth2  # 绑定成员接口

[Network]
Bond=bond0

3. 虚拟局域网 (VLAN)

步骤 1:创建 VLAN 接口

创建 /etc/systemd/network/10-vlan100.netdev

ini 复制代码
[NetDev]
Name=vlan100
Kind=vlan

[VLAN]
Id=100  # VLAN ID

步骤 2:配置 VLAN 网络

创建 /etc/systemd/network/20-vlan100.network

ini 复制代码
[Match]
Name=vlan100

[Network]
Address=192.168.100.10/24

步骤 3:绑定到物理接口

在父接口配置中启用 VLAN(如 /etc/systemd/network/30-eth0.network):

ini 复制代码
[Match]
Name=eth0

[Network]
VLAN=vlan100  # 关联 VLAN

4. 网桥 (Bridge)

步骤 1:创建网桥接口

创建 /etc/systemd/network/10-br0.netdev

ini 复制代码
[NetDev]
Name=br0
Kind=bridge

[Bridge]
STP=on  # 生成树协议

步骤 2:配置网桥网络

创建 /etc/systemd/network/20-br0.network

ini 复制代码
[Match]
Name=br0

[Network]
Address=192.168.1.30/24
Gateway=192.168.1.1

步骤 3:添加成员接口(如 eth0)

创建 /etc/systemd/network/30-bridge-port.network

ini 复制代码
[Match]
Name=eth0  # 网桥成员接口

[Network]
Bridge=br0  # 加入网桥

关键命令

  1. 应用配置

    bash 复制代码
    sudo systemctl restart systemd-networkd
  2. 检查状态

    bash 复制代码
    networkctl list
    networkctl status bond0
    ip addr show vlan100

配置文件优先级

  • 文件按字典序排序(如 10-name.netdev 优先于 20-name.network)。
  • 使用 [Match] 部分精确匹配接口。

注意事项

  • 禁用其他网络服务(如 NetworkManager):

    bash 复制代码
    sudo systemctl stop NetworkManager
    sudo systemctl disable NetworkManager
  • 复杂场景(如绑定+VLAN)需组合配置:

    • 绑定接口 bond0 → 添加 VLAN bond0.100 → 加入网桥 br0

通过以上配置,systemd-networkd 可实现灵活的网络拓扑管理。







systemd-networkd 中配置以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)和网桥(Bridge)需要创建 .network.netdev 配置文件。以下是完整配置指南:


1. 前置准备

bash 复制代码
# 停止并禁用 NetworkManager
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager

# 启用 systemd-networkd 和 systemd-resolved(DNS)
sudo systemctl enable --now systemd-networkd
sudo systemctl enable --now systemd-resolved
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

2. 配置文件目录

所有配置位于 /etc/systemd/network/,文件命名规范:

  • .netdev:创建虚拟设备(Bond/VLAN/Bridge)
  • .network:配置网络接口参数(IP/DHCP 等)

3. 配置示例

(1) 以太网 (Ethernet)
bash 复制代码
# /etc/systemd/network/20-wired.network
[Match]
Name=enp1s0

[Network]
DHCP=ipv4
# 静态 IP 配置示例:
# Address=192.168.1.10/24
# Gateway=192.168.1.1
# DNS=8.8.8.8

(2) 绑定 (Bond)

将多个物理网卡绑定为单一逻辑接口(高可用/负载均衡)

步骤 1:创建 Bond 设备

bash 复制代码
# /etc/systemd/network/10-bond0.netdev
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=active-backup       # 模式:active-backup(1), balance-rr(0)
MIIMonitorSec=1s         # 链路检测间隔
PrimaryReselectPolicy=always

步骤 2:将物理网卡加入 Bond

bash 复制代码
# /etc/systemd/network/20-bond0-slave1.network
[Match]
Name=enp1s0

[Network]
Bond=bond0
bash 复制代码
# /etc/systemd/network/20-bond0-slave2.network
[Match]
Name=enp2s0

[Network]
Bond=bond0

步骤 3:配置 Bond IP

bash 复制代码
# /etc/systemd/network/30-bond0.network
[Match]
Name=bond0

[Network]
DHCP=ipv4
# 静态 IP:
# Address=192.168.1.20/24
# Gateway=192.168.1.1

(3) 虚拟局域网 (VLAN)

在物理接口/Bond 上创建虚拟子网

bash 复制代码
# /etc/systemd/network/40-vlan100.netdev
[NetDev]
Name=vlan100
Kind=vlan

[VLAN]
Id=100                   # VLAN ID
bash 复制代码
# /etc/systemd/network/50-vlan100.network
[Match]
Name=vlan100

[Network]
Address=192.168.100.10/24
# 若需通过主接口路由:
# VLAN=bond0.100         # 关联到 bond0 的 VLAN

(4) 网桥 (Bridge)

连接虚拟机/容器到物理网络

步骤 1:创建网桥设备

bash 复制代码
# /etc/systemd/network/60-br0.netdev
[NetDev]
Name=br0
Kind=bridge

[Bridge]
STP=off                  # 生成树协议
ForwardDelay=0

步骤 2:将物理接口加入网桥

bash 复制代码
# /etc/systemd/network/70-br0-slave.network
[Match]
Name=bond0               # 或 enp1s0

[Network]
Bridge=br0               # 将此接口加入网桥

步骤 3:配置网桥 IP

bash 复制代码
# /etc/systemd/network/80-br0.network
[Match]
Name=br0

[Network]
DHCP=ipv4
# 静态 IP:
# Address=192.168.1.30/24
# Gateway=192.168.1.1

4. 应用配置

bash 复制代码
# 重启服务
sudo systemctl restart systemd-networkd

# 查看状态
networkctl list
brctl show              # 查看网桥
ip addr show bond0      # 查看绑定
ip -d link show vlan100 # 查看 VLAN

5. 完整配置示例拓扑

makefile 复制代码
物理网卡:
  enp1s0 + enp2s0 
    ↓ 绑定 (bond0)
    ↓ 添加 VLAN100 (vlan100)
    ↓ 加入网桥 (br0)
最终:
  虚拟机/容器 → br0 → vlan100 → bond0 → 物理网络

6. 故障排除

  • 检查配置文件语法

    bash 复制代码
    networkd-delta /etc/systemd/network/
  • 查看日志

    bash 复制代码
    journalctl -u systemd-networkd -f
  • 验证网络

    bash 复制代码
    ip link show      # 检查接口状态
    networkctl status br0

注意 :配置文件按字母顺序处理,推荐使用数字前缀(如 10-, 20-)控制加载顺序。

通过以上配置,您可以在纯 systemd-networkd 环境下实现复杂的网络拓扑,无需依赖传统网络管理工具。







在 systemd-networkd 中配置以太网(Ethernet)、绑定(Bond)、VLAN 和网桥(Bridge)需要创建 .netdev(定义虚拟设备)和 .network(配置网络参数)文件。以下是详细配置指南:


1. 以太网 (Ethernet)

配置物理接口(如 eth0)的 IP 地址:

bash 复制代码
# /etc/systemd/network/20-eth0.network
[Match]
Name=eth0

[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
DNS=8.8.8.8

2. 绑定 (Bond)

步骤 1:创建 Bond 设备
bash 复制代码
# /etc/systemd/network/10-bond0.netdev
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=active-backup   # 绑定模式(如 active-backup、balance-rr)
MIIMonitorSec=1s     # 链路检测间隔
步骤 2:将物理接口加入 Bond
bash 复制代码
# /etc/systemd/network/20-eth-bond.network
[Match]
Name=eth1 eth2       # 从属接口列表

[Network]
Bond=bond0           # 绑定到 bond0
步骤 3:为 Bond 配置 IP
bash 复制代码
# /etc/systemd/network/30-bond0.network
[Match]
Name=bond0

[Network]
Address=192.168.1.20/24
Gateway=192.168.1.1

3. VLAN

步骤 1:创建 VLAN 设备(基于 eth0
bash 复制代码
# /etc/systemd/network/10-vlan100.netdev
[NetDev]
Name=vlan100
Kind=vlan

[VLAN]
Id=100               # VLAN ID
步骤 2:为 VLAN 配置 IP
bash 复制代码
# /etc/systemd/network/20-vlan100.network
[Match]
Name=vlan100

[Network]
Address=192.168.100.10/24

4. 网桥 (Bridge)

步骤 1:创建网桥设备
bash 复制代码
# /etc/systemd/network/10-br0.netdev
[NetDev]
Name=br0
Kind=bridge
步骤 2:将接口加入网桥(如 eth3
bash 复制代码
# /etc/systemd/network/20-eth3-bridge.network
[Match]
Name=eth3

[Network]
Bridge=br0   # 加入网桥 br0(注意:此接口自身不设 IP)
步骤 3:为网桥配置 IP
bash 复制代码
# /etc/systemd/network/30-br0.network
[Match]
Name=br0

[Network]
Address=192.168.1.30/24
Gateway=192.168.1.1

完整工作流示例:Bond + VLAN + Bridge

场景:创建 bond0 → 在 bond0 上添加 VLAN vlan100 → 将 vlan100 加入网桥 br0
  1. Bond 配置 (同前文 bond0

  2. VLAN 配置 (基于 bond0):

    bash 复制代码
    # /etc/systemd/network/10-bond0-vlan100.netdev
    [NetDev]
    Name=vlan100
    Kind=vlan
    [VLAN]
    Id=100
  3. 网桥配置

    bash 复制代码
    # /etc/systemd/network/10-br0.netdev
    [NetDev]
    Name=br0
    Kind=bridge
  4. 连接 VLAN 到网桥

    bash 复制代码
    # /etc/systemd/network/20-vlan100-bridge.network
    [Match]
    Name=vlan100
    [Network]
    Bridge=br0
  5. 为网桥分配 IP

    bash 复制代码
    # /etc/systemd/network/30-br0.network
    [Match]
    Name=br0
    [Network]
    Address=10.0.100.1/24

应用配置

  1. 所有文件保存在 /etc/systemd/network/

  2. 重启服务生效:

    bash 复制代码
    sudo systemctl restart systemd-networkd
  3. 检查状态:

    bash 复制代码
    networkctl list
    ip addr show     # 查看接口状态

关键注意事项

  1. 文件命名 :按数字前缀顺序处理(如 10-*.netdev 优先于 20-*.network)。
  2. 依赖关系
    • Bond/VLAN/Bridge 需先通过 .netdev 定义。
    • 物理接口的 .network 文件需在虚拟设备之后加载。
  3. 链路检测 :Bond 模式中 MIIMonitorSec 需根据硬件调整。
  4. DHCP :若需 DHCP,在 [Network] 段添加 DHCP=yes

通过组合这些配置,可构建复杂网络拓扑(如 Bond 上的 VLAN 桥接)。建议逐步测试每个组件确保链路正常。







systemd-networkd 中,Kind.netdev 配置文件中的核心参数,用于定义虚拟网络设备的类型。该参数位于 [NetDev] 部分,指定了要创建的虚拟设备类别。以下是常见 Kind 类型及其用途的详细说明:


🔧 常见 Kind 类型及配置示例

1. bridge(网桥)

用于连接多个网络接口,实现二层交换。
配置文件示例 (/etc/systemd/network/br0.netdev):

ini 复制代码
[NetDev]
Name=br0
Kind=bridge

高级参数(可选):

ini 复制代码
[Bridge]
STP=yes       # 启用生成树协议
HelloTimeSec=2 # STP Hello 时间
2. bond(绑定)

聚合多个物理接口提升带宽或冗余。
配置文件示例 (/etc/systemd/network/bond0.netdev):

ini 复制代码
[NetDev]
Name=bond0
Kind=bond
[Bond]
Mode=802.3ad   # 链路聚合模式(LACP)
LACPTransmitRate=fast
MIIMonitorSec=100ms
3. vlan(虚拟局域网)

在父接口上划分逻辑子网。
配置文件示例 (/etc/systemd/network/vlan100.netdev):

ini 复制代码
[NetDev]
Name=vlan100
Kind=vlan
[VLAN]
Id=100          # VLAN ID(1-4094)
Parent=eth0     # 父接口
4. vxlan(虚拟扩展局域网)

创建跨物理网络的虚拟二层网络。
配置文件示例 (/etc/systemd/network/vxlan10.netdev):

ini 复制代码
[NetDev]
Name=vxlan10
Kind=vxlan
[VXLAN]
VNI=42            # 虚拟网络标识符
Local=192.168.1.100
Remote=192.168.1.200
5. tun/tap(隧道设备)

支持用户态网络通信(如 VPN)。
配置文件示例 (/etc/systemd/network/mytun.netdev):

ini 复制代码
[NetDev]
Name=mytun
Kind=tun         # 或 Kind=tap
6. ipip/gre(隧道协议)

用于点对点隧道连接。
GRE 示例:

ini 复制代码
[NetDev]
Name=gre1
Kind=gre
[Tunnel]
Local=10.0.0.1
Remote=10.0.0.2

⚙️ 其他虚拟设备类型

Kind 类型 用途 典型场景
veth 创建虚拟以太网对(一端连接容器,一端连接主机) 容器网络(如 Docker/Podman)
sit IPv6-over-IPv4 隧道 IPv6 过渡技术
vti 虚拟隧道接口(IPsec 专用) VPN 加密通信
dummy 虚拟空设备,用于测试或占位 网络测试

📝 配置要点

  1. 文件命名与优先级

    • .netdev 文件需保存在 /etc/systemd/network/,按字母顺序加载。
    • 命名建议:<优先级>-<设备名>.netdev(如 10-br0.netdev)。
  2. 关联物理接口

    虚拟设备创建后,需在 .network 文件中将物理接口绑定到虚拟设备:

    ini 复制代码
    # /etc/systemd/network/enp1s0.network
    [Match]
    Name=enp1s0
    [Network]
    Bridge=br0   # 绑定到网桥
  3. IP 地址配置

    在虚拟设备的 .network 文件中设置 IP:

    ini 复制代码
    # /etc/systemd/network/br0.network
    [Match]
    Name=br0
    [Network]
    Address=192.168.1.100/24
    Gateway=192.168.1.1

💡 使用场景与建议

  • 服务器/嵌入式系统 :优先使用 bridgebondvlan 构建高可靠网络。
  • 容器网络vethbridge 连接容器与主机。
  • 跨数据中心网络vxlan 实现大二层扩展。
  • VPN 隧道gre/ipip 结合 IPsec 加密。

⚠️ 注意 :删除虚拟设备需手动移除 .netdev 文件并重启 systemd-networkd,残留设备需用 ip link delete 清理。


🔄 完整配置流程示例(网桥 + VLAN)

  1. 创建网桥 (20-br0.netdev):

    ini 复制代码
    [NetDev]
    Name=br0
    Kind=bridge
  2. 添加物理接口到网桥 (30-br0-slave.network):

    ini 复制代码
    [Match]
    Name=eth0
    [Network]
    Bridge=br0
  3. 在网桥上创建 VLAN (40-vlan100.netdev):

    ini 复制代码
    [NetDev]
    Name=br0.100
    Kind=vlan
    [VLAN]
    Id=100
    Parent=br0
  4. 配置 VLAN IP (50-vlan100.network):

    ini 复制代码
    [Match]
    Name=br0.100
    [Network]
    Address=10.100.0.1/24

重启服务生效:

bash 复制代码
sudo systemctl restart systemd-networkd






systemd-networkd 中,Kind.netdev 配置文件中的核心参数,用于定义虚拟网络设备的类型。它决定了设备的功能和行为,支持多种网络拓扑需求。以下是 Kind 的常见类型及其配置详解:


📌 Kind 的常见类型及功能

类型 功能描述 典型应用场景 配置文件示例
bridge 创建软件网桥,用于连接多个物理或虚拟接口,实现二层交换 虚拟机网络聚合、容器互联 [NetDev] Name=br0 Kind=bridge [Bridge] STP=false
bond 将多个物理接口绑定为单一逻辑接口,提供冗余或负载均衡 网络高可用、带宽聚合 [NetDev] Name=bond0 Kind=bond [Bond] Mode=802.3ad
vlan 在父接口上创建 802.1Q VLAN 子接口,实现网络隔离 多租户网络、流量隔离 [NetDev] Name=vlan10 Kind=vlan [Vlan] Id=10
veth 创建成对的虚拟以太网设备,用于连接不同网络命名空间(如容器) 容器间通信、网络隔离 [NetDev] Name=veth-a Kind=veth [Peer] Name=veth-b
ipip /gre 创建隧道接口(IP-over-IP/GRE),用于跨网络封装传输数据 VPN、跨数据中心互联 [NetDev] Name=tun0 Kind=ipip [Tunnel] Remote=203.0.113.1
dummy 创建无实际硬件的虚拟接口,用于测试或占位 网络测试、服务依赖模拟 [NetDev] Name=dummy0 Kind=dummy

💡

  • 物理接口(如以太网)无需 .netdev 文件 ,直接通过 .network 文件配置。
  • 所有配置文件需保存在 /etc/systemd/network/,按文件名字典序生效。

⚙️ 详细配置说明

1. 网桥(bridge
  • 关键参数

    • STP:生成树协议(默认 no
    • VLANFiltering:启用 VLAN 过滤(如需复杂 VLAN 拓扑)
  • 绑定物理接口
    在物理接口的 .network 文件中添加 Bridge=br0
    示例

    ini 复制代码
    # /etc/systemd/network/br0.netdev
    [NetDev]
    Name=br0
    Kind=bridge
    [Bridge]
    VLANFiltering=yes
2. 绑定(bond
  • 工作模式Mode):

    • balance-rr(轮询)、active-backup(主备)、802.3ad(LACP 聚合)
  • 链路监测
    MIIMonitorSec=1s(毫秒级检测间隔)
    示例

    ini 复制代码
    # /etc/systemd/network/bond0.netdev
    [NetDev]
    Name=bond0
    Kind=bond
    [Bond]
    Mode=802.3ad
    MIIMonitorSec=500ms
3. VLAN
  • 必需参数

    • Id:VLAN ID(1-4094)
    • 父接口需在 .network 文件中声明 VLAN=vlan10
      示例
    ini 复制代码
    # /etc/systemd/network/vlan10.netdev
    [NetDev]
    Name=vlan10
    Kind=vlan
    [Vlan]
    Id=10
4. 虚拟以太网(veth
  • 成对配置
    需指定 [Peer] 段定义对端接口名称。
    示例

    ini 复制代码
    # /etc/systemd/network/veth-pair.netdev
    [NetDev]
    Name=veth-host
    Kind=veth
    [Peer]
    Name=veth-container

⚠️ 配置注意事项

  1. 依赖服务

    • 启用 systemd-networkd.service,并禁用其他网络管理工具(如 NetworkManager)。
    • 若需 DNS 解析,同时启用 systemd-resolved.service
  2. 文件命名规则

    • 文件名前缀决定优先级(如 10- 优先于 20-)。
    • 避免与系统默认配置冲突(默认配置在 /usr/lib/systemd/network/)。
  3. 复杂拓扑示例(Bond + Bridge + VLAN):

    bash 复制代码
    # 绑定接口 → 加入网桥 → 创建 VLAN
    /etc/systemd/network/
    ├── 20-bond0.netdev          # 定义 bond0
    ├── 30-br0.netdev            # 定义网桥 br0
    ├── 40-bond0-bridge.network  # 绑定 bond0 到 br0
    └── 50-br0-vlan20.netdev     # 在 br0 上创建 VLAN 20
  4. 验证与调试

    • 重载配置:systemctl restart systemd-networkd
    • 查看设备状态:networkctl listnetworkctl status br0

💎 总结

Kindsystemd-networkd 虚拟网络设备的类型标识,通过 .netdev 文件灵活定义网桥、绑定、VLAN 等复杂网络结构。结合 .network 文件可实现全栈网络管理,尤其适合无图形界面的服务器环境。







systemd-networkd 中,Kind.netdev 配置文件中的核心参数,用于定义要创建的虚拟网络设备类型 。它决定了设备的底层行为和功能,通常与物理接口或更复杂的网络拓扑(如网桥、绑定、VLAN)结合使用。以下是常见 Kind 类型及其配置详解:


🔧 一、Kind 的作用与配置位置

  1. 配置文件类型
    Kind 仅在 .netdev 文件中指定,用于定义虚拟设备的类型。
  2. 典型取值
    • bridge:创建网桥设备(用于聚合多个接口)
    • bond:创建绑定设备(链路聚合)
    • vlan:创建VLAN虚拟接口
    • veth:创建虚拟以太网对(容器间通信)
    • tun/tap:创建隧道或虚拟点对点设备
  3. 配置文件路径
    所有 .netdev 文件需保存在 /etc/systemd/network/ 目录下,文件名格式为 <前缀>-<设备名>.netdev

🌉 二、常见 Kind 类型及配置示例

1. 网桥(Kind=bridge

用途 :连接多个物理/虚拟接口(如虚拟机、容器)。
示例配置 (/etc/systemd/network/br0.netdev):

ini 复制代码
[NetDev]
Name=br0        # 网桥名称
Kind=bridge     # 设备类型
[Bridge]
STP=false       # 禁用生成树协议(小型网络)
VLANFiltering=yes # 启用VLAN过滤

关键选项

  • STP:生成树协议(防环)
  • VLANFiltering:支持基于VLAN的数据包过滤

🔗 2. 绑定(Kind=bond

用途 :将多个物理网卡聚合成一个逻辑接口(提升带宽或冗余)。
示例配置 (/etc/systemd/network/bond0.netdev):

ini 复制代码
[NetDev]
Name=bond0
Kind=bond
[Bond]
Mode=802.3ad         # 绑定模式(LACP动态聚合)
MIIMonitorSec=1s     # 链路检测间隔
LACPTransmitRate=fast # LACP报文速率

常用模式

  • balance-rr:轮询负载均衡
  • active-backup:主备冗余
  • 802.3ad:LACP动态聚合(需交换机支持)

📡 3. VLAN(Kind=vlan

用途 :在物理接口上创建虚拟子接口(实现网络隔离)。
示例配置 (/etc/systemd/network/vlan10.netdev):

ini 复制代码
[NetDev]
Name=vlan10     # VLAN接口名
Kind=vlan
[VLAN]
Id=10           # VLAN ID(必需)

关联父接口

需在父接口的 .network 文件中声明 VLAN=vlan10(见下文)。


⚙️ 三、配套 .network 文件的作用

虚拟设备创建后,需通过 .network 文件配置IP、路由等属性,并绑定物理接口:

  1. 将物理接口加入网桥 (/etc/systemd/network/eth0.network):

    ini 复制代码
    [Match]
    Name=eth0
    [Network]
    Bridge=br0  # 加入网桥br0
  2. 为VLAN接口配置IP (/etc/systemd/network/vlan10.network):

    ini 复制代码
    [Match]
    Name=vlan10
    [Network]
    Address=192.168.10.2/24
    Gateway=192.168.10.1
    # 指定父接口(可选)
    VLAN=eth0.10

⚠️ 四、注意事项

  1. 依赖关系

    • 虚拟设备(如 br0bond0)需先通过 .netdev 创建,再在 .network 文件中绑定物理接口。
    • VLAN需在父接口的 .network 文件中启用(如 VLAN=vlan10)。
  2. 服务管理

    bash 复制代码
    systemctl enable --now systemd-networkd  # 启用并启动服务
    systemctl restart systemd-networkd       # 配置变更后重启
  3. 冲突避免

    • 确保无其他网络管理服务(如 NetworkManager)运行:

      bash 复制代码
      systemctl disable --now NetworkManager

💎 总结:Kind 类型对比表

类型 配置文件 核心功能 典型应用场景
bridge .netdev + .network 聚合多个接口 虚拟机/容器网络
bond .netdev + .network 多网卡冗余/负载均衡 服务器高可用链路
vlan .netdev + .network 网络逻辑分段 隔离不同业务流量
veth .netdev 成对虚拟接口 容器间直接通信

💡 通过组合不同 Kind 类型(如 bondbridgevlan),可构建复杂网络拓扑(如高可用虚拟化集群)。







在systemd-networkd中,kind.netdev文件中的核心配置项,用于定义虚拟网络设备的类型。以下是主要kind类型及其用途的详解:

🔧 一、常见kind类型及用途

  1. bridge(网桥)

    • 功能:创建二层交换设备,用于连接多个物理或虚拟接口。

    • 配置文件br0.netdev

    • 示例配置

      ini 复制代码
      [NetDev]
      Name=br0
      Kind=bridge

      引用自

  2. vlan(虚拟局域网)

    • 功能 :基于物理接口创建带VLAN ID的虚拟子接口(如ens34.10)。

    • 配置文件ens34.10.netdev

    • 示例配置

      ini 复制代码
      [NetDev]
      Name=ens34.10
      Kind=vlan
      [VLAN]
      Id=10

      引用自

  3. bond(绑定接口)

    • 功能 :聚合多个物理接口提升带宽或冗余(支持模式如802.3ad)。

    • 配置文件bond0.netdev

    • 示例配置

      ini 复制代码
      [NetDev]
      Name=bond0
      Kind=bond
      [Bond]
      Mode=802.3ad

      引用自

  4. veth(虚拟以太网对)

    • 功能:创建成对的虚拟接口,用于容器或命名空间间通信。
    • 典型场景 :连接容器与宿主机网络。
      引用自
  5. tun/tap(隧道/虚拟点对点)

    • 功能 :实现VPN或虚拟化网络(tun处理IP层,tap处理以太网帧)。
      引用自
  6. macvlan/ipvlan(虚拟子接口)

    • 功能 :基于物理接口创建多个虚拟接口,各具独立MAC/IP地址。
      引用自

⚙️ 二、配置要点与流程

  1. 文件命名与位置

    • 配置文件需以.netdev结尾,存放于/etc/systemd/network/
    • 优先级:/etc/ > /run/ > /usr/lib/
  2. 启用服务

    bash 复制代码
    sudo systemctl enable --now systemd-networkd  # 启动服务
    sudo systemctl restart systemd-networkd       # 配置生效
  3. 依赖关系

    • 物理接口配置 :需在.network文件中通过Bridge=Bond=绑定到虚拟设备。

    • 示例(绑定网桥)

      ini 复制代码
      [Match]
      Name=eth0
      [Network]
      Bridge=br0    # 将eth0加入网桥br0

💡 三、典型应用场景

  • 容器网络veth连接容器,bridge管理多容器通信。
  • 高可用服务器bond聚合双网卡,vlan划分业务与管理流量。
  • 虚拟机网络bridge整合物理网卡与虚拟机接口。

📝 四、完整配置示例

场景 :创建网桥br0并绑定物理接口eth0

  1. 网桥定义 (/etc/systemd/network/br0.netdev):

    ini 复制代码
    [NetDev]
    Name=br0
    Kind=bridge
  2. 接口绑定 (/etc/systemd/network/eth0.network):

    ini 复制代码
    [Match]
    Name=eth0
    [Network]
    Bridge=br0

💡 注意:同一物理接口不可被多个网络管理服务(如NetworkManager)控制,需先禁用冲突服务。


总结表:kind类型与用途

Kind类型 用途 配置文件示例 典型场景
bridge 二层交换设备 br0.netdev 连接多接口/虚拟机
vlan 基于VLAN ID的子接口 ens34.10.netdev 网络隔离
bond 聚合多物理接口 bond0.netdev 带宽提升/链路冗余
veth 虚拟以太网对 veth-pair.netdev 容器间通信
tun/tap 点对点隧道 vpn-tunnel.netdev VPN/虚拟化网络

通过合理选择kind类型,可灵活构建从简单到复杂的网络拓扑,满足服务器、容器、虚拟化等多种需求。







在 systemd-networkd 中,Kind.netdev 文件中的核心配置项,用于定义要创建的虚拟网络设备类型。以下是常见 Kind 类型及其详细说明:


1. bond - 绑定接口

聚合多个物理接口为单一逻辑接口

ini 复制代码
[NetDev]
Name=bond0
Kind=bond    # 关键配置

[Bond]
Mode=active-backup
Miimon=100
PrimaryReselectPolicy=always

常用参数:

  • Mode: 绑定模式 (balance-rr, active-backup, balance-xor, broadcast, 802.3ad, balance-tlb, balance-alb)
  • TransmitHashPolicy: 负载均衡策略
  • LACPTransmitRate: LACP 报文速率 (slow, fast)

2. vlan - 虚拟局域网

在物理接口上创建 802.1Q VLAN 子接口

ini 复制代码
[NetDev]
Name=eth0.100
Kind=vlan    # 关键配置

[VLAN]
Id=100       # VLAN ID (1-4094)
Protocol=802.1Q

特性:

  • 支持 Id (必填) 和 Protocol (可选)
  • 名称格式建议为 父接口.VLANID (如 eth0.100)

3. bridge - 网桥设备

创建二层交换设备

ini 复制代码
[NetDev]
Name=br0
Kind=bridge  # 关键配置

[Bridge]
STP=on       # 生成树协议
VLANFiltering=yes

高级参数:

  • AgeingTimeSec: MAC 地址老化时间
  • MulticastRouter: 组播路由 (disabled, permanent, temporary)
  • VLANProtocol: VLAN 协议 (802.1q, 802.1ad)

4. veth - 虚拟以太网对

创建成对虚拟接口(常用于容器网络)

ini 复制代码
[NetDev]
Name=veth-host
Kind=veth    # 关键配置

[Peer]
Name=veth-container

特性:

  • 必须包含 [Peer] 部分定义对端接口
  • 常用于连接命名空间或容器

5. macvlan/macvtap

基于物理接口创建虚拟克隆接口

ini 复制代码
[NetDev]
Name=macvlan0
Kind=macvlan  # 或 macvtap

[MACVLAN]
Mode=bridge   # 模式: private, vepa, bridge, passthru

模式说明:

  • bridge: 子接口可直接通信
  • vepa: 通过物理交换机通信
  • private: 禁止子接口通信

6. vxlan - 虚拟扩展局域网

创建 overlay 网络隧道

ini 复制代码
[NetDev]
Name=vxlan100
Kind=vxlan

[VXLAN]
VNI=100       # 虚拟网络标识符
Local=192.168.1.10
Port=4789

关键参数:

  • VNI: 虚拟网络 ID (必填)
  • TunnelId: 兼容 VNI 的别名
  • Remote: 单播对端 IP
  • Group: 组播组地址

7. ipip/gre/sit - 隧道协议

ini 复制代码
# IP-in-IP 隧道
[NetDev]
Name=ipip0
Kind=ipip

[Tunnel]
Local=192.168.1.10
Remote=203.0.113.20

支持类型:

  • ipip: IPv4-in-IPv4
  • sit: IPv6-in-IPv4
  • gre: 通用路由封装
  • gretap: 带以太网头的 GRE
  • vti: IPsec VPN 隧道接口

8. wireguard - VPN 隧道

ini 复制代码
[NetDev]
Name=wg0
Kind=wireguard

[WireGuard]
PrivateKey=base64_encoded_key
ListenPort=51820

[WireGuardPeer]
PublicKey=peer_public_key
AllowedIPs=10.8.0.0/24
Endpoint=203.0.113.30:51820

9. dummy - 虚拟空设备

ini 复制代码
[NetDev]
Name=dummy0
Kind=dummy

用途:

  • 测试接口
  • 服务绑定占位符
  • 路由锚点

配置规则

  1. 文件位置 : /etc/systemd/network/*.netdev
  2. 命名要求 :
    • 文件名决定加载顺序 (按数字前缀)
    • Name= 必须与文件名无直接关联
  3. 依赖关系 :
    • 虚拟设备需先于 .network 文件创建
    • 物理接口配置需单独 .network 文件

查看已创建设备

bash 复制代码
# 列出所有网络设备
networkctl list

# 查看特定设备详情
networkctl status br0

调试命令

bash 复制代码
# 检查配置语法
systemd-networkd --test

# 实时日志
journalctl -u systemd-networkd -f

通过合理组合不同的 Kind 类型,可以构建复杂的网络拓扑结构,满足服务器、容器和云环境的多样化组网需求。







systemd-networkd 中,Kind 是用于定义虚拟网络设备类型的关键参数,通常在 .netdev 配置文件中使用。以下是 Kind 支持的主要类型及其用途和配置示例:


🔧 一、链路聚合与负载均衡类

  1. bond (网卡绑定)

    • 用途:将多个物理接口聚合成一个逻辑接口,提供冗余或负载均衡。

    • 配置示例

      ini 复制代码
      [NetDev]
      Name=bond0
      Kind=bond
      [Bond]
      Mode=802.3ad     # 链路聚合模式(如 LACP)
      MIIMonitorSec=100ms

      适用于高可用服务器网络。

  2. team (高级网卡绑定)

    • 用途 :替代 bond,提供更灵活的负载均衡策略(如轮询、广播)。

    • 示例

      ini 复制代码
      [NetDev]
      Name=team0
      Kind=team
      [Team]
      Runner=loadbalance # 负载均衡模式

      适用于需要复杂流量调度的场景。


🌐 二、隧道与覆盖网络类

  1. vlan (虚拟局域网)

    • 用途:基于物理接口创建 VLAN 子接口,实现网络隔离。

    • 示例

      ini 复制代码
      [NetDev]
      Name=eth0.10
      Kind=vlan
      [VLAN]
      Id=10              # VLAN ID

      适用于多租户网络隔离。

  2. vxlan (虚拟扩展局域网)

    • 用途:构建跨物理网络的虚拟二层网络,常用于容器或云环境。

    • 示例

      ini 复制代码
      [NetDev]
      Name=vxlan0
      Kind=vxlan
      [VXLAN]
      VNI=100            # 虚拟网络标识符
      Remote=192.168.1.1 # 目标 IP

      适用于跨主机容器通信(如 Kubernetes)。

  3. ipip/gre (隧道协议)

    • 用途:创建点对点隧道(如 IP-over-IP、通用路由封装)。

    • 示例

      ini 复制代码
      [NetDev]
      Name=gre-tun
      Kind=gre
      [Tunnel]
      Local=192.168.1.100
      Remote=203.0.113.5

      适用于 VPN 或跨数据中心连接。


三、虚拟化与桥接类

  1. bridge (网桥)

    • 用途:连接多个网络接口(物理或虚拟),实现二层交换。

    • 示例

      ini 复制代码
      [NetDev]
      Name=br0
      Kind=bridge
      [Bridge]
      STP=on           # 启用生成树防环

      适用于 KVM 虚拟机网络或容器网桥。

  2. veth (虚拟以太网对)

    • 用途:创建成对的虚拟接口,用于连接网络命名空间(如容器)。

    • 示例

      ini 复制代码
      [NetDev]
      Name=veth-host
      Kind=veth
      [Peer]
      Name=veth-container

      适用于容器网络(如 Docker)。

  3. macvlan/ipvlan

    • 用途:为物理接口创建多个虚拟接口,共享 MAC 或 IP 地址。

    • 示例

      ini 复制代码
      [NetDev]
      Name=macvlan0
      Kind=macvlan
      [MACVLAN]
      Mode=bridge      # 桥接模式

      适用于单主机多网络隔离需求。


📊 四、其他类型

Kind 类型 用途 典型场景
dummy 创建虚拟回环接口 测试或占位
tun/tap 用户空间网络接口(如 VPN) OpenVPN 或虚拟机组网
vcan 虚拟 CAN 总线接口 嵌入式设备通信
wireguard WireGuard VPN 隧道 加密点对点连接

⚠️ 五、配置注意事项

  1. 配置文件优先级

    • 文件按字母顺序处理(如 10-bond.netdev 优先于 20-vlan.netdev)。
    • 目录优先级:/etc/systemd/network/ > /run/systemd/network/ > /usr/lib/systemd/network/
  2. 依赖关系

    • 物理接口需通过 .network 文件绑定到虚拟设备(如 Bridge=bond0)。

    • 示例:将 eth1 加入网桥 br0

      ini 复制代码
      [Match]
      Name=eth1
      [Network]
      Bridge=br0      # 关键配置
  3. 服务管理

    • 修改配置后需重启服务生效:

      bash 复制代码
      sudo systemctl restart systemd-networkd

💎 总结

  • 核心原则Kind.netdev 文件中定义虚拟设备类型,需配套 .network 文件绑定物理接口并配置 IP。
  • 适用场景
    • 服务器网络:bond/vlan 提升可靠性。
    • 虚拟化:bridge/veth 支持容器和虚拟机。
    • 跨网络通信:vxlan/gre 扩展二层网络。
  • 限制 :不支持无线网络(需配合 wpa_supplicant)。






systemd-networkd 中,Kind.netdev 配置文件的核心指令 ,用于定义要创建的虚拟网络设备类型。它位于 [NetDev] 部分中,决定了设备的行为和功能。以下是常见的 Kind 类型及其用途详解:


常见 Kind 类型及用途

Kind 设备类型 用途 配置文件要求
bond 绑定设备 聚合多个物理接口提供冗余/负载均衡 [Bond] 部分配置模式参数
vlan VLAN 设备 在物理接口上创建 802.1Q 虚拟子接口 [VLAN] 部分指定 Id
bridge 网桥设备 连接多个接口实现二层交换(常用于虚拟机/容器网络) [Bridge] 部分配置 STP 等参数
veth 虚拟以太网对 创建成对虚拟接口(一端发送另一端接收,用于容器间通信) [Peer] 部分定义对端接口名
macvlan/ipvlan MACVLAN/IPVLAN 基于物理接口创建虚拟接口(共享 MAC 或独立 MAC) [MACVLAN]/[IPVLAN] 配置模式
vxlan VXLAN 隧道 构建跨三层网络的虚拟二层覆盖网络 [VXLAN] 部分配置 VNI/端口等
tun/tap TUN/TAP 设备 用户空间网络隧道(VPN/虚拟化场景) [Tun] 部分配置 Owner/Group
dummy 虚拟空设备 无实际硬件的逻辑接口(用于测试或固定 IP 绑定) 无需额外配置
wireguard WireGuard VPN 创建加密 VPN 隧道接口 [WireGuard] 配置密钥/对端

配置语法示例

1. 定义设备类型(基础结构)
ini 复制代码
[NetDev]
Name=my-device  # 设备名称
Kind=xxx        # 设备类型 (bond/vlan/bridge等)
2. 类型专属配置部分

每种 Kind 需要特定的配置部分:

  • bond[Bond]
  • vlan[VLAN]
  • bridge[Bridge]
  • wireguard[WireGuard]

示例:创建 VLAN 设备

ini 复制代码
[NetDev]
Name=vlan20
Kind=vlan       # 指定为 VLAN 类型

[VLAN]
Id=20           # VLAN ID (必需)

关键注意事项

  1. .netdev vs .network

    • .netdev仅负责创建设备 (使用 Kind 定义类型)
    • .network配置设备属性(IP 地址、路由、DNS 等)
  2. 依赖关系

    虚拟设备(如 bond0, br0)必须在物理接口的 .network 文件之前加载(通过文件名前缀控制优先级):

    bash 复制代码
    /etc/systemd/network/
      ├── 10-bond.netdev      # 先创建 bond 设备
      ├── 20-slave1.network   # 再将 eth1 加入 bond
      ├── 21-slave2.network
      └── 30-bond.network     # 最后配置 bond 的 IP
  3. 查看已创建设备

    bash 复制代码
    networkctl list
    # 输出示例:
    # IDX NAME      TYPE      OPERATIONAL SETUP
    # 1   eth0      ether     configured  configured
    # 2   bond0     bond      configured  configured
    # 3   vlan10    vlan      configured  configured

完整工作流示例:创建网桥

步骤 1:定义网桥设备 (br0.netdev)
ini 复制代码
[NetDev]
Name=br0
Kind=bridge     # 关键类型声明

[Bridge]
STP=on          # 启用生成树协议
ForwardDelaySec=2
步骤 2:将物理接口加入网桥 (eth0.network)
ini 复制代码
[Match]
Name=eth0

[Network]
Bridge=br0      # 加入网桥(非 IP 配置)
步骤 3:为网桥配置网络 (br0.network)
ini 复制代码
[Match]
Name=br0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1

高级 Kind 应用:WireGuard VPN

ini 复制代码
# 文件:/etc/systemd/network/05-wg0.netdev
[NetDev]
Name=wg0
Kind=wireguard  # 声明为 WireGuard 类型

[WireGuard]
PrivateKey=base64_encoded_key
ListenPort=51820

# 添加对端
[WireGuardPeer]
PublicKey=peer_public_key
AllowedIPs=10.8.0.0/24
Endpoint=203.0.113.1:51820

调试技巧

  1. 检查配置错误:

    bash 复制代码
    networkctl status <设备名>
  2. 查看内核设备信息:

    bash 复制代码
    ip link show bond0    # 检查绑定接口
    bridge link           # 查看网桥成员
  3. 重载配置:

    bash 复制代码
    networkctl reload && networkctl reconfigure <设备名>

通过正确使用 Kind,您可以灵活构建复杂的网络拓扑(如 Bond+VLAN+Bridge 组合),满足服务器、容器和虚拟化环境的需求。







systemd-networkd 中,.netdev 文件中的 Kind= 指令用于定义网络设备的类型。以下是常见 Kind 类型及其用途的详细说明:


主要 Kind 类型

1. ethernet
  • 用途:物理以太网接口(默认类型,通常无需显式声明)

  • 配置文件 :仅需 .network 文件(无需 .netdev

  • 示例

    ini 复制代码
    # /etc/systemd/network/20-eth0.network
    [Match]
    Name=eth0
    
    [Network]
    Address=192.168.1.10/24
2. bond
  • 用途:链路聚合(将多个物理接口绑定为单一逻辑接口)

  • 关键参数

    ini 复制代码
    [Bond]
    Mode=active-backup       # 绑定模式(balance-rr, active-backup, 802.3ad 等)
    MIIMonitorSec=1s         # 链路检测间隔
    TransmitHashPolicy=layer2 # 负载均衡策略
  • 完整示例

    ini 复制代码
    # /etc/systemd/network/10-bond0.netdev
    [NetDev]
    Name=bond0
    Kind=bond
    [Bond]
    Mode=802.3ad
3. vlan
  • 用途:创建 802.1Q VLAN 虚拟接口

  • 关键参数

    ini 复制代码
    [VLAN]
    Id=100                   # VLAN ID (1-4094)
  • 完整示例

    ini 复制代码
    # /etc/systemd/network/10-vlan100.netdev
    [NetDev]
    Name=vlan100
    Kind=vlan
    [VLAN]
    Id=100
4. bridge
  • 用途:创建二层网桥(连接多个接口)

  • 关键参数

    ini 复制代码
    [Bridge]
    STP=yes                  # 生成树协议
    HelloTimeSec=2           # STP 参数
  • 完整示例

    ini 复制代码
    # /etc/systemd/network/10-br0.netdev
    [NetDev]
    Name=br0
    Kind=bridge
    [Bridge]
    STP=yes

高级 Kind 类型

5. vxlan
  • 用途:创建 VXLAN 隧道

  • 关键参数

    ini 复制代码
    [VXLAN]
    VNI=42                   # 虚拟网络标识符
    Local=192.168.1.1        # 本地 IP
    Group=239.1.1.1          # 组播地址(可选)
6. macvlan
  • 用途:基于 MAC 地址的虚拟接口

  • 模式

    ini 复制代码
    [MACVLAN]
    Mode=bridge               # 其他模式:private, vepa, passthru
7. ipvlan
  • 用途:基于 IP 的虚拟接口

  • 模式

    ini 复制代码
    [IPVLAN]
    Mode=l2                   # 或 l3
8. wireguard
  • 用途:创建 WireGuard VPN 隧道

  • 关键参数

    ini 复制代码
    [WireGuard]
    PrivateKey=base64_key     # 私钥
    ListenPort=51820

特殊 Kind 类型

9. tun/tap
  • 用途 :用户空间网络设备(如 VPN)

    ini 复制代码
    [NetDev]
    Name=tun0
    Kind=tun
10. vrf
  • 用途 :虚拟路由转发(网络隔离)

    ini 复制代码
    [NetDev]
    Name=vrf-blue
    Kind=vrf
    [VRF]
    Table=1000               # 路由表 ID
11. dummy
  • 用途 :虚拟空设备(占位或测试)

    ini 复制代码
    [NetDev]
    Name=dummy0
    Kind=dummy

配置规则

  1. 文件位置 :所有 .netdev 文件放在 /etc/systemd/network/
  2. 依赖关系
    • 虚拟设备(bond/bridge/vlan)需先通过 .netdev 定义
    • 物理接口的 .network 文件引用虚拟设备
  3. 命名顺序 :文件按字典序处理(建议用数字前缀如 10-*.netdev

完整工作流示例:Bond + VLAN

bash 复制代码
# 1. 创建 bond0
# /etc/systemd/network/10-bond0.netdev
[NetDev]
Name=bond0
Kind=bond
[Bond]
Mode=802.3ad

# 2. 将 eth1,eth2 加入 bond0
# /etc/systemd/network/20-slaves.network
[Match]
Name=eth1 eth2
[Network]
Bond=bond0

# 3. 在 bond0 上创建 VLAN
# /etc/systemd/network/30-vlan100.netdev
[NetDev]
Name=vlan100
Kind=vlan
[VLAN]
Id=100

# 4. 为 VLAN 分配 IP
# /etc/systemd/network/40-vlan100.network
[Match]
Name=vlan100
[Network]
Address=10.0.100.1/24

查看设备信息

bash 复制代码
# 列出所有设备
networkctl list

# 查看设备详情
networkctl status bond0

# 验证内核设备
ip link show type bond    # 查看所有 bond 设备
ip -d link show vlan100  # 查看 VLAN 详细信息

掌握这些 Kind 类型后,您可以根据需求组合构建复杂网络拓扑(如 Bond→VLAN→Bridge)。







systemd-networkd 中,Kind.netdev 配置文件中的核心参数,用于定义虚拟网络设备的类型。它位于 [NetDev] 小节,指定要创建的设备类型(如网桥、绑定、VLAN 等)。以下是支持的 Kind 类型及其配置详解:


📦 一、.netdev 文件支持的 Kind 类型

类型 说明 典型应用场景
bridge 创建网桥设备,用于连接多个物理或虚拟接口(如虚拟机网络)。 虚拟机网络、容器网络桥接。
bond 绑定多个物理接口(如 eth0 + eth1),支持负载均衡或故障切换模式(如 active-backup)。 网络高可用、带宽聚合。
vlan 基于父接口(如 eth0)创建 VLAN 子接口(如 eth0.10)。 网络隔离、多租户环境。
veth 创建成对的虚拟以太网设备(一端连接容器,一端连接主机)。 容器网络命名空间互通。
tun/tap 用户态网络隧道设备(tun 处理 IP 层,tap 处理以太网帧)。 VPN、虚拟化网络。
ipip/gre IP-over-IP 隧道或通用路由封装隧道(需指定远程 IP)。 跨公网的点对点连接。
vxlan 虚拟扩展 LAN(基于 UDP 封装二层帧)。 跨数据中心的 overlay 网络。
wireguard 创建 WireGuard VPN 隧道接口。 加密的点对点或站点间通信。
vcan 虚拟 CAN 总线设备(用于工业控制协议)。 车载网络、工业自动化。

⚙️ 二、配置示例

1. 创建网桥(bridge
ini 复制代码
# /etc/systemd/network/br0.netdev
[NetDev]
Name=br0
Kind=bridge          # 指定类型为网桥
[Bridge]
STP=off              # 关闭生成树协议

关联物理接口:

ini 复制代码
# /etc/systemd/network/eth0.network
[Match]
Name=eth0
[Network]
Bridge=br0           # 将 eth0 加入网桥
2. 创建 VLAN(vlan
ini 复制代码
# /etc/systemd/network/vlan100.netdev
[NetDev]
Name=eth0.100
Kind=vlan            # 指定类型为 VLAN
[VLAN]
Id=100               # VLAN ID

为 VLAN 配置 IP:

ini 复制代码
# /etc/systemd/network/vlan100.network
[Match]
Name=eth0.100
[Network]
Address=192.168.100.10/24
3. 创建绑定(bond
ini 复制代码
# /etc/systemd/network/bond0.netdev
[NetDev]
Name=bond0
Kind=bond            # 指定类型为绑定
[Bond]
Mode=active-backup   # 故障切换模式

添加从属接口:

ini 复制代码
# /etc/systemd/network/slave1.network
[Match]
Name=eth1
[Network]
Bond=bond0

⚠️ 三、关键注意事项

  1. 配置文件优先级

    • 配置文件按文件名字典序处理(如 10- 优先于 20-)。
    • 目录优先级:/etc/systemd/network > /run/systemd/network > /usr/lib/systemd/network
  2. 依赖服务

    • 需启用 systemd-networkd.servicesystemd-resolved.service(DNS 解析):

      bash 复制代码
      sudo systemctl enable --now systemd-networkd systemd-resolved
  3. 物理接口配置

    • 加入网桥或绑定的物理接口 不能 单独配置 IP(需通过网桥或绑定设备配置)。
  4. 设备删除

    • 删除 .netdev 文件后需手动移除设备:

      bash 复制代码
      networkctl delete br0    # 删除网桥设备

💎 四、与 NetworkManager 的对比

特性 systemd-networkd NetworkManager
定位 轻量级,适合服务器/嵌入式系统。 面向桌面/移动设备,支持动态网络切换。
无线网络 需配合 wpa_supplicant 原生支持 Wi-Fi 和 VPN。
配置方式 静态配置文件(.network/.netdev)。 动态连接管理(.nmconnection)。

🔧 五、故障排查

  • 检查设备状态:

    bash 复制代码
    networkctl list                   # 列出所有接口
    ip link show br0                  # 查看网桥详情
  • 查看日志:

    bash 复制代码
    journalctl -u systemd-networkd -f  # 实时监控日志

通过合理选择 Kind 类型并配置 .netdev 文件,可构建复杂的网络拓扑(如 网桥+VLAN绑定+隧道),满足服务器、容器及虚拟化环境的网络需求。







以下是使用 systemd-networkd 配置以太网、绑定(Bond)、虚拟局域网(VLAN)和网桥(Bridge)的详细步骤和示例:


1. 以太网(Ethernet)配置

场景 :为物理网卡(如 eth0)配置静态IP或DHCP。
步骤
  1. 创建 .network 配置文件

    文件路径:/etc/systemd/network/10-eth0.network

    ini 复制代码
    [Match]
    Name=eth0
    
    [Network]
    DHCP=yes
    # 或静态IP配置:
    # Address=192.168.1.10/24
    # Gateway=192.168.1.1
    # DNS=8.8.8.8
  2. 重启服务

    bash 复制代码
    sudo systemctl restart systemd-networkd
  3. 验证

    bash 复制代码
    networkctl status eth0

2. 绑定(Bond)配置

场景 :将两个物理网卡(如 eth0eth1)绑定为一个逻辑接口(如 bond0),使用 active-backup 模式。
步骤
  1. 创建 .netdev 文件

    文件路径:/etc/systemd/network/10-bond0.netdev

    ini 复制代码
    [NetDev]
    Name=bond0
    Kind=bond
    
    [Bond]
    Mode=active-backup
    MIIStatus=true
    MIIInterval=5
  2. 创建 .network 文件

    文件路径:/etc/systemd/network/20-bond0.network

    ini 复制代码
    [Match]
    Name=bond0
    
    [Network]
    Address=192.168.1.100/24
    Gateway=192.168.1.1
    DNS=8.8.8.8
  3. 创建从属接口配置

    文件路径:/etc/systemd/network/30-eth0-slave.network/etc/systemd/network/30-eth1-slave.network

    ini 复制代码
    [Match]
    Name=eth0,eth1
    
    [Network]
    Bond=bond0
  4. 重启服务

    bash 复制代码
    sudo systemctl restart systemd-networkd
  5. 验证

    bash 复制代码
    ip link show bond0
    networkctl status bond0

3. 虚拟局域网(VLAN)配置

场景 :在物理接口 eth0 上创建 VLAN 子接口 eth0.100,并为其分配IP。
步骤
  1. 创建 .netdev 文件

    文件路径:/etc/systemd/network/10-eth0.100.netdev

    ini 复制代码
    [NetDev]
    Name=eth0.100
    Kind=vlan
    
    [VLAN]
    Id=100
  2. 创建 .network 文件

    文件路径:/etc/systemd/network/20-eth0.100.network

    ini 复制代码
    [Match]
    Name=eth0.100
    
    [Network]
    Address=192.168.100.10/24
    Gateway=192.168.100.1
    DNS=8.8.8.8
  3. 重启服务

    bash 复制代码
    sudo systemctl restart systemd-networkd
  4. 验证

    bash 复制代码
    ip -d link show eth0.100
    ip addr show eth0.100

4. 网桥(Bridge)配置

场景 :创建网桥 br0,并将物理接口 eth0 添加到网桥中。
步骤
  1. 创建 .netdev 文件

    文件路径:/etc/systemd/network/10-br0.netdev

    ini 复制代码
    [NetDev]
    Name=br0
    Kind=bridge
  2. 创建 .network 文件

    文件路径:/etc/systemd/network/20-br0.network

    ini 复制代码
    [Match]
    Name=br0
    
    [Network]
    Address=192.168.1.200/24
    Gateway=192.168.1.1
    DNS=8.8.8.8
  3. 创建从属接口配置

    文件路径:/etc/systemd/network/30-eth0-slave.network

    ini 复制代码
    [Match]
    Name=eth0
    
    [Network]
    Bridge=br0
  4. 重启服务

    bash 复制代码
    sudo systemctl restart systemd-networkd
  5. 验证

    bash 复制代码
    brctl show br0
    networkctl status br0

注意事项

  1. 文件优先级

    • 配置文件名以数字开头(如 10-xxx.network),数字越小优先级越高。
    • /etc/systemd/network/ 的优先级高于 /usr/lib/systemd/network/
  2. 语法检查

    使用以下命令检查配置文件语法:

    bash 复制代码
    systemd-analyze verify /etc/systemd/network/*.network
  3. 服务状态

    检查服务状态确保配置生效:

    bash 复制代码
    systemctl status systemd-networkd
  4. 依赖关系

    • VLAN 和 Bond 需要内核支持(如加载 8021qbonding 模块)。
    • 网桥需要安装 bridge-utils 工具(用于验证)。

总结

  • 以太网:直接配置物理接口。
  • 绑定(Bond) :通过 .netdev 定义 Bond 设备,并绑定物理接口。
  • VLAN :通过 .netdev 定义 VLAN 子接口,并配置 IP。
  • 网桥 :通过 .netdev 定义 Bridge 设备,并添加从属接口。

以上配置完成后,系统会自动应用网络设置。如果遇到问题,可以通过 journalctl -u systemd-networkd 查看日志排查错误。







systemd-networkd 是 Linux 系统中用于管理网络设备和配置的系统服务,通过 /etc/systemd/network/ 目录下的 .netdev(定义虚拟设备)和 .network(配置网络参数)文件实现配置。以下是以太网、Bond(绑定)、VLAN、Bridge 的详细配置示例。

基础说明

  • .netdev 文件:用于定义虚拟网络设备(如 bond、vlan、bridge),需指定设备类型和关键参数。
  • .network 文件:用于配置设备的网络参数(如 IP、网关、DNS),需关联具体设备(物理或虚拟)。
  • 配置文件按文件名字母/数字顺序 加载,建议用数字前缀(如 10-eth0.network)确保顺序正确。
  • 生效命令:systemctl restart systemd-networkd;检查状态:networkctl statusip addr

1. 以太网(Ethernet)配置

假设物理网卡名为 eth0,配置静态 IP 或 DHCP。

示例:静态 IP 配置(10-eth0.network
ini 复制代码
[Match]
Name=eth0  # 匹配网卡名称

[Network]
Address=192.168.1.10/24  # 静态IP及子网掩码
Gateway=192.168.1.1      # 网关
DNS=114.114.114.114      # DNS服务器
DNS=8.8.8.8
示例:DHCP 配置(10-eth0.network
ini 复制代码
[Match]
Name=eth0

[Network]
DHCP=yes  # 启用DHCP(ipv4)
# DHCP=ipv6  # 如需ipv6

2. 绑定(Bond)配置(网卡冗余/负载均衡)

eth0eth1 绑定为 bond0,支持多种模式(如 active-backup 主备模式、balance-rr 轮询负载均衡)。

步骤1:定义 bond 设备(20-bond0.netdev
ini 复制代码
[NetDev]
Name=bond0  # bond设备名称
Kind=bond   # 设备类型为bond

[Bond]
Mode=active-backup  # 绑定模式(常用:active-backup/balance-rr)
MIIMonitorSec=1s    # 链路检测间隔
步骤2:将物理网卡加入 bond(30-eth0-bond.network30-eth1-bond.network

物理网卡自身不配置 IP,仅作为 bond 的从设备。

30-eth0-bond.network

ini 复制代码
[Match]
Name=eth0

[Network]
Bond=bond0  # 加入bond0

30-eth1-bond.network

ini 复制代码
[Match]
Name=eth1

[Network]
Bond=bond0  # 加入bond0
步骤3:配置 bond 设备的网络参数(40-bond0.network
ini 复制代码
[Match]
Name=bond0

[Network]
Address=192.168.1.20/24  # bond设备的静态IP
Gateway=192.168.1.1
DNS=114.114.114.114

3. 虚拟局域网(VLAN)配置

bond0 上创建 VLAN 设备(如 VLAN ID=10),独立配置网络。

步骤1:定义 VLAN 设备(50-vlan10.netdev
ini 复制代码
[NetDev]
Name=vlan10  # VLAN设备名称(建议包含ID)
Kind=vlan    # 设备类型为vlan

[VLAN]
Id=10        # VLAN ID(1-4094)
Parent=bond0 # 父接口(可是物理网卡、bond、bridge)
步骤2:配置 VLAN 设备的网络参数(60-vlan10.network
ini 复制代码
[Match]
Name=vlan10

[Network]
Address=192.168.10.10/24  # VLAN 10的子网IP
Gateway=192.168.10.1      # VLAN 10的网关(如存在)
DNS=223.5.5.5

4. 网桥(Bridge)配置

创建网桥 br0,将 bond0 加入网桥(常用于虚拟机网络桥接)。

步骤1:定义网桥设备(70-br0.netdev
ini 复制代码
[NetDev]
Name=br0    # 网桥名称
Kind=bridge # 设备类型为bridge

[Bridge]
STP=yes     # 启用生成树协议(防止环路)
ForwardDelay=2  # 转发延迟(秒,默认2)
步骤2:将 bond0 加入网桥(修改 40-bond0.network

原 bond0 的 .network 文件需移除 IP 配置,改为加入网桥:

ini 复制代码
[Match]
Name=bond0

[Network]
Bridge=br0  # 加入网桥br0(不再配置IP)
步骤3:配置网桥的网络参数(80-br0.network

网桥自身作为逻辑接口,配置 IP:

ini 复制代码
[Match]
Name=br0

[Network]
Address=192.168.2.10/24  # 网桥的IP
Gateway=192.168.2.1
DNS=114.114.114.114

完整配置关系示例

假设场景:eth0 + eth1 绑定为 bond0bond0 加入网桥 br0 → 同时在 bond0 上创建 vlan10

配置文件顺序:

  1. 20-bond0.netdev(定义bond)
  2. 30-eth0-bond.network30-eth1-bond.network(物理网卡加入bond)
  3. 70-br0.netdev(定义网桥)
  4. 40-bond0.network(bond加入网桥)
  5. 50-vlan10.netdev(定义vlan,父接口为bond0)
  6. 60-vlan10.network(vlan配置IP)
  7. 80-br0.network(网桥配置IP)

验证与管理

  • 查看设备状态:networkctl list
  • 查看IP配置:ip addr
  • 重启服务:systemctl restart systemd-networkd
  • 禁用其他网络管理工具(如NetworkManager):systemctl disable --now NetworkManager

通过以上配置,可灵活实现以太网、绑定、VLAN和网桥的组合应用,满足不同网络场景需求。







以下是基于systemd-networkd的以太网、绑定、VLAN和网桥配置的完整方案,结合官方文档与实际案例整理而成:

一、配置前准备

  1. 确保内核支持

    bash 复制代码
    modprobe bonding  # 加载绑定模块
    lsmod | grep bonding  # 验证模块已加载
  2. 配置文件目录

    所有文件需放置在/etc/systemd/network/目录下,建议文件名以数字开头(如10-20-)以确保加载顺序。

二、绑定接口(Bond)配置

1. 创建绑定接口的.netdev文件
ini 复制代码
# /etc/systemd/network/10-bond0.netdev
[NetDev]
Name=bond0
Kind=bond
[Bond]
Mode=802.3ad        # 动态链路聚合模式
MIIMonitorSec=100ms  # 链路监测间隔
LACPTransmitRate=fast # 快速LACP协商
UpDelaySec=100ms     # 链路启动延迟
DownDelaySec=100ms   # 链路故障延迟
2. 绑定物理网卡

为每个物理网卡创建.network文件:

ini 复制代码
# /etc/systemd/network/20-eth0.network
[Match]
Name=eth0
[Network]
Bond=bond0

# /etc/systemd/network/20-eth1.network
[Match]
Name=eth1
[Network]
Bond=bond0
3. 配置绑定接口的IP
ini 复制代码
# /etc/systemd/network/30-bond0.network
[Match]
Name=bond0
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8

三、VLAN配置

1. 创建VLAN接口的.netdev文件
ini 复制代码
# /etc/systemd/network/40-vlan10.netdev
[NetDev]
Name=vlan10
Kind=vlan
[VLAN]
Id=10               # VLAN ID
VLANDev=bond0        # 父接口为bond0
2. 配置VLAN接口的IP
ini 复制代码
# /etc/systemd/network/50-vlan10.network
[Match]
Name=vlan10
[Network]
Address=192.168.2.100/24

四、网桥(Bridge)配置

1. 创建网桥接口的.netdev文件
ini 复制代码
# /etc/systemd/network/60-br0.netdev
[NetDev]
Name=br0
Kind=bridge
[Bridge]
BridgeInterfaces=vlan10  # 添加VLAN接口为成员
2. 配置网桥接口的IP
ini 复制代码
# /etc/systemd/network/70-br0.network
[Match]
Name=br0
[Network]
Address=192.168.3.100/24

五、生效与验证

  1. 重启服务

    bash 复制代码
    systemctl restart systemd-networkd
  2. 验证接口状态

    bash 复制代码
    networkctl status  # 查看所有接口状态
    ip link show bond0  # 检查绑定接口状态
    ip link show vlan10 # 检查VLAN状态
    ip link show br0    # 检查网桥状态
  3. 测试连通性

    bash 复制代码
    ping 192.168.3.1    # 测试网桥IP连通性
    ping 8.8.8.8        # 测试DNS解析

六、高级配置示例

1. 绑定接口使用active-backup模式
ini 复制代码
# /etc/systemd/network/10-bond0.netdev
[Bond]
Mode=active-backup
PrimaryReselectPolicy=always  # 主接口故障后立即切换
2. 网桥添加多个成员接口
ini 复制代码
# /etc/systemd/network/60-br0.netdev
[Bridge]
BridgeInterfaces=vlan10 vlan20  # 添加多个VLAN接口

七、常见问题解决

  1. 配置不生效

    • 检查文件权限:ls -l /etc/systemd/network/
    • 查看日志:journalctl -u systemd-networkd
    • 验证语法:systemd-analyze verify /etc/systemd/network/*.network
  2. 链路切换延迟

    调整MIIMonitorSecLACPTransmitRate参数,例如:

    ini 复制代码
    MIIMonitorSec=50ms
    LACPTransmitRate=fast
  3. VLAN不通

    • 确认交换机已配置对应VLAN
    • 检查父接口(如bond0)是否已正确配置并激活

通过以上步骤,可实现基于systemd-networkd的高可用网络配置,支持绑定、VLAN和网桥的灵活组合。







配置 systemd-networkd 实现以太网+绑定+VLAN+网桥

以下是完整的配置步骤,通过 systemd-networkd 实现以下拓扑:

scss 复制代码
物理接口 (enp3s0f0, enp3s0f1) → 绑定接口 (bond0) → VLAN 接口 (vlan10) → 网桥接口 (br0)
1. 配置物理以太网接口

创建配置文件 /etc/systemd/network/10-physical.network

ini 复制代码
[Match]
Name=enp3s0f0 enp3s0f1  # 物理网卡名称

[Network]
Bond=bond0  # 加入绑定组
2. 创建绑定接口 (Bond)

创建配置文件 /etc/systemd/network/20-bond.netdev

ini 复制代码
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=802.3ad  # 常用绑定模式
TransmitHashPolicy=layer3+4
MIIMonitorSec=1s

支持模式:balance-rr(轮询)、active-backup(主备)、802.3ad(LACP聚合)

3. 配置绑定接口网络

创建配置文件 /etc/systemd/network/30-bond.network

ini 复制代码
[Match]
Name=bond0

[Network]
VLAN=vlan10  # 指定承载的VLAN
4. 创建 VLAN 接口

创建配置文件 /etc/systemd/network/40-vlan10.netdev

ini 复制代码
[NetDev]
Name=vlan10
Kind=vlan

[VLAN]
Id=10  # VLAN ID
5. 配置 VLAN 接口网络

创建配置文件 /etc/systemd/network/50-vlan10.network

ini 复制代码
[Match]
Name=vlan10

[Network]
Bridge=br0  # 加入网桥
6. 创建网桥接口 (Bridge)

创建配置文件 /etc/systemd/network/60-br0.netdev

ini 复制代码
[NetDev]
Name=br0
Kind=bridge
7. 配置网桥网络

创建配置文件 /etc/systemd/network/70-br0.network

ini 复制代码
[Match]
Name=br0

[Network]
Address=192.168.1.100/24  # 网桥IP
Gateway=192.168.1.1
DNS=8.8.8.8
8. 启用并重启服务
bash 复制代码
sudo systemctl enable systemd-networkd
sudo systemctl restart systemd-networkd
9. 验证配置
bash 复制代码
# 查看接口状态
networkctl list

# 检查绑定状态
networkctl status bond0

# 查看VLAN配置
cat /proc/net/vlan/config

# 检查网桥
bridge link show br0

输出应显示:

ini 复制代码
bond0: bond (802.3ad) [slaves: enp3s0f0, enp3s0f1]
vlan10@bond0: vlan [id 10]
br0: bridge [vlan10]

关键配置说明

  1. 绑定模式选择

    • 802.3ad:需交换机支持LACP
    • active-backup:简单主备模式
    • 使用MIIMonitorSec设置链路检测间隔
  2. VLAN隔离

    • 每个VLAN需要独立的.netdev文件
    • VLAN ID在[VLAN]段定义
  3. 网桥优势

    • 支持STP(需额外配置)
    • 可连接虚拟机/容器
    • IP地址配置在网桥而非物理接口
  4. 配置依赖顺序

    graph LR A[物理接口] --> B[绑定接口] B --> C[VLAN接口] C --> D[网桥接口]

注意:所有配置文件需按数字前缀顺序加载,确保依赖关系正确。







以下是使用 systemd-networkd 配置以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)和网桥(Bridge)的详细指南,结合配置文件示例和操作步骤:


一、以太网(Ethernet)基础配置

1. 启用 systemd-networkd 服务
bash 复制代码
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd

需禁用其他网络管理工具(如 NetworkManager):

bash 复制代码
sudo systemctl disable NetworkManager
2. 配置静态 IP 或 DHCP
  • 静态 IP 配置/etc/systemd/network/10-eth0.network):

    ini 复制代码
    [Match]
    Name=eth0
    
    [Network]
    Address=192.168.1.100/24
    Gateway=192.168.1.1
    DNS=8.8.8.8
  • DHCP 配置

    ini 复制代码
    [Match]
    Name=eth0
    
    [Network]
    DHCP=yes

验证

bash 复制代码
networkctl reload  # 重新加载配置
networkctl status eth0  # 查看接口状态

二、绑定(Bond)配置

1. 创建绑定接口(.netdev 文件)
bash 复制代码
# /etc/systemd/network/10-bond0.netdev
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=802.3ad  # 负载均衡模式(可选:active-backup, balance-rr 等)
MIIMonitorSec=1s  # MII 监控间隔
2. 绑定物理接口
bash 复制代码
# /etc/systemd/network/20-eth0.network
[Match]
Name=eth0

[Network]
Bond=bond0
bash 复制代码
# /etc/systemd/network/20-eth1.network
[Match]
Name=eth1

[Network]
Bond=bond0
3. 配置绑定接口 IP
bash 复制代码
# /etc/systemd/network/30-bond0.network
[Match]
Name=bond0

[Network]
Address=192.168.1.200/24
Gateway=192.168.1.1
DNS=8.8.8.8

验证

bash 复制代码
cat /sys/class/net/bond0/bonding/mode  # 查看绑定模式
ip link show bond0  # 检查接口状态

三、虚拟局域网(VLAN)配置

1. 创建 VLAN 子接口(.netdev 文件)
bash 复制代码
# /etc/systemd/network/10-vlan100.netdev
[NetDev]
Name=eth0.100
Kind=vlan

[VLAN]
Id=100  # VLAN ID
2. 配置 VLAN 接口
bash 复制代码
# /etc/systemd/network/20-vlan100.network
[Match]
Name=eth0.100

[Network]
Address=192.168.100.10/24
Gateway=192.168.100.1
DNS=8.8.8.8

验证

bash 复制代码
ip link show eth0.100  # 检查 VLAN 接口
ping 192.168.100.1     # 测试连通性

四、网桥(Bridge)配置

1. 创建网桥设备(.netdev 文件)
bash 复制代码
# /etc/systemd/network/10-br0.netdev
[NetDev]
Name=br0
Kind=bridge
2. 将物理接口加入网桥
bash 复制代码
# /etc/systemd/network/20-eth0.network
[Match]
Name=eth0

[Network]
Bridge=br0
3. 配置网桥 IP
bash 复制代码
# /etc/systemd/network/30-br0.network
[Match]
Name=br0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8

验证

bash 复制代码
bridge link show  # 查看网桥拓扑
ip addr show br0  # 检查网桥 IP

五、高级场景

1. VLAN 桥接
bash 复制代码
# /etc/systemd/network/10-br0.netdev
[NetDev]
Name=br0
Kind=bridge

# /etc/systemd/network/20-vlan100.netdev
[NetDev]
Name=eth0.100
Kind=vlan

[VLAN]
Id=100

# /etc/systemd/network/30-br0.network
[Match]
Name=br0
[Network]
Bridge=br0

# /etc/systemd/network/40-vlan100.network
[Match]
Name=eth0.100
[Network]
Bridge=br0
2. 多 IP 地址配置
ini 复制代码
[Network]
Address=192.168.1.100/24
Address=10.0.0.10/8  # 支持多 IP
Gateway=192.168.1.1

六、常见问题排查

  1. 配置未生效

    • 检查文件名优先级(如 10-eth0.network 优先级高于 20-eth0.network)。
    • 使用 systemd-analyze verify /etc/systemd/network/*.network 验证语法。
  2. 接口未匹配

    • 确认 [Match] 中的条件(如 Name=eth0)与实际接口名一致。
    • 使用 networkctl list 查看接口状态。
  3. DHCP 失败

    • 检查防火墙是否放行 UDP 67/68 端口。
    • 查看日志:journalctl -u systemd-networkd -f

七、配置文件管理建议

  • 文件组织

    bash 复制代码
    /etc/systemd/network/
    ├── 10-bond0.netdev       # 绑定设备定义
    ├── 20-eth0.network       # 物理接口绑定到 bond0
    ├── 10-br0.netdev         # 网桥设备定义
    └── 30-br0.network        # 网桥 IP 配置
  • 服务依赖

    bash 复制代码
    [Install]
    WantedBy=multi-user.target  # 确保服务开机启动

通过以上配置,可灵活实现复杂网络拓扑。更多细节可参考 man systemd.network 或官方网页 。







在 systemd-networkd 中配置以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)和网桥(Bridge)需通过创建 .netdev.network 配置文件(路径为 /etc/systemd/network/),优先级按文件名数字升序生效。以下是详细配置方法及示例:


🔧 一、以太网(Ethernet)配置

适用场景:服务器静态 IP 或 DHCP 动态获取。

  1. 静态 IP 配置

    ini 复制代码
    # /etc/systemd/network/10-eth0.network
    [Match]
    Name=eth0                  # 匹配接口名
    
    [Network]
    Address=192.168.1.100/24   # IPv4 地址
    Gateway=192.168.1.1         # 网关
    DNS=8.8.8.8                # DNS 服务器
  2. DHCP 配置

    ini 复制代码
    [Network]
    DHCP=yes                   # 启用 DHCP

生效命令

bash 复制代码
sudo systemctl restart systemd-networkd

🔗 二、绑定(Bond)接口配置

适用场景:多网卡冗余或负载均衡(需交换机支持 LACP)。

  1. 创建 Bond 设备

    ini 复制代码
    # /etc/systemd/network/10-bond0.netdev
    [NetDev]
    Name=bond0                # 绑定接口名
    Kind=bond                 # 类型为绑定
    
    [Bond]
    Mode=802.3ad              # 绑定模式(LACP)
    MIIMonitorSec=1s          # 链路检测间隔
  2. 将物理网卡加入 Bond

    ini 复制代码
    # /etc/systemd/network/20-eth0.network
    [Match]
    Name=eth0
    
    [Network]
    Bond=bond0                # 绑定到 bond0
  3. 配置 Bond 接口 IP

    ini 复制代码
    # /etc/systemd/network/30-bond0.network
    [Match]
    Name=bond0
    
    [Network]
    Address=192.168.1.100/24
    Gateway=192.168.1.1

🌐 三、虚拟局域网(VLAN)配置

适用场景:网络逻辑隔离(需交换机配置 Trunk 口)。

  1. 创建 VLAN 子接口

    ini 复制代码
    # /etc/systemd/network/10-vlan10.netdev
    [NetDev]
    Name=eth0.10             # VLAN 接口名
    Kind=vlan                # 类型为 VLAN
    
    [VLAN]
    Id=10                    # VLAN ID
  2. 配置 VLAN IP

    ini 复制代码
    # /etc/systemd/network/20-vlan10.network
    [Match]
    Name=eth0.10
    
    [Network]
    Address=192.168.10.10/24

🌉 四、网桥(Bridge)配置

适用场景:虚拟化或容器网络(如 KVM、Docker)。

  1. 创建网桥设备

    ini 复制代码
    # /etc/systemd/network/10-br0.netdev
    [NetDev]
    Name=br0                 # 网桥名
    Kind=bridge              # 类型为网桥
  2. 将物理接口加入网桥

    ini 复制代码
    # /etc/systemd/network/20-eth0.network
    [Match]
    Name=eth0
    
    [Network]
    Bridge=br0               # 绑定到网桥
  3. 配置网桥 IP

    ini 复制代码
    # /etc/systemd/network/30-br0.network
    [Match]
    Name=br0
    
    [Network]
    DHCP=yes                 # 或静态 IP

⚠️ 五、关键注意事项

  1. 配置文件优先级

    • 文件名格式为 数字-名称.network(如 10-eth.network),数字越小优先级越高。
    • 目录优先级:/etc/systemd/network/ > /run/systemd/network/ > /usr/lib/systemd/network/
  2. 服务管理命令

    bash 复制代码
    systemctl restart systemd-networkd  # 重启服务
    networkctl status eth0             # 检查接口状态
    journalctl -u systemd-networkd     # 查看日志
  3. 冲突处理

    • 禁用其他网络管理工具(如 NetworkManager):

      bash 复制代码
      sudo systemctl disable --now NetworkManager
  4. 高级调试

    • 检查配置语法:systemd-analyze verify /etc/systemd/network/*.network
    • 验证 VLAN Trunk 支持:加载 8021q 内核模块并配置交换机端。

📊 六、配置对比与适用场景

网络类型 配置文件 核心参数 典型场景
以太网 .network Address, DHCP 服务器静态 IP/DHCP
绑定(Bond) .netdev+.network Mode=802.3ad 网卡冗余/负载均衡
VLAN .netdev+.network Kind=vlan, Id=10 网络逻辑隔离
网桥 .netdev+.network Kind=bridge 虚拟机/容器网络

🔍 七、故障排查

  • IP 未生效 :检查 [Match] 条件是否匹配接口名(如 eth0 vs enp0s3)。
  • DHCP 失败 :确保防火墙放行 UDP 67/68 端口,并确认 DHCP=yes 已启用。
  • VLAN 未识别:验证物理接口已启用且交换机 Trunk 配置正确。

通过以上配置,可高效管理服务器网络拓扑。对于动态网络(如笔记本无线切换),仍推荐 NetworkManager;而服务器静态环境,systemd-networkd 凭借轻量与集成优势是更优选择。







以下是使用 systemd-networkd 配置以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)和网桥(Bridge)的详细指南,基于最新实践整理:


🔧 一、以太网(Ethernet)

1. 静态 IP 配置

创建配置文件 /etc/systemd/network/20-eth0.network

ini 复制代码
[Match]
Name=eth0  # 网卡名称(通过 `ip a` 查询)

[Network]
Address=192.168.1.100/24  # 主 IPv4 地址
Address=192.168.1.101/24  # 附加 IPv4 地址
Gateway=192.168.1.1       # IPv4 网关
DNS=8.8.8.8               # DNS 服务器
DHCP=no                   # 关闭 DHCP
2. DHCP 动态 IP 配置
ini 复制代码
[Match]
Name=eth0

[Network]
DHCP=yes  # 启用 IPv4 DHCP

验证命令

  • networkctl status eth0:检查接口状态和配置
  • ip a show eth0:查看分配的 IP 地址

🔗 二、绑定(Bond)

绑定用于链路聚合,提升带宽或冗余性。

1. 创建 Bond 接口

配置文件 /etc/systemd/network/10-bond0.netdev

ini 复制代码
[NetDev]
Name=bond0
Kind=bond
[Bond]
Mode=active-backup  # 模式:主备冗余
PrimaryReselectPolicy=always
MIIMonitorSec=1s     # 链路检测间隔
2. 配置 Bond 从属接口

配置文件 /etc/systemd/network/20-bond0-slave.network

ini 复制代码
[Match]
Name=eth1  # 从属接口1

[Network]
Bond=bond0  # 绑定到 bond0
3. 为 Bond 接口分配 IP

配置文件 /etc/systemd/network/30-bond0.network

ini 复制代码
[Match]
Name=bond0

[Network]
Address=10.0.0.10/24
Gateway=10.0.0.1

常用 Bond 模式

模式 作用 适用场景
active-backup 主备冗余 高可用性
balance-rr 轮询负载均衡 带宽聚合
802.3ad LACP 动态聚合 交换机支持时

🌐 三、虚拟局域网(VLAN)

1. 创建 VLAN 子接口

配置文件 /etc/systemd/network/10-vlan100.netdev

ini 复制代码
[NetDev]
Name=vlan100
Kind=vlan

[VLAN]
Id=100  # VLAN ID(必须与交换机一致)
2. 绑定 VLAN 到物理接口

配置文件 /etc/systemd/network/20-vlan100.network

ini 复制代码
[Match]
Name=eth0  # 物理父接口

[Network]
VLAN=vlan100  # 关联 VLAN
3. 为 VLAN 分配 IP

配置文件 /etc/systemd/network/30-vlan100.network

ini 复制代码
[Match]
Name=vlan100

[Network]
Address=192.168.100.10/24

关键点

  • 确保物理接口支持 VLAN(加载 8021q 模块:sudo modprobe 8021q
  • 交换机端口需配置为 Trunk 模式

🌉 四、网桥(Bridge)

网桥用于连接多个网络段(如虚拟机网络)。

1. 创建网桥设备

配置文件 /etc/systemd/network/10-br0.netdev

ini 复制代码
[NetDev]
Name=br0
Kind=bridge

[Bridge]
STP=on  # 生成树协议防环
2. 绑定物理接口到网桥

配置文件 /etc/systemd/network/20-br0-slave.network

ini 复制代码
[Match]
Name=eth0  # 物理接口

[Network]
Bridge=br0  # 加入网桥
3. 为网桥分配 IP

配置文件 /etc/systemd/network/30-br0.network

ini 复制代码
[Match]
Name=br0

[Network]
Address=192.168.10.1/24
DHCP=no

典型场景

  • 虚拟机网络(KVM/QEMU)通过网桥连接外部网络
  • 容器网络隔离

⚙️ 五、服务管理与验证

  1. 启用服务

    bash 复制代码
    sudo systemctl enable --now systemd-networkd
    sudo systemctl restart systemd-networkd  # 应用配置变更
  2. 验证工具

    • networkctl list:查看所有接口状态(含 Bond/VLAN/Bridge)
    • networkctl status bond0:检查绑定接口细节
    • bridge link show:查看网桥绑定端口

⚠️ 六、注意事项

  1. 配置文件优先级
    /etc/systemd/network/ > /run/systemd/network/ > /usr/lib/systemd/network/
  2. 服务冲突
    禁用 NetworkManager:sudo systemctl disable --now NetworkManager
  3. 接口命名
    使用 ip a 确认物理接口名称(如 enp0s3

通过组合上述配置,可实现复杂网络拓扑(如 Bond+VLAN 或 Bridge+VLAN)。详细参数参考 man systemd.networkman systemd.netdev







以下是使用 systemd-networkd 配置以太网、Bond、VLAN 和 Bridge 的详细步骤和示例配置:


1. 以太网(Ethernet)基础配置

假设物理接口名为 enp1s0,启用 DHCP:

ini 复制代码
# /etc/systemd/network/10-enp1s0.network
[Match]
Name=enp1s0

[Network]
DHCP=yes

2. Bond(绑定)配置

2.1 创建 Bond 接口 bond0 (模式为 active-backup):
ini 复制代码
# /etc/systemd/network/20-bond0.netdev
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=active-backup
PrimaryReselectPolicy=always
MIIMonitorSec=1s
ini 复制代码
# /etc/systemd/network/20-bond0.network
[Match]
Name=bond0

[Network]
# 静态 IP 示例:
Address=192.168.1.10/24
Gateway=192.168.1.1
DNS=8.8.8.8
# 或使用 DHCP:
# DHCP=yes
2.2 enp1s0enp2s0 加入 Bond
ini 复制代码
# /etc/systemd/network/10-enp1s0.network
[Match]
Name=enp1s0

[Network]
Bond=bond0

# /etc/systemd/network/10-enp2s0.network(同上)
[Match]
Name=enp2s0

[Network]
Bond=bond0

3. VLAN 配置

bond0 上创建 VLAN ID 为 100 的接口:

ini 复制代码
# /etc/systemd/network/30-bond0.100.netdev
[NetDev]
Name=bond0.100
Kind=vlan

[VLAN]
Id=100
ini 复制代码
# /etc/systemd/network/30-bond0.100.network
[Match]
Name=bond0.100

[Network]
Address=10.0.100.2/24

4. Bridge(网桥)配置

创建网桥 br0,并将 bond0.100 加入桥接:

ini 复制代码
# /etc/systemd/network/40-br0.netdev
[NetDev]
Name=br0
Kind=bridge

[Bridge]
ForwardDelaySec=0
STP=no
ini 复制代码
# /etc/systemd/network/40-br0.network
[Match]
Name=br0

[Network]
Address=10.0.100.1/24
ini 复制代码
# /etc/systemd/network/30-bond0.100.network(修改)
[Match]
Name=bond0.100

[Network]
Bridge=br0  # 仅作为桥接端口,无需配置 IP

配置生效

  1. 重载配置

    bash 复制代码
    systemctl restart systemd-networkd
  2. 验证状态

    bash 复制代码
    networkctl status
    ip link show     # 查看接口状态
    bridge link      # 查看桥接端口

注意事项

  1. 依赖顺序 :文件名按 00-*.netdev10-*.network 的顺序命名,确保配置按依赖关系加载。
  2. DHCP 冲突:确保同一网络内只有单个接口启用 DHCP。
  3. VLAN 父接口 :VLAN 的父接口(如 bond0)必须存在且已配置。

调整参数(如 Bond 模式、VLAN ID、IP 地址)即可适配具体场景。







以下是针对 Linux 系统 systemd-networkd 的网络配置指南,涵盖 以太网、绑定(Bonding)、VLAN、网桥 的典型场景配置方法。所有配置均基于 .network.netdev 配置文件。


1. 以太网(Ethernet)配置

场景 : 直接配置物理网卡(如 eth0)的 IP 地址。

配置文件:
  • 文件名 : /etc/systemd/network/20-eth0.network
ini 复制代码
[Match]
Name=eth0

[Network]
DHCP=yes               # 启用 DHCP
# 或手动指定静态 IP
# Address=192.168.1.100/24
# Gateway=192.168.1.1
# DNS=8.8.8.8

2. 绑定(Bonding)配置

场景 : 将多个物理网卡(如 eth0eth1)绑定为一个逻辑接口(bond0),提升带宽或冗余。

步骤 1: 创建 Bond 接口
  • 文件名 : /etc/systemd/network/10-bond0.netdev
ini 复制代码
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=active-backup     # 可选模式:balance-rr, active-backup, 802.3ad 等
PrimaryReselectPolicy=always
MIIMonitorSec=1s       # 链路检测间隔
步骤 2: 将物理网卡加入 Bond
  • 文件名 : /etc/systemd/network/20-eth0-bond.network
ini 复制代码
[Match]
Name=eth0

[Network]
Bond=bond0
  • 文件名 : /etc/systemd/network/20-eth1-bond.network
ini 复制代码
[Match]
Name=eth1

[Network]
Bond=bond0
步骤 3: 配置 Bond 接口的 IP
  • 文件名 : /etc/systemd/network/30-bond0.network
ini 复制代码
[Match]
Name=bond0

[Network]
DHCP=yes
# 或静态 IP
# Address=192.168.1.100/24
# Gateway=192.168.1.1

3. VLAN 配置

场景 : 在物理接口(如 eth0)上创建 VLAN 子接口(如 vlan10)。

步骤 1: 创建 VLAN 接口
  • 文件名 : /etc/systemd/network/10-vlan10.netdev
ini 复制代码
[NetDev]
Name=vlan10
Kind=vlan

[VLAN]
Id=10                  # VLAN ID
步骤 2: 配置 VLAN 接口的父接口
  • 文件名 : /etc/systemd/network/20-eth0-vlan.network
ini 复制代码
[Match]
Name=eth0

[Network]
VLAN=vlan10
步骤 3: 配置 VLAN 的 IP
  • 文件名 : /etc/systemd/network/30-vlan10.network
ini 复制代码
[Match]
Name=vlan10

[Network]
Address=192.168.10.100/24
Gateway=192.168.10.1
DNS=8.8.8.8

4. 网桥(Bridge)配置

场景 : 创建一个网桥(br0),将物理接口(如 eth0)或其他虚拟接口加入网桥。

步骤 1: 创建网桥接口
  • 文件名 : /etc/systemd/network/10-br0.netdev
ini 复制代码
[NetDev]
Name=br0
Kind=bridge

[Bridge]
STP=on                # 生成树协议(可选)
步骤 2: 将物理接口加入网桥
  • 文件名 : /etc/systemd/network/20-eth0-bridge.network
ini 复制代码
[Match]
Name=eth0

[Network]
Bridge=br0
步骤 3: 配置网桥的 IP
  • 文件名 : /etc/systemd/network/30-br0.network
ini 复制代码
[Match]
Name=br0

[Network]
DHCP=yes
# 或静态 IP
# Address=192.168.1.100/24
# Gateway=192.168.1.1

关键操作命令

  1. 重启服务 :

    bash 复制代码
    systemctl restart systemd-networkd
  2. 查看网络状态 :

    bash 复制代码
    networkctl list
    networkctl status bond0      # 检查指定接口状态
  3. 调试日志 :

    bash 复制代码
    journalctl -u systemd-networkd -f

注意事项

  • 文件命名顺序 : systemd-networkd 按文件名顺序加载配置(如 10- 优先于 20-)。
  • 多网卡场景: Bond、VLAN、Bridge 可组合使用(例如:在 Bond 上创建 VLAN,再接入 Bridge)。
  • 防火墙 : 确保防火墙(如 iptablesnftables)允许相关流量。

如果有更具体的需求(如高级 Bonding 模式或 IPv6 配置),请提供详细信息!

相关推荐
亚马逊云开发者40 分钟前
将 Go 应用从 x86 平台迁移至 Amazon Graviton:场景剖析与最佳实践
linux·数据库·golang
大叔是90后大叔1 小时前
Linux/Ubuntu安装go
linux·ubuntu·golang
孙克旭_1 小时前
day051-ansible循环、判断与jinja2模板
linux·运维·服务器·网络·ansible
渡我白衣1 小时前
Linux操作系统之进程间通信:共享内存
linux
Mr_Orangechen2 小时前
Linux 下使用 VS Code 远程 GDB 调试 ARM 程序
linux·运维·arm开发
DoraBigHead2 小时前
《电磁波的浪漫,铜线上的灵魂》——计算机网络·物理层全解版
网络协议
lilian1293 小时前
linux系统mysql性能优化
linux·运维·mysql
共享家95273 小时前
linux_线程概念
linux·开发语言·jvm
FCM663 小时前
HCIA第一次实验报告:静态路由综合实验
网络·tcp/ip·信息与通信
apihz3 小时前
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
android·服务器·开发语言·网络·数据库·网络协议·tcp/ip