IMQ a NAT

Libor Chocholaty libor_ml1 na mts.cz
Čtvrtek Duben 13 19:53:58 CEST 2006


Ahoj,

mam zajimavou potiz s shapovanim. Mam router, ktery na jednom rozhrani 
ma pripoj do internetu a na ostatnich ruzne segmenty lokalni site. Dela 
se NAT (maskarada) a pro vybrane IP na vnitrni siti delam NAT 1:1, takze 
maji jakoby verejnou adresu.

# iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 103M packets, 7318M bytes)
 pkts bytes target     prot opt in     out     source               
destination
  929 70723 DNAT       all  --  eth0   any     anywhere             
marvin_verejna      to:marvin_lokal

Chain POSTROUTING (policy ACCEPT 60M packets, 4901M bytes)
 pkts bytes target     prot opt in     out     source               
destination
  166 12616 SNAT       all  --  any    eth0    wlink-heaven-marvin  
anywhere            to:marvin_verejna
 108K 9060K SNAT       all  --  any    eth0    olink-heaven-marvin  
anywhere            to:marvin_verejna
  77M 5620M MASQUERADE  all  --  any    eth0    anywhere             
anywhere

pozn: linka na marvina je zalohovana (optika + wifi zaloha) - proto jsou 
pro SNAT dve pravidla

Dale pouzivam IMQ pro shapovani internetoveho pripojeni (eth0), abych 
dostal tri interfejsy (eth1,2,4) vedouci do lokalni site do jedne HTB tridy.

Problem je, ze tyhle kompy s "verejnou" IP ocividne nejdou shaprem. 
Posilani do IMQ0 mam udelany:

# iptables -t mangle -L POSTROUTING -v
Chain POSTROUTING (policy ACCEPT 5037M packets, 3355G bytes)
 pkts bytes target     prot opt in     out     source               
destination
 433M  354G IMQ        all  --  any    eth1    anywhere             
anywhere            IMQ: todev 0
 105M   74G IMQ        all  --  any    eth2    anywhere             
anywhere            IMQ: todev 0
1554M 1161G IMQ        all  --  any    eth4    anywhere             
anywhere            IMQ: todev 0

shaper pouziva HTB a do trid zarazuju pomoci 'tc filter' a na co neni 
pravidlo, spadne do velmi omezene default tridy.
tc qdisc del dev imq0 root
tc qdisc add dev imq0 root handle 1: htb default 5 r2q 1
tc class add dev imq0 parent 1: classid 1:1 htb rate 20mbit ceil 20mbit 
quantum 125000
...
tc class add dev imq0 parent 1:1 classid 1:5 htb rate 32kbit ceil 32kbit
...

No a zaver toho celeho je, ze se traffik pro marvina vubec neshapuje. 
IMQ mam nastaveny, ze postrouting je za NATem a prerouting pred NATem, 
takze tam vzdy vidim neverejne adresy kompu v lokalni siti.

Vypada to, ze traffik pro kompy s "verejnou" adresou neni vubec protazen 
skrz IMQ0, kde na nej marne ceka shaper.
Pro vsechny ostatni kompy, ktere nemaji "verejnou" adresu to funguje 
jedna basen.

Dokazete me nekdo nakopnout co delam spatne?

Libor






Další informace o konferenci Linux