All of lore.kernel.org
 help / color / mirror / Atom feed
* [LARTC] Packet marking for ingress shapping and NET
@ 2004-05-10 10:10 Patrick Spousta
  2004-05-10 10:59 ` Andreas Klauer
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Patrick Spousta @ 2004-05-10 10:10 UTC (permalink / raw)
  To: lartc

Hi,
I have typical situation, local LAN with private addresses, translated 
via NAT to internet. I need to shape ingress traffic (from internet to 
local LAN) in several HTB queues accorting to destination (private not 
public) IP. So I need mark packets to divide them to corresponding 
queue. According to http://www.docum.org/stef.coene/qos/kptd/ I thing I 
have only one way how to do it, because MARK in PREROUTING is before (de)NAT

PREROUTING (de)NAT
               V
FORWARD    marking
               V
FORWARD   put to IMQ
               V
          HTB shapping
               V
        routing decision
               V
        output interface

It has a small problem. After PREROUTING some packets are routed to 
INPUT (packets intended for this machine for local processes)

Does exists solution how to NAT and MARK in PREROUTING, but in this order?

Patrick

_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [LARTC] Packet marking for ingress shapping and NET
  2004-05-10 10:10 [LARTC] Packet marking for ingress shapping and NET Patrick Spousta
@ 2004-05-10 10:59 ` Andreas Klauer
  2004-05-10 12:06 ` Andy Furniss
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Andreas Klauer @ 2004-05-10 10:59 UTC (permalink / raw)
  To: lartc

Am Monday 10 May 2004 12:10 schrieb Patrick Spousta:
> So I need mark packets to divide them to corresponding queue.

That's all right so far. But the qdisc that shapes incoming traffic usually 
sits on your LAN device.

> It has a small problem. After PREROUTING some packets are routed to
> INPUT (packets intended for this machine for local processes)
>
> Does exists solution how to NAT and MARK in PREROUTING, but in this
> order?

I'm not sure if I understand what you want to do. Why do you want to mark 
INPUT packets? There is no qdisc/class to put them in. As for shaping 
incoming traffic that doesn't get forwarded to the LAN, I haven't found a 
proper solution to do that yet. So all I can do is make sure that the 
router doesn't produce any traffic (e.g. don't put a Webserver or similar 
services on it).

Andreas
_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [LARTC] Packet marking for ingress shapping and NET
  2004-05-10 10:10 [LARTC] Packet marking for ingress shapping and NET Patrick Spousta
  2004-05-10 10:59 ` Andreas Klauer
@ 2004-05-10 12:06 ` Andy Furniss
  2004-05-10 12:31 ` [LARTC] Packet marking for ingress shapping and NAT Patrick Spousta
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Andy Furniss @ 2004-05-10 12:06 UTC (permalink / raw)
  To: lartc

Patrick Spousta wrote:
> Hi,
> I have typical situation, local LAN with private addresses, translated 
> via NAT to internet. I need to shape ingress traffic (from internet to 
> local LAN) in several HTB queues accorting to destination (private not 
> public) IP. So I need mark packets to divide them to corresponding 
> queue. According to http://www.docum.org/stef.coene/qos/kptd/ I thing I 
> have only one way how to do it, because MARK in PREROUTING is before 
> (de)NAT
> 
> PREROUTING (de)NAT
>               V
> FORWARD    marking
>               V
> FORWARD   put to IMQ
>               V
>          HTB shapping
>               V
>        routing decision
>               V
>        output interface
> 
> It has a small problem. After PREROUTING some packets are routed to 
> INPUT (packets intended for this machine for local processes)
> 
> Does exists solution how to NAT and MARK in PREROUTING, but in this order?
> 

If you really need to shape for local and forwarded on ingress then you 
use IMQ + the IMQ NAT patch and use u32 to filter on dst IP (if you are 
masquerading a dynamic IP mark LAN traffic and use default for local).

If the traffic to local is not "bulk" ie just dns or ntp etc. then it 
would be less trouble to ignore it and just shape on your LAN facing 
interface marking on dst in postrouting or using u32 on dst - both 
should work, you may want to exclude traffic from server to LAN.

Andy.



_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [LARTC] Packet marking for ingress shapping and NAT
  2004-05-10 10:10 [LARTC] Packet marking for ingress shapping and NET Patrick Spousta
  2004-05-10 10:59 ` Andreas Klauer
  2004-05-10 12:06 ` Andy Furniss
