让 iptables 识别 YouTube 流和大文件

让 iptables 识别 YouTube 流和大文件

我使用带有原版内核的 Ubuntu 服务器 10.04 作为 NAT 路由器。我使用 iptables 和 tc 进行基于端口的流量优先级排序。它工作正常。我已赋予 http 更高的优先级。因此我的网络被 youtube 和更大的 http 下载淹没。我的问题是:是否可以让 iptables 识别并标记属于 youtube 流或更大文件的数据包?我的目标是加快网页浏览速度。

答案1

你可以尝试使用-m connbytes。让它匹配一些大的东西。然后标记数据包,并使用 的tcfwmark 匹配机制。

然而,我倾向于同意其他人的观点:为了达到这个目的,你应该使用在第 7 层工作的东西。


使用示例-m connbytes

iptables -A FORWARD -i $WAN_IFACE -o $LAN_IFACE -m connbytes --connbytes $TRIGGER_SIZE: --connbytes-dir reply --connbytes-mode bytes -j CONNMARK --set-mark $BULK_MARKER
iptables -t mangle -A PREROUTING -m connmark --mark $BULK_MARKER -j CONNMARK --restore-mark

第一条规则将匹配連接其传输的总字节数大于 $TRIGGER_SIZE (小心;冒号必须存在!)

第二条规则将把 CONNMARK 转移到数据包 MARK(fwmark),以便tc可以进行一些限制/监管。

请注意,我在第一条规则中指定了 -i、-o 和 -dir reply;这将匹配进入 WAN 接口(和退出 LAN 接口)的数据包,这些数据包回复到 LAN 中某人发起的传出连接。如果您未指定 -i 和 -o,和/或同时使用 -dir,您还将匹配传出数据包(例如,来自邮件服务器的邮件)。

答案2

从一秒钟的角度来看iptables,当您逐个处理数据包时,无法识别数据包是来自大文件还是小文件的传输,您只能将它们传递下去。如果您进行深度数据包检查,您可以找到有关内容的更多信息,但您仍然不知道文件有多大,甚至不知道它是文件的一部分而不是网页。

您可以标记往返 Youtube 的数据包并分别过滤它们,但我发现,对于流媒体,您最不想做的事情就是减慢速度。速度越快,用户就越高兴,流量也越快消失。您可以使用 TC 将来自 Youtube 服务器的所有内容(按 IP 块)放入优先级较低的队列,但如果您的用户仍在观看视频,无论他们下载的时间是长是短,相同数量的字节都会在您的网络上传输。

我建议你至少将这部分视为人力资源问题,并制定和执行(使用人际沟通而不是数字检测)一些可接受的使用政策。然后,如果你仍然需要网络容量,请稍微扩大你的基础设施。

答案3

正如 Caleb 所说,这不是 iptables 的任务,因为您缺少“适当的”内容检查功能。您可能需要查看 HTTP 代理,例如乌贼最近的版本带有称为“延迟池”的复杂带宽调节机制,该机制可与称为“ACL”的标记机制结合使用,以实现复杂的带宽管理场景。

我们已经在客户现场设置了 Squid 装置,其要求与您的非常相似。

相关内容