转载出处
https://www.jianshu.com/p/4477c68c9ec4
踩坑实战
看完了这些,起初我只是想针对某个ip进行一下限速,这个过程中有几个小坑。
tc暂时只能在实体机上执行
tc命令需要root来执行
确认好默认队列,因为一旦限速规则和默认队列重复,现在的机器都是远程登录的,如果限速过大,将直接导致你无法再进行远程操作,只能重启机器了……
那么我要针对一个ip限速,可以执行下面这个脚本
#!/bin/bash
interface=eth0
ip=100.88.128.149
port=3306
delay=300ms
loss=5%
tc qdisc add dev $interface root handle 1: prio
# 这个命令会创建3个默认的class 1:1 1:2 1:3 PRIO 另一种意义的pfifo_fast 基于优先级的有类队列规则
tc filter add dev $interface protocol ip parent 1: prio 1 u32 match ip dst $ip match ip dport $port 0xffff flowid 1:1
tc filter add dev $interface protocol all parent 1: prio 2 u32 match ip dst 0.0.0.0/0 flowid 1:2
tc filter add dev $interface protocol all parent 1: prio 2 u32 match ip protocol 1 0xff flowid 1:2
# 将指定的ip和端口数据发送给 1:1 , 将其他流量指向1:2
tc qdisc add dev $interface parent 1:2 handle 20: sfq
tc qdisc add dev $interface parent 1:1 handle 10: netem delay $delay loss $loss
# 创建1:1队列,同时设置延迟和丢包率,创建1:2队列接受默认流量
版权声明:本文为photon222原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。