李守中

Debian 网络配置笔记

Table of Contents

1 基础网络连接

有关 /etc/network/interfaces 文件全面的配置信息可以查看 man interfaces ,这里只给例子。

sudo vim /etc/network/interfaces 开始编辑配置文件。两个接口配置之间必须用空行隔开。

给一个配置静态 IP 的例子:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# eno1 is the interface name
auto eno1
iface eno1 inet static
    address 192.168.1.110/24
    gateway 192.168.1.3
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 192.168.1.6
    dns-search debian.local

给一个使用 DHCP 的例子:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# eno1 is the interface name
auto eno1
iface eno1 inet dhcp

2 bond 网络接口

执行 sudo apt install ifenslave 安装 bond 功能包。

bond 可以让多个网络接口被组合成一个虚拟的网络接口。

bond 提供了七种工作模式,在使用的时候需要指定一种:

工作模式 简写 需要交换机支持 容错 带宽叠加 负载均衡 简略描述
balance-rr 默认 mode=0 Y Y Y Y 各网口轮流发包,吞吐量均衡。
active-backup mode=1   Y     仅一个接口在工作,故障时切换到另一个接口。
balance-xor mode=2 Y Y   Y 根据算法选择数据包流出端口。
broadcast mode=3   Y     每个接口都要发送每个要发出的数据包。
802.3ad mode=4 Y Y Y Y IEEE 802.3ad 动态链路聚合。
balance-tlb mode=5   Y Y Y 用 ARP 协商实现发包负载均衡,但只有一个接口收包。
balance-alb mode=6   Y Y Y 基于 balance-tlb,再用 ARP 协商实现收包负载均衡。

有高端交换机的,常用 0 4 模式,没有高端交换机的,常用 1 6 模式。下面是详细说明。

2.1 balance-rr 平衡轮询策略

特点: 传输数据包顺序是依次传输。比如,第 1 个包走 eth0,下一个包走 eth1… 如此循环。需要配置交换机端口聚合,思科管这个叫 port channel

效果: 链路负载均衡,带宽叠加,支持容错。一条链路故障不会导致网络中断。

缺点: 如果一个连接或者会话的数据包从不同的接口发出,中途再经过不同的链路到客户端,很有可能会出现数据包无序到达的问题。如果数据包无序到达目的机器,目的机器会要求服务器重发数据包,网络吞吐量降低。实际使用中负载均衡的效果也不大行。

2.2 active-backup 主备策略

特点: 只有一个接口在 active 工作状态,剩下的所有接口在 standby 待机状态。当工作状态的接口不工作,系统将会按顺序选择下一个待机状态的接口作为主接口。所有接口共享一个 MAC 地址。

效果: 只提供了容错能力。

缺点: 只有一个接口处于工作状态,资源利用率低。在有 N 个网络接口的情况下,资源利用率为 1/N。

2.3 balance-xor 平衡策略

特点: 基于指定的 HASH 策略选择端口发送数据包。策略是: (源MAC地址 XOR 目标MAC地址) % 网络接口数量 。其他的传输策略可以通过 xmit_hash_policy 选项指定。

和 balance-rr 一样,交换机端口需要能配置为 port channel

效果: 保证到达特定对端的流量总是从同一个接口上发出。支持负载均衡,支持容错。

缺点: 只有一个网关时,源和目标 mac 都固定了,那么这个算法算出的线路就一直是同一条,那么这种模式就没有多少意义了。即,如果所有流量是通过单个路由器,那该模式就不是最好的选择。

2.4 broadcast 广播策略

特点: 在每个网络接口上传输每个数据包。

效果: 所有包从所有网络接口发出。

缺点: 只有冗余机制,过于浪费资源。

此模式适用于为金融行业提供高可靠性的网络。

2.5 LACP ( 802.3ad ) 动态链接聚合

特点: 创建一个聚合组,它们在同样的速率和双工设定下工作。根据 802.3ad 规范将多个网络接口汇聚在一起。使用 802.3ad 协议和交换机的 LACP 链路聚合方式配合。

效果: 多个物理接口合并为一个逻辑接口。支持负载均衡,容错机制,带宽叠加。

缺点: 和除了 balance-rr 模式外的其它 bonding 负载均衡模式一样,任何连接的速度上限都不能大于一个接口的速度上限。

