hi all,
so you know that i have been thrown into this shaping business out of
nowhere, and i must admit, well, it''s slightly above my head. i think
i am starting to understand it, but i am not sure.
let me please use this forum to propose my theory and the
implementation, so that i have the chance to receive comments from
anyone who knows this stuff better than i do.
let''s simply the scenario: we have a router with three legs, eth0
being the internet (dynamic IP), eth1 the DMZ, and eth2 the LAN. we
have 96kbps downstream and 16kbps upstream. the LAN should be
guaranteed 32kbps down- and 5kpbs upstream. the DMZ should get 64kbps
down- and 11kbps upstream.
within the DMZ, there''s an FTP server, which should be guaranteed
16kbps downstream (PUT) and 5kbps upstream (GET). let the ascii art do
the magic:
LAN
|
32k ^|v 5k
|
>-- 96k --> |eth2 >-- 64k -->
internet ------------------------ X -------------------+---- DMZ
<-- 16k --< eth0 eth1 <-- 11k --< |
|
6k ^|v 16k
|
FTP
so i basically want to create a hierarchy as follows, after having
combined eth1 and eth2 into an imq [1] and used the iptables IMQX
target [2] to exclude eth0 from imq, as well as eth1<->eth2 traffic.
1. http://luxik.cdi.cz/~devik/qos/imq.htm
2. http://luxik.cdi.cz/~patrick
so i effectively have a traffic shaper with eth0 leaving the machine
upstream and the imq interface leaving the machine downstream.
so here''s the qdisc hierarchy i have in mind (applicable to both
interfaces, and both rooted at a htb qdisc with handle 1:):
+---- class htb 1:12 --- qdisc sfq 12:
|
+---- class htb 1:10
| |
| |
| +---- class htb 1:11 --- qdisc sfq 11:
class htb 1:1
|
+---- class htb 1:99 --- qdisc sfq 99:
because of NAT, i decided to employ FWMARK with the iptables
mangle/MARK target. i will thus combine iptables rules and tc filters
to categorize traffic as follows:
LAN <--> DMZ flowid 1:50
FTP <--> internet flowid 1:11
DMZ <--> internet flowid 1:12
default flowid 1:99
what''s the difference between using flowid and classid as the target
of a tc filter? the HOWTO [3] shows filters with "classid" down at the
bottom (search for "1.2.0.0 classid 1:1")
3. http://www.linuxdoc.org/HOWWTO/Adv-Routinh-HOWTO-12.html
and the following values for rate/ceil:
upstream downstream
1:1 16k/16k 96k/96k
1:10 11k/16k 64k/96k
1:11 5k/16k 16k/96k
1:12 6k/16k 48k/96k
1:99 5k/16k 32k/96k
does this look right so far? i think that much i can translate into
a command sequence by myself.
i am a little lost with the filters, aside from the flowid/classid
difference i asked above. basically it''s just one question:
say i create a tc filter for the FTP server:
iptables -t mangle -A PREROUTING -s 1.2.3.4/32 -j MARK --set-mark 123
which class do i "drop" it in?
tc filter add dev eth0 parent 1:0 protocol ip prio 1 \
handle 123 fw classid 1:11
is this right? i shouldn''t classify it as 11:, right?
anyway, any thoughts appreciated, and sorry for the lengthy post!
--
martin; (greetings from the heart of the sun.)
\____ echo mailto: !#^."<*>"|tr "<*> mailto:"
net@madduck
"alas, i am dying beyond my means."
-- oscar wilde