1
itsme 2016-01-22 16:53:55 +08:00
楼上这个是限制速度还是限制流量?
流量限制用 iptables 感觉挺方便,也准确。 速度限制我就不知道了, tc 没用过。 |
2
ryd994 2016-01-22 20:40:54 +08:00 via Android
因为真正意义上,入站流量整形本来就不容易
数据已经到了,你难道还能打回去么? 如果丢弃,源服务器会重发,结果还更多 延迟的话流量大点就很难做到了 |
3
leakeung 2016-01-22 21:05:13 +08:00
ip=4.1.2.3 填写的可是真实服务器 IP?
|
6
datocp 2016-01-25 08:45:33 +08:00 via Android
。。。第一次看到这么简单的实现,真这么简单为什么以前网上没见过这种实例。 tc 只能控制 out 方向, in 方向要用到 ingress 接口,后来出现了一个更高级的 ifb ,以前如果内部有高达 13 个 vlan 只能针对每个 vlan 做流控, ifb 出现以后可以将 13 个 vlan 映射到一个统一的 ifb 接口上。
限制数据包通常可以用 iptables limit 匹配每秒数据包通过的数量,一个大概是 mtu 大,大概 1.5kb 。问题是这个 limit 是个令牌桶概念,数据包在不同时间段数量是有差别的也就会造成流量的不确定,哪天要注意到流量快到慢,慢到快那就是被人实施发包限制了。 |
7
datocp 2016-01-25 08:59:01 +08:00 via Android
不去验证这个实例了,平时很少用到 tc u32 ,无法验证这种方向,在 nat 环境 iptables 都是在 mangle 表过滤的,所谓的路由前,路由后。如果简单的实现 out 可以看下面那帖验证过了。
$FILTER match ip dst 0.0.0.0/0 flowid 1:10 $FILTER match ip src 0.0.0.0/0 flowid 1:20 https://www.v2ex.com/t/248723 |
8
captainsparrow 2020-02-18 16:20:31 +08:00
@datocp 你好,请教一下,我使用下面的脚本来对 eth0 限速,本想对 eth0 的每个 ip 单独限速的,可是下面的代码对 eth0 的所有 ip 共同限速了 300k,有什么办法可以改一下么,比如 eth0 里有 10.0.0.1 跟 10.0.0.2、10.0.0.3 三个 ip 如何对这 3 个 ip 分别限速 300k,下面是我自己改的代码实现不了,望赐教
#down /sbin/tc qdisc del dev eth0 root /sbin/tc qdisc add dev eth0 root handle 2:0 htb /sbin/tc class add dev eth0 parent 2:1 classid 2:10 htb rate 300kbps /sbin/tc class add dev eth0 parent 2:2 classid 2:11 htb rate 1024kbps /sbin/tc qdisc add dev eth0 parent 2:10 handle 1: sfq perturb 1 /sbin/tc filter add dev eth0 protocol ip parent 2:0 u32 match ip dst 10.0.0.0/8 flowid 2:10 #upload /sbin/tc qdisc add dev eth0 handle ffff: ingress /sbin/tc filter add dev eth0 parent ffff: protocol ip u32 match ip dst 10.0.0.0/8 police rate 300kbps burst 100k drop flowid 2:11 |
9
datocp 2020-02-19 20:38:26 +08:00
好久不看这些了看起来头大。参看了我的 vps,QOS 只能控制上行接口的这个 eth0 是控制上行,eth0 ffff:ingress 才是控制下行。但这个 ffff:ingress 平时我很少用。我给个作用作用在 lan 端的 br0 接口,也是你想要的控制 lan ip 速度的。自己参考修改一下吧。
#!/bin/sh iptables -t mangle -F POSTROUTING tc qdisc del dev br0 root 2> /dev/null > /dev/null tc qdisc add dev br0 root handle 1: htb default 119 tc class add dev br0 parent 1: classid 1:1 htb rate $((3072))kbps tc class add dev br0 parent 1:1 classid 1:2 htb rate $((3072*6/10))kbps ceil $((3072*6/10))kbps IP=101;while [ $IP -le 125 ];do tc class add dev br0 parent 1:2 classid 1:$IP htb rate $((3072*1/10))kbps ceil $((3072*1/4))kbps prio 4 tc qdisc add dev br0 parent 1:$IP handle $IP: sfq perturb 10 tc filter add dev br0 parent 1: prio 20 protocol ip handle $IP fw flowid 1:$IP iptables -t mangle -A POSTROUTING -d 192.168.8.$IP -j MARK --set-mark $IP iptables -t mangle -A POSTROUTING -d 192.168.8.$IP -j RETURN;let "IP+=1";done tc class add dev br0 parent 1:1 classid 1:3 htb rate $((3072*5/10))kbps ceil $((3072*10/10))kbps prio 0 tc qdisc add dev br0 parent 1:3 handle 3: sfq perturb 10 tc filter add dev br0 parent 1: prio 10 protocol ip handle 3 fw flowid 1:3 iptables -t mangle -I POSTROUTING -m iprange --dst-range 192.168.8.200-192.168.8.205 -j RETURN iptables -t mangle -I POSTROUTING -m iprange --dst-range 192.168.8.200-192.168.8.205 -j MARK --set-mark 3 |
10
datocp 2020-02-19 20:44:32 +08:00
设定一个 1:2 只有 6/10 流量的限制分组,ip 范围为 101-125,里面再根据每个 ip 限制流量到最多 1/4 的总流量。
设定一个 1:3 10/10 流量的高优先级分组,prio 0,ip 范围 200-205 共享该 100%的流量 |
11
captainsparrow 2020-02-19 22:30:36 +08:00
@datocp 好的,非常感谢~~
|
12
captainsparrow 2020-02-19 23:00:42 +08:00
@datocp
iptables -t mangle -A POSTROUTING -d 10.24.26.2 -j MARK --set-mark 101 iptables -I FORWARD -s 10.24.26.2 -j MARK --set-mark 6 这 2 个 set-mark 对于这个限速,FORWARD 跟 POSTROUTING 应该使用哪个好呢,我试了下,两个都可以实现。 |
13
captainsparrow 2020-02-19 23:03:32 +08:00
|