4. 使用 CBQ 处理其他占用带宽的协议

我们必须记住,如果我们的局域网用户使用 Napster、Kazaa 或 Realaudio,他们可能会破坏我们在第 3 章中的努力。我们还必须记住,我们没有阻止ftp流量在 3.3 节中。

我们将以不同的方式实现它——不是直接限制下载,而是间接地。如果我们的互联网设备是ppp0并且局域网设备是eth0,我们将限制接口eth0上的出站流量,从而限制ppp0.

的入站流量。为了做到这一点,我们将熟悉 CBQ 和cbq.init脚本。您可以从 ftp://ftp.equinox.gu.net/pub/linux/cbq/ 获取它。下载cbq.init-v0.6.2并将其放在.

/etc/rc.d/您还需要安装iproute2

。它随每个 Linux 发行版一起提供。现在查看您的/etc/sysconfig/cbq/为了做到这一点,我们将熟悉 CBQ 和目录。在那里,您应该有一个示例文件,它应该与

一起工作。如果它不在那里,您可能没有在内核中编译它,或者它没有作为模块存在。无论如何,只需创建该目录,放入下面提供的示例文件,看看它是否对您有效。

4.1. FTPftp在第 3 章中,我们没有阻止 ftp 有两个原因——以便我们可以进行上传,以及以便使用有 bug 的 IE5.5 的用户可以浏览ftp目录。总而言之,我们的 Web 浏览器和ftp程序应该通过我们的 Squid 代理进行下载,而

上传/重命名/删除应该通过 IP 伪装进行。我们创建一个名为cbq-10.ftp-network现在查看您的的文件在

目录中

# touch /etc/sysconfig/cbq/cbq-10.ftp-network

DEVICE=eth0,10Mbit,1Mbit
RATE=15Kbit
WEIGHT=1Kbit
PRIO=5
RULE=:20,192.168.1.0/24
RULE=:21,192.168.1.0/24

我们将以下行插入其中脚本。您可以从 ftp://ftp.equinox.gu.net/pub/linux/cbq/ 获取它。下载您将在

文件中找到这些行的描述。当您启动/etc/rc.d/cbq.init-v0.6.2现在查看您的:

脚本时,它将读取您的配置,该配置位于

# /etc/rc.d/cbq.init-v0.6.2 start如果一切正常,我们添加/etc/rc.d/cbq.init-v0.6.2 start到您的初始化脚本的末尾。通常,它可以是.

/etc/rc.d/rc.localftp感谢此命令,您的服务器将不会以高于约 15kbits/s 的速度发送eth0数据,因此将不会以高于 15kbits/s 的速度从互联网下载ftp数据。您的局域网用户将看到使用 Squid 代理进行ftp下载更有效率。他们也将能够使用他们有 bug 的 IE5.5 浏览ftp目录。

IE5.5 中还有另一个 bug - 当您右键单击ftp目录中的文件,然后选择“复制到文件夹”时,文件不是通过代理下载的,而是直接通过 IP 伪装下载的,从而忽略了带有延迟池的 Squid。

4.2. Napster、Realaudio、Windows Media 和其他问题

在这里,想法与ftp相同;我们只是添加另一个端口并设置不同的速度。

我们创建一个名为cbq-50.napster-networkcbq-10.ftp-network现在查看您的的文件在

的文件

# touch /etc/sysconfig/cbq/cbq-50.napsterandlive

DEVICE=eth0,10Mbit,1Mbit
RATE=35Kbit
WEIGHT=3Kbit
PRIO=5
#Windows Media Player.
RULE=:1755,192.168.1.0/24
#Real Player uses TCP port 554, for UDP it uses different ports,
#but generally RealAudio in UDP doesn't consume much bandwidth.
RULE=:554,192.168.1.0/24
RULE=:7070,192.169.1.0/24
#Napster uses ports 6699 and 6700, maybe some other?
RULE=:6699,192.168.1.0/24
RULE=:6700,192.168.1.0/24
#Audiogalaxy uses ports from 41000 to as high as probably 41900,
#there are many of them, so keep in mind I didn't list all of
#them here. Repeating 900 nearly the same lines would be of course
#pointless. We will simply cut out ports 410031-41900 using
#ipchains or iptables.
RULE=:41000,192.168.1.0/24
RULE=:41001,192.168.1.0/24
#continue from 41001 to 41030
RULE=:41030,192.168.1.0/24
#Some clever users can connect to SOCKS servers when using Napster,
#Audiogalaxy etc.; it's also a good idea to do so
#when you run your own SOCKS proxy
RULE=:1080,192.168.1.0/24
#Add any other ports you want; you can easily check and track
#ports that programs use with IPTraf
#RULE=:port,192.168.1.0/24

将这些行放入该文件

不要忘记使用 ipchains (内核 2.2.x) 或 iptables (内核 2.4.x) 剪切掉剩余的 Audiogalaxy 端口 (41031-41900)。

内核 2.2.x。

/sbin/ipchains -A input -s 192.168.1.1/24 -d ! 192.168.1.1 41031:41900 -p TCP -j REJECT

内核 2.4.x。

/sbin/iptables -A FORWARD -s 192.168.1.1/24 -d ! 192.168.1.1 --dport 41031:41900 -p TCP -j REJECT