1.通过iptables来实现限速
Iptables通过limit来实现限速,虽然iptables提供了丰富的匹配条件,但是基于端口来限速受到处理时机的限制,iptables处理的是三层及三层以上的报文,当iptables模块处理报文的时候,linux内核已经不再维护接收端口的信息了,这样的话就不能通过 iptables 的-i选项来匹配入端口。
2. 通过ebtables来实现。
Ebtalbes处理2层的报文,linux内核在整个ebtables 模块对报文处理的过程中接收端口的信息是一直保留的,因此可以通过ebtables来实现端口的限速在理论上是可以行得通的。
实现方式:
ebtables -t filter -N TEST (limit选项是自定义链的属性)
ebtables -t filter -A FORWARD -j TEST (用FORWARD链来实现限速,不会影响到达本机的数据,如web,DHCP等)
ebtables -t filter -A FORWARD -j DROP
ebtables -t filter -A TEST -j RETURN -i eth1.4 --limit 5/m --limit-burst 5
--limit 5/m:每隔12S释放一个令牌
--limit-burst 5: 有5个令牌
预期结果:也就是刚开始5个包是通的,然后每隔12S可以通一个包。
测试结果:通过测试发现,上面的配置的参数和试验的结果刚好相反。开始5个包不能通过,以后每隔12s有一个包不能通过,没弄清楚linux内核是怎么处理这个地方的。
3.通过TC来对端口的实现限速。
TC是linux内核专们用来限速使用的,功能非常丰富,但是