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