简单的stream量整形设置

我有:

  • 2个linux盒子(A,B)
  • 1个开关(S)
  • 1门户(G)[我无法控制这个]
+---------------+ | switch S +-------+ +---+--------+--+ | | | +--+-+ | | | gw | +--+-+ +--+-+ +----+ | A | | B | +----+ +----+ 

仅仅为了一些testing的目的,我需要在来自A的stream量到达网关G之前形成stream量 。我用tcpreplay在MAC层注入stream量,所以我不能直接对A进行整形。

我的想法是:

  • 路由到B从A的所有stream量
  • 在B(Linuxstream量控制或虚拟networking)上应用stream量整形
  • 重新路由到网关G到达B的所有stream量

我的解决scheme好吗? 有一个更简单的B不需要两个(以太网)networking接口?

B上的虚拟networking接口会让我的生活更轻松吗?

为了部署上述设置(不包括stream量整形),我需要哪些典型命令?

一些想法:

  1. 你甚至可以塑造来自A和B即使在GW的传出stream量!
  2. 如果你的交换机有点聪明…它没有embedded式Linux?
  3. 如果您通过B路由,请注意,B上需要一些networking标志设置才能正确处理arpredirect。

您的解决scheme的主要问题是,它会使B从属于A的networking。您的networking将更加不稳定。

尽pipe你的解决scheme从B linux本质上是一个智能的,基于Linux的路由器。 如果“gw”和“switch S”是虚拟的,而B是聪明的,那么你甚至可以考虑至less丢掉其中的一个,使B成为真正的网关。

你不需要为此做任何路由技巧,也不需要虚拟接口。

您只需在离开系统A时调整stream量

大纲正是你想要做的,这是微不足道的,写一个'tc'的规则。

例如,假设你想把A限制在1mbit / s的所有传出stream量上:

 # Flush tc tc qdisc del dev eth0 root &> /dev/null tc qdisc add dev eth0 root handle 1: htb default 1 tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit 

完成。

从A运行速度testing,您将看到您的传入stream量可能不受影响,但您的传出stream量限制为每秒1 Mebibit。

为什么我说“传入可能未受影响”? 因为如果你有很高的传入速率,你的ACK数据包可能会超过1Mbit的限制,并被限制。 如果您的确认速度变慢,您的传入stream量也会变慢。


如果你不能在A上使用tc或iptables,比如你的stream量对tc / iptables不可见 – 例如tcpreplay,那么你需要在B上进行stream量控制。

为此,至less有以下三种方式来做到这一点。

  1. 为B购买一块网卡,把A / B1放在networking1上,B2 /网关放在networking2上。即B成为网关。 现在使用“tc”来塑造A的stream量。

  2. B上的多个家庭eth0,即eth0:1 – > 172.16.5.0/24,给这个networking中的一个地址。 configurationB在eth0和eth0:1之间转发stream量,标记并整形到主网关的stream量(tc)。

  3. 使用'brctl'在eth0上创build一个网桥,并为A / B和B / gw创build接口,并再次标记和整形到主网关的stream量(tc)。