我使用带有库内核的Ubuntu服务器10.04作为NAT路由器。 我使用iptables和tc做基于端口的stream量优先级。 它工作正常。 我给了http更高的优先级。 所以我的networking被YouTube和更大的http下载所淹没。 我的问题是:是否有可能使iptables识别并标记属于youtubestream或更大的文件的数据包? 我的目标是使网页浏览更快。
你可以尝试使用-m connbytes 。 有它匹配的东西很大。 然后标记数据包,并使用tc的fwmark匹配机制。
不过,我倾向于同意其他人的意见,为此,你应该使用在第七层工作的东西。
-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可以进行一些限制/监pipe。
请注意,我在第一条规则中指定了-i,-o和-dir回复; 这将匹配进入广域网接口(和退出局域网接口)的数据包,这些数据包是对局域网中某人发起的传出连接的答复 。 如果您不指定-i和-o,并且/或者使用-dir,那么您也将匹配传出数据包(例如邮件服务器的邮件)。
这从iptables的angular度来看是一秒钟的。 当你一个接一个地处理数据包的时候,不可能把一个数据包标识为来自一个大文件或者一个小文件的传输,你只需要把它们传给它们。 如果你做深度包检测,你可以find更多关于内容的信息,但是你仍然不知道文件有多大,甚至是文件的一部分而不是网页。
你可以标记发送到和来自Youtube的数据包,并分别进行过滤,但是我发现你想用stream媒体做的最后一件事情是慢下来。 发生得越快,用户越快乐,交通越早越快。 您可以使用TC将来自Youtube服务器(通过IP块)的所有内容放到优先级较低的队列中,但如果您的用户仍在观看video,则需要花费很长时间还是短时间下载相同数量的字节移动您的networking。
我build议你考虑这至less部分是一个人力资源问题,并制定和执行(使用人类通信而不是数字检测)一些可接受的使用政策。 那么如果你仍然需要networking容量,那么你的基础设施要稍微增加。
正如Caleb已经发布的那样,这不是iptables的一项任务,因为你缺乏“正确的”内容检查function。 你可能想看看像Squid这样的HTTP代理。 最近的版本带有复杂的带宽pipe理机制,称为“延迟池”,可以与称为“ACL”的标记机制相结合,用于复杂的带宽pipe理场景。
我们已经在客户站点安装了鱿鱼装置,其要求与您的要求非常相似。