我有一个 Ubuntu 10 盒子,我正在尝试将其设置为带宽整形路由器。
该机器有一个 WAN 接口 eth0 和两个 LAN 接口 eth1 和 eth2。NAT 使用 MASQUERADE 配置,如以下所述网络连接共享。
我主要关心的是塑造来自 LAN 接口的出站流量 - 最终,我希望每个 LAN 接口的硬限制为 768Kbps(而不是跨所有接口汇集的 eth0 的限制)。
我安装了HTB初始化,并根据示例,尝试通过将三个文件放入 /etc/sysconfig/htb 来在 eth1 上进行设置:
/etc/sysconfig/htb/eth1
DEFAULT=30
R2Q=100
/etc/sysconfig/htb/eth1-2.root
RATE=768Kbps
BURST=15k
/etc/sysconfig/htb/eth1-2:30.dfl
RATE=768Kbps
CEIL=788Kbps
BURST=15k
LEAF=sfq
我可以启动 /etc/init.d/htb 和 /etc/init.d/htb 统计并查看似乎表明它正在运行的信息……但是当我尝试通过 WAN 接口提取大文件时,整形显然没有生效。
有什么建议吗?我猜这与 NAT 链中的整形位置有关,但我真的不知道从哪里开始排除故障。
- - 更新:
这是我的 /etc/init.d/htb 列表输出,它似乎有道理——eth1 的默认速率是 768Kbps?
### eth0: queueing disciplines
qdisc htb 1: root refcnt 2 r2q 100 default 30 direct_packets_stat 0
qdisc sfq 30: parent 1:30 limit 127p quantum 1514b perturb 10sec
### eth0: traffic classes
class htb 1:2 root rate 768000bit ceil 768000bit burst 1599b cburst 1599b
class htb 1:30 parent 1:2 leaf 30: prio 0 rate 6144Kbit ceil 6144Kbit burst 15Kb cburst 1598b
### eth0: filtering rules
filter parent 1: protocol ip pref 100 u32
filter parent 1: protocol ip pref 100 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 100 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:30
match 00000000/00000000 at 12
match 00000000/00000000 at 16
### eth1: queueing disciplines
qdisc htb 1: root refcnt 2 r2q 100 default 30 direct_packets_stat 0
qdisc sfq 30: parent 1:30 limit 127p quantum 1514b perturb 10sec
### eth1: traffic classes
class htb 1:2 root rate 768000bit ceil 768000bit burst 1599b cburst 1599b
class htb 1:30 parent 1:2 leaf 30: prio 0 rate 6144Kbit ceil 6144Kbit burst 15Kb cburst 1598b
答案1
尝试将其(使用您的 IP)添加到 eth1-2:30.dfl
RULE=192.168.0.0/24
答案2
我不得不说,我发现速度超过 100Mbit 时很难解决这个问题。就我而言,我想调整到 2Gbit/s
最后,我改编了一个我认为可行的脚本。它就在这里,请根据您的需要进行改编。具体来说,您需要将速率调整为有效值。tc 可以理解 mbit。因此,您需要输入 768kbit 之类的值或它可以正确解释的值。
#!/bin/sh
#
# Incoming traffic control
#
DEV=eth0
RATE="2000mbit"
tc qdisc del dev $DEV root
tc qdisc add dev $DEV root handle 1: htb default 10
tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATE} burst 15k
tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${RATE} ceil ${RATE} burst 15k
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
echo;echo "tc configuration for $DEV:"
tc qdisc show dev $DEV
tc class show dev $DEV
#
# Outgoing traffic control
#
DEV=eth2
tc qdisc del dev $DEV root
tc qdisc add dev $DEV root handle 1: htb default 10
tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATE} burst 15k
tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${RATE} ceil ${RATE} burst 15k
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
echo;echo "tc configuration for $DEV:"
tc qdisc show dev $DEV
tc class show dev $DEV