Loading... ## 前言 在前一篇文章 [Arch Linux 安装篇](<a href="https://www.10101.io/2021/07/04/arch-linux-installation)" title="https://www.10101.io/2021/07/04/arch-linux-installation)">https://www.10101.io/2021/07/04/arch-linux-installation)</a> 中有提到连接网络可以选择多种方式,如 iwd、netctl、systemd-networkd、NetworkManager 等。由于我对于 GUI 的要求不是那么高,最终我选择的是 systemd-networkd + iwd 的方式管理和连接网络。 由于平时可能需要用到集聚接口 / vlan 子接口,所以查找了下 systemd-networkd 创建集聚接口和 vlan 子接口的相关资料,特做记录。 ps: 文章其实和 Arch 这个特定的 Linux 发行版没啥大关系,只是决定使用 Arch 这个发行版了,后续的 Linux 上的一些使用方面的记录可能都会冠以 「Arch Linux 使用小记」这个 title。 ## 接口配置文件 systemd 配置接口主要涉及的文件有 `netdev` 及 `network` 。 ### netdev 文件 netdev 文件用于配置虚拟网络设备,例如 bond / vlan / tun / wireguard 等各种类型的接口,详见 [systemd.netdev](https://man.archlinux.org/man/systemd.netdev.5) 主要配置的字段有 `[NetDev]` 及具体的接口类型段。 ### network 文件 network 文件用于配置接口具体的网络信息,如 IP / MAC / 路由等,详见 [systemd.network](https://man.archlinux.org/man/systemd.network.5) 主要配置的字段有 `[Match]` 及 `[Network]` 。 ## 集聚接口 [Debian Wiki](https://wiki.debian.org/Bonding#Configuring_the_bond_device) 中提到 systemd 默认会创建一个名为 bond0 模式为 `balance round robin` 的集聚口,且模式不可更改(未去验证),所以为避免可能出现问题以下配置时均不采用 bond0 这个名字。 更改配置后,可执行 `systemctl restart systemd-networkd` 生效。 ### 有线与无线聚合 这个的需求主要是有线和无线之间作为主备,比如拔掉网线,可以无缝使用无线网络进行连接。 1. 创建集聚口 netdev 文件,如 `/etc/systemd/network/bond1.netdev`: ````````ini [NetDev] Name=bond1 # 创建的集聚口名字 Kind=bond # 类型为 bond [Bond] Mode=active-backup # 模式为 active-backup,即主备模式 PrimaryReselectPolicy=always MIIMonitorSec=1s ```````` 2. 创建集聚口 network 文件,如 `/etc/systemd/network/bond1.network`: ```ini [Match] Name=bond1 # 需要匹配的集聚口名字 [Network] DHCP=ipv4 ``` 3. 创建有线接口 network 文件,如 `/etc/systemd/network/eno1.network`: ```ini [Match] Name=eno1 # 需要匹配的有线接口名字 [Network] Bond=bond1 # 属于的 bond 接口 PrimarySlave=true # 优先使用有线 ``` 4. 创建无线接口 network 文件,如 `/etc/systemd/network/wireless.network`: ```ini [Match] Name=wlan0 # 无线接口名字 [Network] Bond=bond1 # 属于的 bond 接口 ``` ### LACP 动态链路聚合 这个的需求主要是 Linux 上联交换机时,为增大带宽,Linux 与交换机相连的接口做聚合,并且开启 LACP 进行动态协商。 1. 创建集聚接口 netdev 文件,如 `/etc/systemd/network/bond2.netdev`: ```ini [NetDev] Name=bond2 # 集聚接口名字 Description=LAG/Bond to a switch Kind=bond [Bond] Mode=802.3ad # 集聚接口工作模式,802.3ad 即为 lacp ``` 2. 创建集聚接口 network 文件,如 `/etc/systemd/network/bond2.network`: ```ini [Match] Name=bond2 # 匹配的集聚接口名字 [Network] BindCarrier=enp4s0f0 enp4s0f1 # 集聚接口的成员接口名 ``` 3. 创建集聚接口的成员接口 network 文件,这里我将两个成员接口放在一个 network 文件中,如 `/etc/systemd/network/bond2_members.network`: ```ini [Match] Name=enp4s0f0 Name=enp4s0f1 # 匹配的成员接口名,可以使用模糊匹配,这里我用的精确的接口名字 [Network] Bond=bond2 # 属于的集聚口名 ``` ## VLAN 子接口 物理接口有限,我需要创建一些 vlan 子接口满足一些特别的需求。这里以在上面步骤中创建的集聚接口为基础添加 vlan 子接口为例,物理接口添加方法类似。 1. 修改 `/etc/systemd/network/bond2.network` 文件,添加 vlan 子接口配置: ``````ini [Match] Name=bond2 [Network] BindCarrier=enp4s0f0 enp4s0f1 VLAN=bond2.401 # vlan 接口名 VLAN=bond2.402 VLAN=bond2.403 VLAN=bond2.404 `````` 2. 创建相应的 vlan 子接口 netdev 文件,以 bond2.401 接口为例,如 `/etc/systemd/network/bond2.401.netdev`: ```ini [NetDev] Name=bond2.401 # vlan 接口名 Kind=vlan # 虚拟设备类型为 vlan [VLAN] Id=401 # vlan id 为 401 ``` 3. 如果需要对 vlan 子接口做 IP 或者路由等网络配置的话,可以创建相应的 network 文件,这里不再赘述。 ## 参考资料 - [Configuring the bond device](https://wiki.debian.org/Bonding#Configuring_the_bond_device) - [network_systemd](https://roll.urown.net/server/network_systemd.html) - [VLAN](https://wiki.archlinux.org/title/VLAN) 最后修改:2021 年 07 月 24 日 © 允许规范转载 赞 0 如果觉得我的文章对你有用,请随意赞赏