|
|
本帖最后由 weigefenxiang 于 2023-6-9 18:29 编辑
本文仅针对有「定时限速」需求的小白。
新手教程,会用通俗的话来介绍,方便理解,如果有说错的地方欢迎指出。
TC (Traffic Control)命令—linux自带高级流控
iptables 对 ip 、mac、时间等进行筛选(过滤)
效果图
Windows (下行限速100M,上行3M)
WiFi 只对上行进行限速
亲戚都在家,只能拿副宽做测试
重点
- 固件支持 tc + iptables
- tc + iptables 相关核心(重要),编译过程中加上(帖子最下方有详细说明)
- 关闭硬件加速功能(流量监控,限速必要条件)
下面以 360T7 H大固件 作为例子,需要在终端(ssh、ttyd等)完成
步骤:
1.1 清空规则
避免其他规则干扰
- # 我的上行端口 pppoe-wan
- upDEV="pppoe-wan"
- tc qdisc del dev $upDEV root 2>/dev/null
- iptables -t mangle -F PREROUTING
复制代码
1.2 上传限速
- 192.168.1.50 最低保障速率 1Mpbs 限速 3Mpbs
- 192.168.1.51 最低保障速率 8Mpbs 限速 10Mpbs, 时间为 周一至周五,22:17 至 18:20(次日)
- 192.168.1.100-192.168.1.254 最低保障速率 1Mpbs 限速 3Mpbs
复制代码
将下面脚本代码 小作修改后,直接粘贴到终端,即可食用
- #!/bin/sh
- # 我的上行端口 pppoe-wan,这里请改为你的WAN口(或上行口),查看命令 ifconfig ,自行判断
- upDEV="pppoe-wan"
- # 1: (即 1:0 的缩写) 填哪个都行
- tc qdisc add dev $upDEV root handle 1: htb default 8
- # rate 50mbit = 50Mpbs,这里一般填写上行带宽速率
- tc class add dev $upDEV parent 1:0 classid 1:1 htb rate 50mbit
- tc class add dev $upDEV parent 1:1 classid 1:11 htb rate 1mbit ceil 3mbit
- tc class add dev $upDEV parent 1:1 classid 1:12 htb rate 8mbit ceil 10mbit
- # 这里别写错了,是 parent 1:0
- tc filter add dev $upDEV parent 1:0 protocol ip handle 2011 fw classid 1:11
- tc filter add dev $upDEV parent 1:0 protocol ip handle 2012 fw classid 1:12
- # iptables 设置
- iptables -t mangle -A PREROUTING -s 192.168.1.50 -j MARK --set-xmark 2011
- iptables -t mangle -A PREROUTING -s 192.168.1.50 -j RETURN
- iptables -t mangle -A PREROUTING -s 192.168.1.51 -j MARK --set-xmark 2012 -m time --timestart 22:17 --timestop 18:20 --kerneltz --weekdays 1,2,3,4,5
- iptables -t mangle -A PREROUTING -s 192.168.1.51 -j RETURN
- iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.100-192.168.1.254 -j MARK --set-xmark 2011
- iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.100-192.168.1.254 -j RETURN
复制代码
命令解释:
- # tc命令
- # rate :最低保障速率
- # ceil : 最高速率 (如不设置该项,最高速率=rate)
- # parent 1:1 classid 1:11 : 这条规则继承父类(1:1),命名为1:11 。
- # handle 2011 : tc对于 iptables标记为(1:11)2011的包 ,进行限速,最低25Mpbs,最高40Mps
- # PREROUTING :(一般用作处理上行)
- # iptables
- # -s 192.168.1.50 :筛选 来源于 150 的IP
- # -j MARK --set-xmark 2011 :对包进行标记 2011,交给 tc 分辨
- # -s 192.168.1.50 -j RETURN :来源于 192.168.1.50 不再往下进行过滤) 可以理解为快速跳过这个步骤。
- # -m time --timestart 22:17 --timestop 18:20 : 时间段控制 22:17~18:20(次日)
- # --kerneltz :(系统时间,如不设置,iptables以UTC为标准,实际生效时间会比北京时间晚8小时整)
- # --weekdays 1,2,3,4,5 :(周一至周五)
- # 注:-m iprange 需 iptables-mod-iprange 模块,若是ip很多,务必使用 iprange 减少规则。
- # -m iprange --dst-range 192.168.1.100-192.168.1.254 :过滤IP段X.[100-254]
复制代码
1.3 查看以上命令是否生效
- tc qdisc show dev $upDEV
- tc class show dev $upDEV
- iptables -t mangle -L PREROUTING
复制代码
1.4 清空规则(输入以下命令或重启,iptables 默认不保存规则),如果影响了其它应用,重启就能恢复如初。
- tc qdisc del dev $upDEV root
- iptables -t mangle -F PREROUTING
复制代码
2.0 下载限速
# 下行限制 通常为 br-lan- dlDEVS="br-lan"
- ..................
复制代码 先写这么多吧,有空再补完吧。
附: 相关内核/依赖
- tc-tiny 重要
- kmod-sched-core tc 限速核心
- kmod-sched tc sfq 随机公平排队 相关 ,查看固件是否支持sfq ,终端命令:opkg files kmod-sched|grep sfq
- kmod-sched-cake 流量智能队列管理(QOS)
- kmod-ifb 虚拟网卡,记得eqos、qos采用的就是这个,方便对同一网口进行上下行限速
- iptables-mod-iprange 对IP段进行筛选(过滤)
- iptables-mod-nat-extra 流量智能队列管理(QOS)
- kmod-sched-connmark
- kmod-sched-ipset
- 以前整理过,丢了,有些我也忘记用途了,编译的时候尽量都打上,以后报错的时候原因不好找。
复制代码
3.0 进阶
以上命令成功后,且能轻松驾驭后,保存脚本!
想要理解tc命令的,或做进阶设置可参考 :
[译] 《Linux 高级路由与流量控制手册(2012)》第九章:用 tc qdisc 管理 Linux 网络带宽
帖子的编辑太大问题了,编辑了几十次,吞代码,太难受了
得用纯文本方式编辑才不容易出错 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|