how to use eficiently CLASSIFY, MARK, CONNMARK, CONNLIMIT ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello


I've build a traffic shapper base on debian lenny with 2.6.24 customised kernel. I'm not sure that the netfilter list is appropiate for get an answer so I will post this on LARTC mailing list.

I'm searching more information about CLASSIFY and MARK and CONNMARK. I'm not sure to understand everything !

I've got various doubts  :

- What achieve exactly CLASSIFY vs MARK. Because seems that you can have "-j CLASSIFY --set-mark" or "-j CLASSIFY --set-class" ? isn't it ? So What is the exact difference between CLASSIFY and MARK ? CLASSIFY target can "classify" and "mark" and MARK just "mark" ?

- Should I use CONNMARK to optimise matching on an heavy loaded traffic shapper ?

- In the example code bellow I've classified VoIP traffic using another custom chain (QOS_out_voip ...) and p2p directly. Which method give best performance ? Make a jump through another custom chain may slowdown matching ? I will prefer to use a custom chain but performance is the first ... My traffic shapper must
support  90Mbits of bandwith with  20000 packets/s

- I would like to limit to 4096 P2P connection foreach IP. Does it relevant to use a rule like this : ... --connlimit-mask 32 --connlimit-above 4096 --jump drop ?

Please take a look to my example and give me some feedback.


MY SCENARIO

1) My box is setup as transparent bridge as this

eth0/LAN  -------------------   eth1/WAN
-------------- |   SHAPPER  | -------------
                  -------------------
                           br0

2) I've setup  various HTB qdisc and classes to matches my need :

for eth0 (download)

1:  root
1:10    main
1:100  icmp
1:200  interactive
1:300  voip
1:400  web
1:500  bulk

... and for eth1  (upload)

2: root
2:10 main
2:100 icmp
...


2) I've created two CUSTOM chains to get outgoing traffic (egress) of each interfaces

IPTABLES=/usr/local/sbin/iptables

${IPTABLES} --table mangle --new QOS_in
${IPTABLES} --table mangle --append POSTROUTING --out-interface br0 --match physdev --physdev-out eth0 --jump QOS_in

...

${IPTABLES} --table mangle --new QOS_out
${IPTABLES} --table mangle --append POSTROUTING --out-interface br0 --match physdev --physdev-out eth1 --jump QOS_out

...
3) I'm trying to use CONNMARK to

${IPTABLES} --table mangle --append QOS_in --jump CONNMARK --restore-mark
${IPTABLES} --table mangle --append QOS_in --match mark ! --mark 0 -j RETURN

...

#voIP
#(1st way with another custom chain)

${IPTABLES} --table mangle --new QOS_out_voip
${IPTABLES} --table mangle --append QOS_out_voip --jump CLASSIFY --set-class 1:300
${IPTABLES} --table mangle --append QOS_out_voip --jump RETURN

${IPTABLES} --table mangle --append QOS_in --match mark --mark 300 --jump QOS_out_voip
${IPTABLES} --table mangle --append QOS_in --match mark --mark 0 --jump MARK --set-mark 300 --match helper --helper sip ${IPTABLES} --table mangle --append QOS_in --match mark --mark 0 --jump MARK --set-mark 300 --proto tcp --sport 5060


#p2p #(2nd way without use custom chain)

${IPTABLES} --table mangle --append QOS_in --match mark --mark 500 --m connlimit --connlimit-above 4096 --connlimit-mask 32 --jump DROP
${IPTABLES} --table mangle --append QOS_in --match mark --mark 500 --jump CLASSIFY --set-class 1:500
${IPTABLES} --table mangle --append QOS_in --match mark --mark 500 --jump RETURN

${IPTABLES} --table mangle --append QOS_in --match mark --mark 0 --jump MARK --set-mark 500 --match ipp2p --ipp2p
...

${IPTABLES} --table mangle --append QOS_in --jump CONNMARK --save-mark



Thank you for your help

--
To unsubscribe from this list: send the line "unsubscribe netfilter" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux