我试图限制一个应用程序与Linux的TC产生的输出带宽。 此应用程序发送给我的请求的源端口,我使用了一个filter来限制每个用户在给定的下载速度。 我觉得如果我有更好的linux tc知识,我的设置可以更好地pipe理。 在应用程序级别,用户被分类为一个组的成员,每个组都有一个有限的带宽。 例如: Members of group A : 512kbit/s Members of group B : 1Mbit/s Members of group C : 2Mbit/s 当用户连接到应用程序时,它将检索源端口到用户的请求源,并根据它所属的组向我发送源端口和用户必须限制的带宽。 有了这些信息,我必须添加适当的规则,使用户(实际的源端口)被限制在正确的带宽。 如果连接的用户不是任何组的成员,则应该以默认的带宽速度进行限制。 我实际上是通过使用一个自制的守护进程来pipe理这个守护进程,该守护进程从应用程序收到请求时添加或删除规则。 有了我对tc的一点了解,我就无法以默认的速度限制其他用户(不在组中的所有其他用户),我的configuration对我来说似乎很糟糕。 这是我的tc qdisc和classes的基础: tc qdisc add dev eth0 root handle 1: htb tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbps ceil 125mbps 要以给定的速度对用户进行分类,我必须添加一个子类,然后将一个filter关联到它: […]
我正在尝试解决我正在尝试部署基于这个问题的IFB镜像相关的问题: Tc:入口pipe制和ifb镜像 我的理论是,由于入口stream量被redirect到/经由ifb被出口规则控制,所以我应该能够通过组合tc和Linux控制组net_cls控制器来限制入口带宽,其可以用分类标记分组。 然而它不工作。 我从理论上说,由于数据包是从入口开始的,即使它们被当作出口,它们也不会被标记。 但是,我能想到的唯一方法就是testing这个包,看看这个包是否在那里。 不知道如何做到这一点。 我想可能tcpdump可以但不知道相关的标志。 如果有人对我的大问题有什么想法,我会很感激的! 干杯!
我想创build一个简单的脚本,使我能够将接口的输出速度限制在56k(调制解调器速度)和1MBit / s之间。 我发现下面的这个工作是做的: tc qdisc add dev eth1 root tbf rate 220kbit latency 50ms burst 1540 但是现在我希望脚本的input只能是“速度”。 如果我只知道速率,那么计算好的延迟和突发值将会是一个好的方法吗? tbf手册页说最小突发应该是由我的内核HZ划分的速率。 这是有道理的,但它不能帮助我find一个公式,从速度计算明显的爆裂值。 可能我希望我的爆发值比最小值大一点? 而我将如何计算一个很好的延迟值? 延时是否应该随速度变化?
我已经阅读了所有各种stream量调整文档,但没有深入讨论HSFC调度问题 有没有人真正了解Linux / BSD中的HFSC调度是如何工作的? 看了其他的问题,但似乎一切都在解决困难的问题,比如如何公平地分配给定数量的带宽,保持良好的交互式会话等。 但是我想要做的就是把一个已知的总的最大理论吞吐量(比如1gig)分成(比如说)10个每个100个的块,并且使用一些魔法,这样任何一个TCP会话的上限都是100。 这看起来像是一个简单的请求,或者是一个毫无意义的请求,或许这么简单,以至于例子从来不讨论它,而是直接用于更复杂的场景。 但是,在客户不参与竞争的受控环境中,这将非常有用。 编辑:nginx有一个limit_rate命令,正是我想要的(单个连接到一个单独的url的限制率),但我仍然希望在tcp或其他模块的iptables级别这样做,所以问题是打开的。
我需要在通过IPSEC连接的几个客户端之间划分带宽。 我发现这篇文章: https://jve.linuxwall.info/blog/index.php?post/2010/10/16/How-can-I-do-traffic-shaping-in-Linux-by-IP 和这个服务器错误的问题: 我怎样才能通过IP在Linux上进行stream量整形? 但是我的要求稍微复杂一点,我需要一些额外的build议。 如何将MARK分配给新客户 我不是唯一的,但有几个dynamic连接和接收IP的客户端。 我如何分配防火墙标记/类ID? 我目前的想法是将标记存储在共享内存中,并随每个新客户端增加。 听起来相对复杂。 我可以做到,但可能有一个更简单的解决scheme? 欢迎任何其他想法。 我知道的其他方法是从IP地址做一个散列。 在这种情况下,散列值将是16位(范围为tc类id),而IP包含32位。 不好看。 filter/分类器 2)我想每个VPN客户端有两个类。 一个用于优先级的stream量,另一个用于其他所有 我用两个标记来实现这一点 – MARKFW_ONE和MARKFW_TWO 2.1 SSHstream量:放入优先级队列(ssh,但不是scp): iptables -t mangle -A INPUT -i $DEV -s $IP -p tcp -m tos –tos 0x10 -j CONNMARK –set-mark ${MARKFW_ONE} 2.2 ICMP:放入优先队列: iptables -t mangle -A INPUT -i $DEV -s $IP -p […]
iptables -i eth0 -t mangle -I PREROUTING 1 -m mac –mac-source $mac -j MARK –set-mark 88 echo "1" > /proc/sys/net/ipv4/ip_forward iptables -A FORWARD -i wlan0 -o eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE 这个标记88在MASQUERADING之后不是持久的。 请告诉什么是错的。 sudo iptables […]
我目前有以下情况: 我在一个相当不稳定的networking连接上使用VPN(OpenVPN)。 这意味着最大带宽在100kbs和1mbit之间变化。 每当连接相当不稳定,stream量很大时,会造成很多丢包,一切都变得非常缓慢。 为了防止这种情况,我需要一些机制来控制基于数据包丢失/延迟的最大带宽,以达到数据包大量丢弃的阈值。 我正在考虑将一个icmp(ping)控制通道连接到vpn服务器,这个通道使用某种脚本进行连续分析,如果ping不好或丢包,最大带宽将通过设置一个新的最大带宽来调整tc(用于QoS)。 我的问题是:1.这可以使用tc完成吗? 2.有没有工具,已经做了,我想要什么? 在此先感谢和最好的问候!
我正试图用DRR qdisc来控制两台虚拟机的stream量。 这是我想要的层次结构: root | qdisc drr 1: / | \ / | \ class drr class drr class drr quantum 200 quantum 800 (w/ max quantum) 1:1 1:2 1:3 VM1的stream量应该为1:1,VM2的stream量为1:2,其他都为1:3(因为DRR本身没有默认的类别)。 虚拟机的出站stream量被标记为1。 2.用iptables -L -v -n -t mangle我可以看到数据包正确标记。 我用下面的命令设置它: tc qdisc add dev wlan0 handle 1: root drr tc class add dev wlan0 parent 1: […]
我有通过eth0连接到互联网的machineA。 另一方面,MachineB通过网格连接到machineA,并通过machineA连接到互联网。 我想优先考虑来自机器B的stream量。 现在,只要machineB的上传速率在两者竞争带宽的时候就受到限制。 我怀疑问题是用于ifb0的filter,我用它来形成传入的stream量。 该行: tc filter add dev ifb0 parent 1: prio 1 protocol ip handle 1 fw flowid 1:10似乎不工作,所有数据包通过默认stream程,而不是1:10。 我仔细检查了iptables,它正确地标记数据包。 这是我目前的脚本: #!/bin/sh -x # Bandwidth of home connection MAX_BW=10 #in Mbits MAX_BW_GUEST=10 MIN_GUEST_BW=1 #minimum guaranteed guest bandwidth in Mbits # Interface facing the Internet EXTDEV=eth0 # Clear old queuing disciplines (qdisc) on […]
需要帮助女巫tc debian 8.我添加这样的类规则“tc类添加开发p514p1父1:0 classid 1:0xA486 htb率20480Kbit细胞102400Kbit量子2000 mtu 3000突发15k”,然后添加此类的过滤规则“tcfilter添加dev p514p1协议ip父亲1:0 prio 5 u32 ht A4:86:match ip dst 0.0.0.0/0 flowid 1:A486“。 我有错误“RTNETLINK答案:无效的参数我们有一个错误的内核交谈” tcfilter显示dev p514p1什么也没有显示,tc class show dev p514p1显示了很多类的规则,但是我试着删除/添加class和filter为A486,有同样的错误。 需要帮助,提前。