@ 2004-05-10 12:31 ` Patrick Spousta
  2004-05-10 12:35 ` [LARTC] Packet marking for ingress shapping and NET Patrick Spousta
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Patrick Spousta @ 2004-05-10 12:31 UTC (permalink / raw)
  To: lartc



Andreas Klauer wrote:

> Am Monday 10 May 2004 12:10 schrieb Patrick Spousta:
> 
>>So I need mark packets to divide them to corresponding queue.
> 
> 
> That's all right so far. But the qdisc that shapes incoming traffic usually 
> sits on your LAN device.

I think you are wrong. Shapping can sits on all interfaces, physical and 
logical. IMQ is logical interface.

> 
> 
>>It has a small problem. After PREROUTING some packets are routed to
>>INPUT (packets intended for this machine for local processes)
>>
>>Does exists solution how to NAT and MARK in PREROUTING, but in this
>>order?
> 
> 
> I'm not sure if I understand what you want to do. Why do you want to mark 

My linux box has 1 WAN interface (to ISP with public IP address) and 3 
LAN interfaces (with private IP addresses). Only way how to shape 
incoming traffic is use IMG device because shapping is provided on 
egress. I understood that packet 'path' looks like this

eth0 -> kernel -> IMQ -> kernel -> ethX
                       ^^^ here is 'egress' where I can do shapping.

But I need divide traffic to the corresponding queues according to real 
destination IP. Maybe I don't need marking, I can only use tc filter, 
but it must be done in place where packet has real destination IP, ie. 
behind (de)NAT.

To IMQ 'interface' I put packets via iptables. Ideal in PREROUTING 
chain, but I think I can use only 'mange' table and that is before 'nat' 
:-( So now I'm using FORWARD chain but local traffic is going outside of 
shapping path

> INPUT packets? There is no qdisc/class to put them in. As for shaping 
> incoming traffic that doesn't get forwarded to the LAN, I haven't found a 
> proper solution to do that yet. So all I can do is make sure that the 
> router doesn't produce any traffic (e.g. don't put a Webserver or similar 
> services on it).

But it isn't goor solution :-(

Patrick

> 
> Andreas
> _______________________________________________
> LARTC mailing list / LARTC@mailman.ds9a.nl
> http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
> 
> 

_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [LARTC] Packet marking for ingress shapping and NET
  2004-05-10 10:10 [LARTC] Packet marking for ingress shapping and NET Patrick Spousta
                   ` (2 preceding siblings ...)
  2004-05-10 12:31 ` [LARTC] Packet marking for ingress shapping and NAT Patrick Spousta
@ 2004-05-10 12:35 ` Patrick Spousta
  2004-05-10 13:48 ` Andy Furniss
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Patrick Spousta @ 2004-05-10 12:35 UTC (permalink / raw)
  To: lartc

Hi

Andy Furniss wrote:

>> Does exists solution how to NAT and MARK in PREROUTING, but in this 
>> order?
>>
> 
> If you really need to shape for local and forwarded on ingress then you 
> use IMQ + the IMQ NAT patch and use u32 to filter on dst IP (if you are 
> masquerading a dynamic IP mark LAN traffic and use default for local).

It sounds good, but can you be more conrete?

> 
> If the traffic to local is not "bulk" ie just dns or ntp etc. then it 

Sometimes it is 'bulk' - FTP etc.

> would be less trouble to ignore it and just shape on your LAN facing 

Sorry, I forgot write that I have 3 LAN interfaces, so IMQ is only way 
how to do it.

Thanks
Patrick

> interface marking on dst in postrouting or using u32 on dst - both 
> should work, you may want to exclude traffic from server to LAN.
> 
> Andy.
> 


_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [LARTC] Packet marking for ingress shapping and NET
  2004-05-10 10:10 [LARTC] Packet marking for ingress shapping and NET Patrick Spousta
                   ` (3 preceding siblings ...)
  2004-05-10 12:35 ` [LARTC] Packet marking for ingress shapping and NET Patrick Spousta
@ 2004-05-10 13:48 ` Andy Furniss
  2004-05-10 20:09 ` Andy Furniss
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Andy Furniss @ 2004-05-10 13:48 UTC (permalink / raw)
  To: lartc

Patrick Spousta wrote:
> Hi
> 
> Andy Furniss wrote:
> 
>>> Does exists solution how to NAT and MARK in PREROUTING, but in this 
>>> order?
>>>
>>
>> If you really need to shape for local and forwarded on ingress then 
>> you use IMQ + the IMQ NAT patch and use u32 to filter on dst IP (if 
>> you are masquerading a dynamic IP mark LAN traffic and use default for 
>> local).
> 
> 
> It sounds good, but can you be more conrete?

