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