发送数据的网络接口选举基于传输 hash 策略。该策略通过 xmit_hash_policy 选项从缺省的 XOR 策略改变到其他策略。需要注意的是,并不是所有的传输策略都兼容 802.3ad 协议,

尤其考虑到在 802.3ad 标准 43.2.4 章节提及的包乱序问题。不同的实现可能会有不同的适应性。

必要条件:

  • ethtool 支持获取每个 slave 的速率和双工设定。
  • 交换机支持 IEEE 802.3ad Dynamic link aggregation。
  • 大多数交换机需要经过特定配置才能支持 802.3ad 模式。

2.6 balance-tlb 适配器传输负载均衡

特点: 发送负载均衡与带宽叠加。不需要交换机配合。

效果: 发送单向带宽叠加,支持容错。

缺点: 收包时仅使用一个网卡的 MAC 地址,即,仅有一张网卡用于收包。这种模式适合用在 出向流量巨大而入向流量小 的情况下。如果 server 也要负责大量数据的接收,那么无法充分利用多个接口。

发送负载均衡实现思路: 当服务器要传数据出去给单一一个客户端时,bonding 模块会主动的拦截封包,并通过 ARP 协商机制,将不同的网卡要送出到同一个客户端的封包,都改写成单一一个固定的发送端 MAC 地。

2.7 balance-alb 适配器适应性负载均衡

特点: 在 balance-tlb 基础上,加入针对 IPV4 流量的接收负载均衡 RLB ( receive load balance ) 策略。不需要交换机配合。接收负载均衡通过 ARP 协商实现。

效果: 收发双向带宽叠加,支持容错。

缺点: 在实际使用上 balance-alb 与 balance-rr 的主要区别在于,balance-alb 先把 eth0 流量占满,再占 eth1 … ethX。也就是第一个端口负载很高,后面的接口负载很小。而 balance-rr 所有接口的流量都很稳定,负载基本平衡。

接收负载均衡实现思路: 当有数据封包要送出到多个不同的客户端时,此模式的 bonding 模块就会透过 ARP 协商机制,找出 bonding 管理的比较闲置的网卡 MAC 分配给下个客户端。如此,不同的用户端回传给服务器的数据,就可以透过不同的网卡来接收,达到接收也合并带宽的功能。

2.8 配置写法

直接给例子:

# The loopback network interface
auto lo
iface lo inet loopback

iface eno1 inet manual

iface enp4s0 inet manual

auto bond0
iface bond0 inet dhcp
    bond-mode balance-alb
    bond-slaves eno1 enp4s0
    bond-miimon 100

bond-miimon 100 表示系统每 100ms 监测一次链路连接状态,根据链路状态决定是否进行其他操作。比如 active-backup 策略下,如果检测到正在使用的网络接口无法使用导致链路不通,则切换到另一个接口,两次检测间隔 100ms。

3 bridge 网络接口

执行 sudo apt install bridge-utils 安装工具包, man brctl 查看命令行工具的用法。

bridge 把所有的物理网络接口组合在一起,创建了一个虚拟的交换机。bridge 主要是为虚拟机或容器创造通信条件,它有和物理交换机一样的功能。虚拟交换机所在的宿主机也被接在这个虚拟交换机上。

被用来创建 bridge 的网络接口,可以是物理接口,也可以是 bond 接口。

使用物理接口:

# The loopback network interface
auto lo
iface lo inet loopback

iface eno1 inet manual

iface enp4s0 inet manual

auto br0
iface br0 inet dhcp
    bridge-ports eno1 enp4s0
    bridge-stp off
    bridge-fd 0

使用 bond 接口:

# The loopback network interface
auto lo
iface lo inet loopback

iface eno1 inet manual

iface enp4s0 inet manual

auto bond0
iface bond0 inet manual
    bond-mode balance-alb
    bond-slaves eno1 enp4s0
    bond-miimon 100

auto br0
iface br0 inet dhcp
    bridge-ports bond0
    bridge-stp off
    bridge-fd 0


Last Update: 2023-05-18 Thu 10:59

Contact: [email protected]     Generated by: Emacs 27.1 (Org mode 9.3)

若正文中无特殊说明,本站内容遵循: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议