Using IMQ generally or a script? - mine is pretty lame, unfinished and 
needs netfilter patches, though I suppose it could give an indication of 
what to do - I am still learning HTB myself, but have got sidetracked at 
the moment playing with esfq.

There is a new imq website www.linuximq.net from which you should be 
able to get imq working for whatever kernel you use. I don't know if 
they include the NAT patch yet - but it's only a couple of lines and 
should apply OK. If you happen to use 2.4.24 I can give urls for the 
patches I use.

Andy.

_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [LARTC] Packet marking for ingress shapping and NET
  2004-05-10 10:10 [LARTC] Packet marking for ingress shapping and NET Patrick Spousta
                   ` (4 preceding siblings ...)
  2004-05-10 13:48 ` Andy Furniss
@ 2004-05-10 20:09 ` Andy Furniss
  2004-05-11  4:25 ` [LARTC] Packet marking for ingress shapping and NAT Patrick Spousta
  2004-05-11 13:13 ` Andy Furniss
  7 siblings, 0 replies; 9+ messages in thread
From: Andy Furniss @ 2004-05-10 20:09 UTC (permalink / raw)
  To: lartc

Patrick Spousta wrote:

> It looks working fine :-) I never found any details about IMQ and NAT 
> patch, it looks that packet processing in kernel has path
> 
>                 |     PREROUTING chain       |
> input interface -> contrack -> mangle -> nat -> imq

So which IMQ did you use - did you need to patch for NAT (there are 
different versions about)

> ESFQ works fine, but only for ingress shapping over imq and NAT with 
> destination hash (= download on private IPs). I'm trying to setup ESFQ 
> on egress shaping for traffic from private to public IPs with source 
> hash (upload from private) but qdisc sits after NAT, ie. packets source 
> addresses are always the same public IP of external (wan) interface :-(
> 
> I try to use imq for egress shapping (on POSTROUTING chain), may it helps

I don't think IMQ will help - but you can mark local src in postrouting 
mangle OK. If you really want to use esfq, someone posted a patch on 
here a while back which made esfq hash on fwmark.

Andy.

_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [LARTC] Packet marking for ingress shapping and NAT
  2004-05-10 10:10 [LARTC] Packet marking for ingress shapping and NET Patrick Spousta
                   ` (5 preceding siblings ...)
  2004-05-10 20:09 ` Andy Furniss
@ 2004-05-11  4:25 ` Patrick Spousta
  2004-05-11 13:13 ` Andy Furniss
  7 siblings, 0 replies; 9+ messages in thread
From: Patrick Spousta @ 2004-05-11  4:25 UTC (permalink / raw)
  To: lartc



Andy Furniss wrote:
> Patrick Spousta wrote:
> 
>> It looks working fine :-) I never found any details about IMQ and NAT 
>> patch, it looks that packet processing in kernel has path
>>
>>                 |     PREROUTING chain       |
>> input interface -> contrack -> mangle -> nat -> imq
> 
> 
> So which IMQ did you use - did you need to patch for NAT (there are 
> different versions about)

Now I'm using patches from http://www.digriz.org.uk/jdg-qos-script/ 
(latest version which contains patches for IMQ, IMQ+NAT, ESFQ, IPP2P, 
CONNMARK, also recompiledtc andlibrarie for iptables, nice package) on 
kernel 2.4.25. It works good.

> 
>> ESFQ works fine, but only for ingress shapping over imq and NAT with 
>> destination hash (= download on private IPs). I'm trying to setup 
>> ESFQ on egress shaping for traffic from private to public IPs with 
>> source hash (upload from private) but qdisc sits after NAT, ie. 
>> packets source addresses are always the same public IP of external 
>> (wan) interface :-(
>>
>> I try to use imq for egress shapping (on POSTROUTING chain), may it helps
> 
> 
> I don't think IMQ will help - but you can mark local src in postrouting 

Do you mean manualy configured marking for many, many IP addresses? I 
think it isn't right way :-( I like ESFQ for it's source or destination 
hash because I don't need to setup any filters/markers for those IPs, 
ESFQ creats it's own queues for each IP.

In POSTROUTING chain it normaly look like this

... -> mangle -> nat -> imq -> (output interface)

I don't understand C language so I don't understand IMQ+NAT patch, but 
I'll try to use imq for egress shapping. Maybe the patch is working 
identically on PRE i POST chains.

Patrick

> mangle OK. If you really want to use esfq, someone posted a patch on 
> here a while back which made esfq hash on fwmark.


> 
> Andy.
> 
> 

_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [LARTC] Packet marking for ingress shapping and NAT
  2004-05-10 10:10 [LARTC] Packet marking for ingress shapping and NET Patrick Spousta
                   ` (6 preceding siblings ...)
  2004-05-11  4:25 ` [LARTC] Packet marking for ingress shapping and NAT Patrick Spousta
@ 2004-05-11 13:13 ` Andy Furniss
  7 siblings, 0 replies; 9+ messages in thread
