CBQ, prakticky priklad - VYRESENO

Marek Barton bivoj na pohoda.com
Úterý Květen 7 16:35:17 CEST 2002


sypu si popel na hlavu. Vse funguje, problem byl pochopitelne v mereni.
Generoval jsem totiz traffic z lan do stroje s cbq, tudiz to neprochazelo
odchozim shaperem do internetu... 

Funguje to i pres cbq.init-v0.7. Popisu cely postup jeste jednou, aby to
bylo ucelene v archivu pro budouci zajemce:

sit:

Internet             Linux                uzivatel
                +-------------+           192.168.1.115
----------------+eth0     eth1+----------------
                +-------------+                          
		   NAT, cbq

smer 0/0->192.168.1.115 je bez problemu, ale smer 192.168.1.115->0/0 je
treba na vstupnim filtru na lokalnim ifacu oznackovat, protoze NAT prepise
zdrojou adresu.

znackovani:
/sbin/ipchains -A input -s 192.168.1.115 -m 773

cbq:
--
1. tc qdisc del dev eth0 root
2. tc qdisc add dev eth0 root handle 1 cbq bandwidth 100Mbit avpkt 1000 \
	cell 8
3. tc class change dev eth0 root cbq weight 10Mbit allot 1514
--
4. tc qdisc del dev eth1 root
5. tc qdisc add dev eth1 root handle 1 cbq bandwidth 10Mbit avpkt 1000 \
	cell 8
6. tc class change dev eth1 root cbq weight 1Mbit allot 1514
--
7. tc class add dev eth0 parent 1: classid 1:1364 cbq bandwidth 100Mbit \
	rate 64Kbit  weight 6Kbit prio 5 allot 1514 cell 8 maxburst 20 \
	avpkt 1000 bounded
8. tc qdisc add dev eth0 parent 1:1364 handle 1364 tbf rate 64Kbit \ 
	buffer 10Kb/8 limit 15Kb mtu 1500
9. tc filter add dev eth0 parent 1:0 protocol ip prio 200 handle 773 \
	fw classid 1:1364
--
10. tc class add dev eth1 parent 1: classid 1:1464 cbq bandwidth 10Mbit \
	rate 64Kbit weight 6Kbit prio 5 allot 1514 cell 8 maxburst 20 \
	avpkt 1000 bounded
11. tc qdisc add dev eth1 parent 1:1464 handle 1464 tbf rate 64Kbit \ 
	buffer 10Kb/8 limit 15Kb mtu 1500
12. tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match \
	ip dst 192.168.1.115 classid 1:1464  
--

nebo pres cbq.init:

cbq-0164.uzivatel-in:
--------------------
DEVICE=eth0,100Mbit,10Mbit
RATE=64Kbit
WEIGHT=6Kbit
PRIO=5 
MARK=773

cbq-0264.uzivatel-out:
---------------------
DEVICE=eth1,10Mbit,1Mbit
RATE=64Kbit
WEIGHT=6Kbit
PRIO=5
RULE=192.168.1.115

Se znackovanim pres iptables nemam zkusenosti, ale mohl by nastat problem.
Viz. Lubos Bulej wrote:

"Znackovani funguje jak by clovek ocekaval, ale problem s iptables je,
ze by default "mangle" neumi tusim prerouting chain, ktery je potreba k
oznaceni paketu, ktere jdou _od_ uzivatelu, ale u kterych bude prepsana
zdrojova adresa.

Vim ze jsem to resil tak, ze jsem si upravil kernel a iptables tak, aby
"mangle" table umela i prerouting chain. Kdyz jsem to pak psal do
netfilter-devel, tak jsem byl asi ctvrtej clovek, kterej tam posilal patch
na stejnou vec :-)

Doslo se k zaveru, ze presto, ze "mangle" muze pekne rozhodit NAT, melo by
to byt "strileni se do nohou ci veseni na vlastnim provaze" nechano na
libovuli uzivatele a ze "mangle" table bude obsahovat vsech 5 chains --
nevim vsak jestli uz je to v novejsich kernelech a jestli uz s tim binarky
iptables pocitaji.

Kazdopadne patche existuji, hledal bych na netfilter.org... "


Marek Barton






Další informace o konferenci Linux