1
pagxir 2023-04-18 20:48:00 +08:00
UDP 没有连接的概念。所以你的先把 UDP 会话给定义出来。
|
2
learningman 2023-04-18 20:55:13 +08:00 via Android
不上 DPI 不可能
|
4
tomychen 2023-04-18 22:13:02 +08:00
#2 说的 DPI 是一解法 参考 openDPI
或者 L7 filter ,相当于 iptables 的一个补丁? 我在上古内核版本内核试着装过 无论是,bt ,视频流,要识别就已经脱离了 iptables 的范畴了,因为它是(ip)tables ,不是 packet filter 当然,也有抖机灵的办法,比如--string 里去匹配一些关键字. |
5
bibiisme OP @tomychen bt 我发现的特征就是会有很多外部 ip 连接主机特定端口,可惜 udp 没有类似 connlimit 的工具
|
6
tomychen 2023-04-18 23:06:50 +08:00
哈哈,因为 UDP 没有 CONN ,当然也就不能用这套,我忘了你是要做 QoS ,我以为你想 block 来着。
刚刚去瞄了一眼 openwrt 的作法,用的也是 layer7. 但是在 gentoo 的论坛发现一个可以借 tc 完成,倒也挺有意思 https://forums.gentoo.org/viewtopic-t-926236-start-0.html |
7
bibiisme OP @tomychen
感谢。不过 tc 这部分我这里暂时用不着,在测硬路由的硬件 qos 。qos 硬件是根据收到的包带的 mark 来设置 qos 等级的。 现在是普通 udp 和 1 楼的>4 线程 tcp 最小 mark ,<=4 线程 tcp 中等 mark ,udp 小包最大 mark 。 udp 视频和 bt 下载看来通过 iptables 是区分不了了。 |
8
datocp 2023-04-19 00:26:34 +08:00 via Android
嘿嘿,竟然看不懂
Qos 实现的是 htb 的 prio 优先级,不是并发数仰制。当然当年在 8mbps 的宽带依然需要用 iptables limit 抑制迅雷才能让网络正常,主要是带宽并发数有限。 https://wiki.dd-wrt.com/wiki/index.php/Preventing_Brute_Force_Attacks 保障高优先级端口,抑制其它端口 limit 更平滑不会出现打开网页图片有问题的情况。本机这就是 qos 以外的最好方法。 iptables -N rate_limit iptables -F rate_limit iptables -A rate_limit -p tcp --dport 22 -m limit --limit 3/min --limit-burst 3 -j ACCEPT iptables -A rate_limit -p udp --dport 1194 -m limit --limit 3/min --limit-burst 3 -j ACCEPT iptables -A rate_limit -p ICMP --icmp-type echo-request -m limit --limit 3/sec -j ACCEPT iptables -A rate_limit -p <protocol> --dport <port> -m limit --limit <x/sec/min/hr> --limit-burst X -j ACCEPT iptables -A rate_limit -p ! ICMP -j LOG --log-prefix " Connection dropped!! " iptables -A rate_limit -p tcp -j REJECT --reject-with tcp-reset iptables -A rate_limit -p udp -j REJECT --reject-with icmp-port-unreachable iptables -A rate_limit -j DROP 在有一定基础以后,用 connbytes 就能 1 秒抓到高流量用户,实现动态 qos ,无视任何 p2p 的存在。 qos 实现流量和延迟的对比关系,看自己如何平衡。平时都用目的端口实现 prio 优先级控制,通过划分流量到不同 class 实现不同的延迟。真正要保障的也就高优先级的游戏,网页浏览。其它的感受甚微。 udp_5000:5500,6060,8088_0x10/0xff tcp_2099,5222,5223,5060,6060,8088,8393:8400,992,1992,26241_0x10/0xff udp_53,123_0x20/0xff tcp_22,23,3389,8123_0x20/0xff tcp_80,443,1080,1863,8080:8081,12000,14000_0x30/0xff udp_500,1701,4000:4030,4500,8000:8001,16285_0x30/0xff tcp_20,21,25,143,465,993,1024:65535_0x40/0xff udp_1:65535_0x40/0xff |
9
datocp 2023-04-19 00:33:16 +08:00 via Android
玩 linux 路由,qos 最好的参考模板是 tomato qos 。其它的理论名词一大堆,不知所谓。
|
10
bibiisme OP @datocp
没打算抑制并发数,现在的策略在 7 楼,只是打算给并发数太多的流量降低优先级。 测的是 mtk 的硬件 qos ,因为这些流量后面会被硬件加速模块接管并进行 qos ,要在硬件模块接管流量之前按优先级打好 mark ,干不了其他的,只能设置好优先级。 |
11
tomychen 2023-04-19 00:55:05 +08:00
单纯按照流量确实是可以实现的 rate_limit / hashlimit 等
就是这样就有点模糊,可能会有协议外的误伤。 但好像又很有道理,目的本身就是 QoS ,又不是协议识别和包过滤。流量大了,就给他弄了。 |
12
bibiisme OP @tomychen 其实就是流量识别,因为 qos 本身实现我是交给硬件了。。。突然记起来 bt 下载的时候,这些软件会通过 upnp 开启端口转发。看看后面改下 upnp ,在 upnp 加端口转发规则的时候,同时给到这台主机端口的流量打上对应的 mark ?
|
13
leonshaw 2023-04-19 08:46:17 +08:00 via Android
nft 的 meter 和 ct count 能满足需求吗?
|
14
hrMn23lO4Ds226CV 2023-04-19 10:37:26 +08:00
有些 BT 软件会自己打 LE 标 然后直接读它
iptables -t mangle -A POSTROUTING -o pppoe-CU -m tos --tos 0x04/0xfc -j CLASSIFY --set-class 1:8 或者你自己打标 iptables -t mangle -A OUTPUT --protocol udp --sport 6881 -j DSCP --set-dscp-class LE Windows 也可以用组策略的 QoS 指定程序数据包标记 IP 协议层的标记读起来应该比较快 也可后续映射到 802.1p |
15
Juszoe 2023-04-19 12:13:56 +08:00
我也有 qos 需求,正在考虑使用集成度高的软路由实现,之前用过爱快是能识别 BT 流量的
|
16
bibiisme OP @OneOfSisters 刚才去瞅了下 openwrt 上 miniupnpd 的代码,发现里面有 dscp 的相关信息,不过貌似基本没人提这个。
|
17
bibiisme OP @OneOfSisters 不过倒提醒我,尝试改了下路由器上的 upnp 源码,统一给映射的端口打上 dscp 0x2 ,现在能进一步区分 p2p 流量了。
https://github.com/padavanonly/packages/blob/openwrt-18.06/net/miniupnpd/patches/109-dscp.patch |