From: Andy Furniss @ 2004-05-11 13:13 UTC (permalink / raw)
  To: lartc

Patrick Spousta wrote:

<snip>

>> I don't think IMQ will help - but you can mark local src in postrouting 
> 
> 
> Do you mean manualy configured marking for many, many IP addresses? I 
> think it isn't right way :-( I like ESFQ for it's source or destination 
> hash because I don't need to setup any filters/markers for those IPs, 
> ESFQ creats it's own queues for each IP.

Yes I agree - not nice for your setup, though personally the thing I 
don't like about using esfq on src/dst is you loose per tcp fairness - 
it was less than a year ago that I was on 56K and anyone with high 
latency downloading from you will get their already small bandwidth 
squeezed out by the low latency downloaders.

Maybe it's less noticable/of an issue for your big setup anyway.

> 
> In POSTROUTING chain it normaly look like this
> 
> ... -> mangle -> nat -> imq -> (output interface)
> 
> I don't understand C language so I don't understand IMQ+NAT patch, but 
> I'll try to use imq for egress shapping. Maybe the patch is working 
> identically on PRE i POST chains.

I only just started getting into C myself - (used motorolla 68000 
assembly years ago on an atari ST - these "high level" languages are 
much trickier :-) ).

I can see that the patch is trivial and needs an understanding of 
netfilter hooks more than C.

I just tested with u32 to double confirm what I knew really - the patch 
only affects prerouting hooks.

Then knowing nothing about netfilter decided to have a go at changing 
the egress hook - it appears to be working as expected.

One caveat - some people have reported stability problems using 
postrouting IMQ, probably to do with dropping locally generated traffic. 
I and others don't, but then I don't leave my gateway PC up that long. 
Grepping my logs :

Sent 3744702472 bytes 5539814 pkts (dropped 354902, overlimits 11722774)

is the most I can see (most of the drops are locally generated packets 
ie. bittorrent running on the shaping PC).

If you wan't to give my blind and possibly stupid hack a go you just 
need to change near the top of drivers/net/imq.c so it looks like -

static struct nf_hook_ops imq_egress_ipv4 = {
         { NULL, NULL},
         imq_nf_hook,
         PF_INET,
         NF_IP_POST_ROUTING,
         NF_IP_PRI_NAT_SRC - 1
};


Rather than -

static struct nf_hook_ops imq_egress_ipv4 = {
         { NULL, NULL},
         imq_nf_hook,
         PF_INET,
         NF_IP_POST_ROUTING,
         NF_IP_PRI_LAST
};

You could do the same for the egress ipv6 bits below it aswell.

If you still have your source tree intact and use modules cd to top dir 
in kernel tree do

make SUBDIRS=drivers/net modules

which should build a new imq.o in drivers/net

Backup /lib/modules/[your version]/kernel/drivers/net/imq.o

and replace with new one.

Take down shaping and modprobe -r imq (check it's gone with lsmod) and 
restart shaper.

It's a bit of a pain that imq is unstable for some anyway - you won't 
know whoose fault it is if/when it crashes :-)

Andy.

_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2004-05-11 13:13 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-05-10 10:10 [LARTC] Packet marking for ingress shapping and NET Patrick Spousta
2004-05-10 10:59 ` Andreas Klauer
2004-05-10 12:06 ` Andy Furniss
2004-05-10 12:31 ` [LARTC] Packet marking for ingress shapping and NAT Patrick Spousta
2004-05-10 12:35 ` [LARTC] Packet marking for ingress shapping and NET Patrick Spousta
2004-05-10 13:48 ` Andy Furniss
2004-05-10 20:09 ` Andy Furniss
2004-05-11  4:25 ` [LARTC] Packet marking for ingress shapping and NAT Patrick Spousta
2004-05-11 13:13 ` Andy Furniss

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.