我的网络连接如下:
互联网 <-128kbps 链路-> Cisco 路由器(公共 IP)<-LAN-> Linux 路由器/服务器(公共 IP)<-LAN-> 普通 PC(公共 IP)
思科路由器:
- 分配给我所在机构的第一个公共 IP (/29)
- 被编程为通过 Linux 路由器发送所有数据包
Linux 路由器
- 分配给我机构的第二个公共 IP
- 被编程用于在普通 PC 和 Cisco 路由器之间转发数据包
- 也充当服务器(邮件、网络等)
普通PC(共4台):
- 其余公共 IP
- 使用 Linux 路由器作为网关
我在 Linux 路由器上启用了 iptables 数据包日志记录,有时我发现:
- 有些数据包很大,大于 20KB。这正常吗?(是的,这很正常。这些不是数据包,而是 IP 数据报,正如某人解释的那样)
- 传输的数据(向互联网传输)超过 16KB 的次数太多。例如,在某一秒内,传输了 10572 字节(没有问题),传输了 63521 字节(到 Cisco 路由器)。通过 128kbps 链路发送 64KB 至少需要 4 秒钟。与此同时,Linux 路由器正在向 Cisco 路由器发送更多数据,导致其缓冲区堵塞。这可不是什么好事。
现在,如何配置 Linux 路由器以按照以下方式调整流量:
- 当这些常规PC和Linux服务器之间进行通讯时,保持最大的传输速度。
- 减慢与外界的通信速度,以避免堵塞“出站”线路,使用所有(或几乎所有)可用带宽(128 kbps)。跟踪中不再有“>16KB 出站秒数”。
- 保证每台普通 PC 的出网速度为 24kbps,Linux 服务器的出网速度随时为 24kbps。(如有必要,留出 8bkps 作为开销)。换句话说,5 个(伪)“频带”,每个频带为 24kbps。
- 如果任何 PC 未使用其全部带宽,则在其余传输 PC 之间公平共享空闲带宽
- 在每个频段内,优先考虑某些数据包(DNS 查找、控制数据包),而其他数据包(torrent!!!)则不予优先考虑,并且不影响其他频段。
我已经标记了(使用 IP 表 --set-xmark 选项)每台 PC 的每个传出数据包:
- Linux路由器对外开放,优先级高
- Linux路由器对外开放,正常优先级
- Linux路由器对外开放,优先级低
- 第一台普通PC向外界开放,优先级高
... 等等。
每个传入数据包也使用此方案进行标记,从 16 开始。
很抱歉这个问题太长了,但我已经放弃使用 tc 命令进行设置,关于流量整形的文档太少,我不知道下一步该怎么做。
答案1
假设 eth0 是到 Cisco 路由器的 100mbit 以太网连接,它应该是这样的(不是吗?):
tc qdisc add dev eth0 root handle 1: htb default 2
# 100 mbps
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
# To LAN traffic
tc class add dev eth0 parent 1:1 classid 1:2 htb rate 99000kbit ceil 100mbit
# IN traffic
tc class add dev eth0 parent 1:1 classid 1:3 htb rate 120kbit
# OUT traffic
tc class add dev eth0 parent 1:1 classid 1:4 htb rate 120kbit
# IN “bands” (one for each PC)
tc class add dev eth0 parent 1:3 classid 1:10 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:3 classid 1:11 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:3 classid 1:12 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:3 classid 1:13 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:3 classid 1:14 htb rate 24kbit ceil 120kbit
# OUT “bands” (one for each PC)
tc class add dev eth0 parent 1:4 classid 1:15 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:4 classid 1:16 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:4 classid 1:17 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:4 classid 1:18 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:4 classid 1:19 htb rate 24kbit ceil 120kbit
会给我这样的结果:
+-----------------------------------------------------------+
| 100 mbits (1:1) |
+---------+------------------------+------------------------+
| 99mbits | 120 kbits In (1:3) | 120 kbits Out(1:4) |
+ (1:2) +----+----+----+----+----+----+----+----+----+----+
+---------+ PC1| PC2| PC3| PC4| PC5| PC1| PC2| PC3| PC4| PC5|
|1:10|1:11|1:12|1:13|1:14|1:15|1:16|1:17|1:18|1:19|
+----+----+----+----+----+----+----+----+----+----+
对于每个乐队:
# PC1, IN
tc qdisc add dev eth0 parent 1:10 handle 20: prio
tc qdisc add dev eth0 parent 20:1 handle 22: sfq perturb 10
tc qdisc add dev eth0 parent 20:2 handle 23: sfq perturb 10
tc qdisc add dev eth0 parent 20:3 handle 24: sfq perturb 10
# PC1, OUT
tc qdisc add dev eth0 parent 1:15 handle 21: prio
tc qdisc add dev eth0 parent 21:1 handle 25: sfq perturb 10
tc qdisc add dev eth0 parent 21:2 handle 26: sfq perturb 10
tc qdisc add dev eth0 parent 21:3 handle 27: sfq perturb 10
+--------------------++--------------------+
| PC1 IN || PC1 OUT |
+--------------------++--------------------+
| PRIO (20:0) || PRIO (21:0) |
| | | || | | |
| Prio | Prio | Prio || Prio | Prio | Prio |
| 1 | 2 | 3 || 1 | 2 | 3 |
|(20:1)|(20:2)|(20:3)||(21:1)|(21:2)|(21:3)|
+------+------+------++------+------+------+
| SFQ | SFQ | SFQ || SFQ | SFQ | SFQ |
|(22:0)|(23:0)|(24:0)||(25:0)|(26:0)|(27:0)|
+------+------+------++------+------+------+
等等。
规则应该是这样的
# PC1, OUT
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 21:1
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 2 fw flowid 21:2
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 3 fw flowid 21:3
# PC1, IN
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 16 fw flowid 20:1
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 17 fw flowid 20:2
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 18 fw flowid 20:3
等等。
有什么建议、意见等吗?(我没有该领域的经验)
答案2
答案3
这是哪种 Cisco?通常,您也可以在 IOS 上进行整形,它可能比 Linux tc 更容易配置。