我目前在我的 LAN 上设置了一个 FreeBSD 8.2 媒体服务器,我用它来传输我的音乐。
我还有一个 SSH 登录名,用于远程与此服务器进行文件传输。我想设置 ALTQ(并且已经让它工作了)来限制来自服务器的 SSH 流量的传出带宽。但是,以这种方式配置 ALTQ 也会限制我的内部流量(从而干扰我的音乐流),因为我只使用一个网络接口。
有人能告诉我如何使用 PF 和 ALTQ 来限制传出的 WAN 流量,同时允许所有内部 LAN 流量畅通无阻吗?
ext_if="eth0"
int_if="eth0"
altq on eth0 cbq bandwidth 1Mb queue { std, ssh }
queue std bandwidth 80% cbq(default)
queue ssh bandwidth 20% cbq(ecn)
pass out on eth0 proto tcp to port 22 queue ssh
eth0 是我的 LAN 接口,我的电缆连接上的总 WAN 带宽为 1Mb/s,我的内部网络为 10/100。
编辑:如果我说明我的网络,也许会更清楚:
我的网络上共有四台机器,全部连接到标准无线路由器(上面还没有 dd-wrt 或任何东西):1)需要 wifi 访问的 XBMC 盒 2)运行 Windows 的普通台式电脑 3)需要无线访问防火墙的笔记本电脑 4)运行 freebsd 的文件服务器,带有 1 个需要限制的 NIC。
文件服务器有一个 NIC。我真正需要做的就是将文件服务器上到 WAN 的总传出带宽限制为总宽带连接的任意百分比,而不对 LAN 文件传输应用相同的限制。为此,我确实需要 PF 能够区分 LAN 目的地数据包和 WAN 目的地数据包。
编辑:这是我最近一直在处理的但它似乎没有正确地将东西放入 WAN 队列:
my_net = 192.168.0.0/24
altq on eth0 cbq bandwidth 100Mb queue { wan, lan }
queue lan bandwidth 99500Kb cbq(default)
queue wan bandwidth 500Kb cbq(ecn)
pass out on eth0 from any to !$my_net queue lan
答案1
您的规则从根本上说是合理的,只是不够具体——您有一个接口(这不是您的防火墙,对吧?),因此您想根据目的地限制分配给“SSH”队列的内容。例如:
my_net=10.0.0.0/8
pass out on eth0 proto tcp from any to !$my_net port 22 queue ssh
您可能还需要考虑另外两件事:
- 将“借用”添加到“std”队列,这样当 SSH 不占用带宽时,你就有更快的速度处理其他事情
- 如果流媒体是真正重要的功能,您可能需要反转您的逻辑
(创建一个“音乐”队列,保留确保可靠流媒体所需的带宽量,让其他一切争夺剩余的带宽。)