流量整形的简单设置

流量整形的简单设置

我有:

  • 2 个 Linux 盒 (A、B)
  • 1 个开关(S)
  • 1 个网关(G)[我无法控制这个]
+---------------+          
|  switch S     +-------+  
+---+--------+--+       |  
    |        |       +--+-+
    |        |       | gw |
 +--+-+   +--+-+     +----+
 | A  |   | B  |           
 +----+   +----+

出于一些测试目的,我需要塑造交通来自 A 的流量在到达网关 G 之前。我在 MAC 层用 向 A 注入流量tcpreplay,因此无法直接在 A 上进行整形。

我的想法是:

  • 将来自 A 的所有流量路由到 B
  • 在 B 上应用流量整形(Linux 流量控制或虚拟网络)
  • 将来自 A 到达 B 的所有流量重新路由到网关 G

我的解决方案可以吗?有没有更简单的解决方案,不需要 B 上的两个 (以太网) 网络接口?

虚拟网络接口B 能让我的生活更轻松吗?

为了部署上述设置(流量整形除外),我需要哪些典型命令?

答案1

一些想法:

  1. 您甚至可以在 GW 上塑造来自 A 和 B 的传出流量!
  2. 如果您的交换机更智能一点...它不是有嵌入式 Linux 吗?
  3. 如果您通过 B 进行路由,请注意,B 上需要在 B 上进行一些网络标志设置才能正确处理 arp 重定向。

您的解决方案的主要问题是它会让 A 的网络依赖于 B。您的网络将更加不稳定。

尽管您的解决方案使 B Linux 本质上成为基于 Linux 的智能路由器。如果“gw”和“交换机 S”是虚拟的,而 B 是智能的,您甚至可以考虑丢弃其中至少一个,并将 B 设置为您的真实网关。

答案2

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

您只需在流量离开系统 A 时对其进行整形即可。

明确概述您想要做的事情,为其编写“tc”规则就很简单了。

例如,假设您想将 A 的所有传出流量限制为 1mbit/s:

# 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 运行速度测试,您会发现您的传入流量可能不受影响,但您的传出流量限制为每秒 1 Mebibit。

为什么我说“即将到来大概不受影响?因为如果你的 ACK 数据包的传入速率非常高,可能超过 1Mbit 限制,就会受到限制。如果您的 ACK 速度变慢,您的传入流量也会变慢。


如果您无法在 A 上使用 tc 或 iptables - 例如您的流量对于 tc/iptables 是不可见的 - 例如 tcpreplay,那么您需要在 B 上进行流量控制。

为此,至少有以下三种方法可以做到。

  1. 为 B 购买网卡,并将 A/B1 放在网络 1 上,将 B2/网关放在网络 2 上。即,B 成为网关。现在使用“tc”来调整 A 的流量。

  2. B 上的多主 eth0。即 eth0:1 -> 172.16.5.0/24,并在此网络中为 A 提供一个地址。配置 B 以在 eth0 和 eth0:1 之间转发流量,标记和整形前往主网关的流量 (tc)。

  3. 使用“brctl”在 eth0 上创建网桥,并为 A/B 和 B/gw 创建接口,并再次标记和塑造前往主网关的流量(tc)。

相关内容