1
zizon 117 天前
没什么不优雅吧.你的需求确实就是要对每个 IP 单独 quality...
写个脚本或者工具去管理就是了... |
3
Ansen OP @Ansen #2 如果能通过 ipset 配置, 我只需要按带宽等级创建一些规则就可以了, 比如 10 15 20 30 分别一个规则, 然后通过管理 ipset 列表 达到 控制客户端 IP 使用不同的带宽的目的
|
4
leonshaw 117 天前 1
|
5
blackeeper 117 天前
我觉得你可能需要一个路由器,比如 openwrt 、ikuai ?
IP 限速不仅有 web 界面,操作也非常方便 |
6
Ansen OP @blackeeper 肯定是业务需要了, 上面还会跑其它相应的 ACL 程序
|
7
blackeeper 117 天前
@Ansen 这些路由器也可以跑 ACL 的,都是 Linux 系统。
而且这个路由器,你可以作为旁路由,不用替换掉你的 Ubuntu 服务器 |
8
Ansen OP @blackeeper 实际业务场景很复杂,qos 只是里面的一个功能
|
9
datocp 117 天前 via Android 2
为什么你有 10 几万的 ip ???
可不能教电信网管做坏事 qos 最佳的学习从 tomato 入手。当你会 shell 写了 N 遍 tc 规则,就用 tomato 的 4 段 htb 就足够。 再去研究下 iptables connbytes ,会发现又一片新大陆,原来可以以 1 秒抓到当前系统那些假定超过多少流量的 ip 。 然后就看 shell 水平插值到 4 段 htb 最终实现 100mbps 将 60%的流量用于下载用户,高优先级 将 100%的流量用于其他用户,实际怎么也还有 40%,次优先级 上行用 1:2 限制了 p2p 到 80%无法淹没 20%的高优先级上行队列。 通过用 shell 对下行变化的 ip 进行插值到 htb 树,就实现了动态限速,做到 100%的带宽利用。 平时 100mps 吹牛带了 280+ip ,无视任何 p2p 存在。 |
10
PTLin 117 天前 2
tc 基于 ebpf 的 edt 方案看来可以,直接用 epbf map 管理 ip 。
|
13
PTLin 116 天前 1
@Ansen 有一篇字节跳动写的文章试了下,确实可以跑,就是限速不是太稳定以及限速公式搞不明白。https://blog.csdn.net/ByteDanceTech/article/details/120878281
|
14
defunct9 116 天前
开 ssh ,让我上去看看
|
15
cslive 116 天前 via Android
openwrt 怎么实现的,参考下
|
16
kalayygl001 116 天前
直接 panabit 就好
100M/100M 专线+1000M/50M pppoe 带 500 人 做好应用分流 相当流畅 |
17
Ansen OP @kalayygl001 #16 目前没办法用其它设备来限速了, 项目方案已经确定了, 只有在 linux 上想办法了
|
18
Donaldo 114 天前 1
我没用过 tc ,之前用过 xdp 做防火墙,调研了一下说性能比 tc 好,考虑用 ebpf (可能结合 tc )么?这里找到了一个例子: https://github.com/xdp-project/xdp-cpumap-tc
|
19
huangzhiyia 114 天前
tc qdisc del dev $1 root
tc qdisc add dev $1 root handle 1: htb default 20 tc class add dev $1 parent 1:0 classid 1:1 htb rate 10mbit burst 1000mbit tc qdisc add dev $1 parent 1:1 handle 10: sfq tc filter add dev $1 parent 1: protocol ip prio 16 u32 match ip dst 0.0.0.0/0 flowid 1:1 直接对所有 IP 进行限速,速率为 10mbit 突发 1000mbit ,连空闲宽带都不想给,就把突发也改成 10 mbit 即可。 |
20
Ansen OP @zmaplex #19 这个脚本的实际效果是 所有 IP 加起来的速度不能超过 classid 1:1 中的 10mbit , 多个用户同时在线,每个用户的带宽就是 10mbit 除以 n
这是我的测试结果 |
22
huangzhiyia 114 天前 1
@Ansen
#!/bin/sh -e # 清除现有的 qdisc tc qdisc del dev ens33 root tc qdisc del dev ens33 ingress # 配置上传( egress )限速 tc qdisc add dev ens33 root handle 1: htb default 30 tc class add dev ens33 parent 1: classid 1:1 htb rate 10000kbit burst 15k # 限制特定 IP 地址的上传 tc class add dev ens33 parent 1:1 classid 1:10 htb rate 10000kbit tc filter add dev ens33 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.102.134 flowid 1:10 tc class add dev ens33 parent 1:1 classid 1:20 htb rate 10000kbit tc filter add dev ens33 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.102.135 flowid 1:20 # 限制所有 IP 地址的上传 tc class add dev ens33 parent 1:1 classid 1:30 htb rate 10000kbit tc filter add dev ens33 protocol ip parent 1:0 prio 2 u32 match ip dst 0.0.0.0/0 flowid 1:30 # 配置下载( ingress )限速 tc qdisc add dev ens33 handle ffff: ingress # 限制特定 IP 地址的下载 tc filter add dev ens33 parent ffff: protocol ip prio 1 u32 match ip src 192.168.102.134 police rate 10000kbit burst 10k drop flowid :1 tc filter add dev ens33 parent ffff: protocol ip prio 1 u32 match ip src 192.168.102.135 police rate 10000kbit burst 10k drop flowid :1 # 限制所有 IP 地址的下载 tc filter add dev ens33 parent ffff: protocol ip prio 2 u32 match ip src 0.0.0.0/0 police rate 10000kbit burst 10k drop flowid :1 exit 0 |
23
huangzhiyia 114 天前
我测试的时候,这个是只有 7 Mbits/sec 左右,然后把 10000kbit 改成 15mbit 的时候,测试差不多就是 10 Mbits/sec 了
|
24
huangzhiyia 114 天前
@Ansen 不好意思,把特定 ip 写进去了,还是无效。看来没有太好的办法
|
26
dode 99 天前
一万个 IP 出去之前加一个交换机,交换机上设置 IP 限速
|