On Tue, Feb 27, 2007 at 07:57:58PM +0000, Stuart Henderson wrote:
> On 2007/02/27 12:31, Albert Chin wrote:
> > I created a queue to limit traffic on the internal interface
> > connecting 'EXTERNAL FIREWALL' to 'WWW/FTP SERVER':
> > altq on fxp1 cbq bandwidth 1.5Mb queue \
> > { queue_std, queue_ftp, queue_http }
> >
> > queue queue_std bandwidth 1.48Mb cbq(default)
> > queue queue_ftp bandwidth 10Kb
> > queue queue_http bandwidth 10Kb cbq(red)
> >
> > And, the rules allowing traffic to 'WWW/FTP SERVER':
> > pass in log on fxp1 proto { tcp, udp } from any to any \
> > port = domain keep state
> > pass out log on fxp1 proto tcp from any to any \
> > port = http keep state queue queue_http
> > pass out log on fxp1 proto tcp from any to any \
> > port = ftp keep state queue queue_ftp
> > pass out log on fxp1 inet proto icmp all \
> > icmp-type $icmp_types keep state queue queue_std
> >
> > From an external server, I attempted to download a file with curl
> > using ftp and www from 'WWW/FTP SERVER' server. Curl reports that
> > downloading via ftp shows no bandwidth limiting. As for www, the
> > bandwidth seems limited to ~30Kb/s. Why isn't my 10Kb bandwidth being
> > honoured?
>
> You're queueing on the wrong interface to restrict outgoing
> traffic. This is throttling _incoming_ traffic e.g. in your example
> it's throttling requests and mainly ACKs; due to RED dropping these
> ACKs you're probably triggering TCP congestion-avoidance.
I only added "red" to the http queue because it was in the http queues
in the pf FAQ :)
http://www.openbsd.org/faq/pf/queueing.html
> You can assign traffic to queues based on _state created by rules
> on fxp1_ (the state table entry includes the name of the queue to
> place the associated packets in). But the actual queues are for
> _outgoing_ traffic so they need to be on the interface applicable
> for that (in your case fxp4).
>
> For ftp, you are only assigning ftp _control_ traffic to a
> queue, not the data connections. Since you're using ftp-proxy,
> see the -q option.
Ok, thanks. I'm now running ftp-proxy with:
# /usr/sbin/ftp-proxy -R 192.168.10.1 -p 8022 -q queue_ftp
and I changed the queue rules to:
altq on fxp4 cbq bandwidth 1.5Mb queue \
{ queue_std, queue_ftp, queue_http }
queue queue_std bandwidth 80% priority 7 cbq(default borrow)
queue queue_ftp bandwidth 10% priority 0 cbq(borrow)
queue queue_http bandwidth 10% priority 3 cbq(borrow)
pass out log on fxp1 proto tcp from any to any \
port = http keep state queue queue_http
pass out log on fxp1 proto tcp from any to any \
port = ftp keep state queue queue_ftp
pass out log on fxp1 inet proto icmp all \
icmp-type $icmp_types keep state
Things seem to be working ok.
--
albert chin ([EMAIL PROTECTED])