All of lore.kernel.org
 help / color / mirror / Atom feed
* [LARTC] large routing table
@ 2004-03-30 22:56 Rene Gallati
  2004-03-31  1:06 ` alex
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Rene Gallati @ 2004-03-30 22:56 UTC (permalink / raw)
  To: lartc

Hello List,

I have a little non-standard problem (or so I guess). I'm getting a 
sponsored server on a backbone for almost nothing - which is quite nice. 
However there is a string attached: Since the bandwith to foreign 
countries is expensive, while in-land bandwith is almost free, I need to 
shape down access to all "foreign" IPs.

Now I have a (large) list of routes/prefixes for destinations which are 
ok - a whitelist if you want. The question I have now is, how do I best 
proceed in using that list so that the kernel does not spend too much 
time looking it up for every single packet.

Is the routing table hashed by default so access is fast and I can just 
pump in the ~100KBytes of ip prefixes ? Or does it traverse them 
linearly and I need to build a hierarchical structure so that it will be 
fast ? (sort of like in section 12.4 of the LARTC howto with the filters?)

I've also toyed with the idea of doing it in netfilter since I know 
netfilter quite a lot better than tc and ip but it is mostly outgoing 
traffic that is a problem and I sort of feel that this is better done by 
the routing/filtering infrastructure than by the firewall.

Any advice?

Thanks in advance

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

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

* Re: [LARTC] large routing table
  2004-03-30 22:56 [LARTC] large routing table Rene Gallati
@ 2004-03-31  1:06 ` alex
  2004-03-31  1:25 ` alex
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: alex @ 2004-03-31  1:06 UTC (permalink / raw)
  To: lartc

On Wed, 31 Mar 2004, Roy wrote:

> 100kbytes of prefixes is not so good , hashing does not mean anything
> faster when checking ip you will need to test 4 bytes in any way, since
> hash is usualy 32 bit too. this can help on very complex rules only. so
> if you pump 100 kbytes of prefixes this is probably 7000 addreses so on
> each packet 7000 tests will be done.
Incorrect. Linux route lookup is crappy, but not THAT crappy.
Route-cache somewhat helps too.

-alex

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

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

* Re: [LARTC] large routing table
  2004-03-30 22:56 [LARTC] large routing table Rene Gallati
  2004-03-31  1:06 ` alex
@ 2004-03-31  1:25 ` alex
  2004-03-31  1:26 ` Roy
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: alex @ 2004-03-31  1:25 UTC (permalink / raw)
  To: lartc

On Wed, 31 Mar 2004, Roy wrote:

> I know that routes can be cached what should help, but here we are
> talking about tc u32 filter, which can not be cached as I know without
> hierarchy it is not posible to decrease amount of testing
> 
> but the interesting idea is to use route for packet classification
> or it can be simulated with netfilters connmark module.
> then amount of test to be done will be more than half of active connections
> number.
Sorry - my bad, I thought that the poster *was* talking about using route
(and realm) for packet classification and tc based on realm.

-alex

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

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

* Re: [LARTC] large routing table
  2004-03-30 22:56 [LARTC] large routing table Rene Gallati
  2004-03-31  1:06 ` alex
  2004-03-31  1:25 ` alex
@ 2004-03-31  1:26 ` Roy
  2004-03-31  1:45 ` Roy
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Roy @ 2004-03-31  1:26 UTC (permalink / raw)
  To: lartc

100kbytes of prefixes is not so good , hashing does not mean anything faster
when checking  ip
you will need to test 4 bytes in any way, since hash is usualy 32 bit too.
this can help on very complex rules only.
so if you pump 100 kbytes of prefixes this is probably 7000 addreses so on
each packet 7000 tests will be done.


everything mostly depends on how much trafic you need to pass.
probably hierarchical structure is the best option.
you can use multiple servers to mark packets and one to shape trafic ( you
sould use TOS not mark)




----- Original Message ----- 
From: "Rene Gallati" <lartc@draxinusom.ch>
To: <lartc@mailman.ds9a.nl>
Sent: Wednesday, March 31, 2004 1:56 AM
Subject: [LARTC] large routing table


> Hello List,
>
> I have a little non-standard problem (or so I guess). I'm getting a
> sponsored server on a backbone for almost nothing - which is quite nice.
> However there is a string attached: Since the bandwith to foreign
> countries is expensive, while in-land bandwith is almost free, I need to
> shape down access to all '"'foreign'"' IPs.
>
> Now I have a (large) list of routes/prefixes for destinations which are
> ok - a whitelist if you want. The question I have now is, how do I best
> proceed in using that list so that the kernel does not spend too much
> time looking it up for every single packet.
>
> Is the routing table hashed by default so access is fast and I can just
> pump in the ~100KBytes of ip prefixes ? Or does it traverse them
> linearly and I need to build a hierarchical structure so that it will be
> fast ? (sort of like in section 12.4 of the LARTC howto with the filters?)
>
> I've also toyed with the idea of doing it in netfilter since I know
> netfilter quite a lot better than tc and ip but it is mostly outgoing
> traffic that is a problem and I sort of feel that this is better done by
> the routing/filtering infrastructure than by the firewall.
>
> Any advice?
>
> Thanks in advance
>
> René
> _______________________________________________
> 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] 12+ messages in thread

* Re: [LARTC] large routing table
  2004-03-30 22:56 [LARTC] large routing table Rene Gallati
                   ` (2 preceding siblings ...)
  2004-03-31  1:26 ` Roy
@ 2004-03-31  1:45 ` Roy
  2004-03-31  9:50 ` Jeroen Vriesman
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Roy @ 2004-03-31  1:45 UTC (permalink / raw)
  To: lartc

I know that routes can be cached what should help, but
here we are talking about tc u32 filter, which can not be cached as I know
without hierarchy it is not posible to decrease amount of testing

but the interesting idea is to use route for packet classification
or it can be simulated with netfilters connmark module.
then amount of test to be done will be more than half of active connections
number.

----- Original Message ----- 
From: <alex@pilosoft.com>
To: "Roy" <roy@xxx.lt>
Cc: <lartc@mailman.ds9a.nl>
Sent: Wednesday, March 31, 2004 4:06 AM
Subject: Re: [LARTC] large routing table


> On Wed, 31 Mar 2004, Roy wrote:
>
> > 100kbytes of prefixes is not so good , hashing does not mean
> anything
> > faster when checking ip you will need to test 4 bytes in any
> way, since
> > hash is usualy 32 bit too. this can help on very complex rules
> only. so
> > if you pump 100 kbytes of prefixes this is probably 7000
> addreses so on
> > each packet 7000 tests will be done.
> Incorrect. Linux route lookup is crappy, but not THAT crappy.
> Route-cache somewhat helps too.
>
> -alex
>

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

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

* Re: [LARTC] large routing table
  2004-03-30 22:56 [LARTC] large routing table Rene Gallati
                   ` (3 preceding siblings ...)
  2004-03-31  1:45 ` Roy
@ 2004-03-31  9:50 ` Jeroen Vriesman
  2004-03-31 10:26 ` Jeroen Vriesman
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Jeroen Vriesman @ 2004-03-31  9:50 UTC (permalink / raw)
  To: lartc

Hi,

this is exactly why ip addresses are already grouped with respect to location.

So it should be possible to optimize things, maybe use some perl with http://search.cpan.org/~nwetters/IP-Country-2.15/lib/IP/Country.pm
e.g. 194.0.0.0/8 is NL

And I guess you can afford to make some errors, e.g. shaping a destination which shouldn't be shaped is not a crime if it wouldn't happen too often, just make sure you shape foreign IP's, how bad would it be to shape some non-foreign IP's accidently?

And, ofcourse, either "foreign IP's" or "non foreign IP's" is the smallest list, use the samllest list.

Good luck,
Jeroen. 




On Wed, 31 Mar 2004 00:56:52 +0200
Rene Gallati <lartc@draxinusom.ch> wrote:

> Hello List,
> 
> I have a little non-standard problem (or so I guess). I'm getting a 
> sponsored server on a backbone for almost nothing - which is quite nice. 
> However there is a string attached: Since the bandwith to foreign 
> countries is expensive, while in-land bandwith is almost free, I need to 
> shape down access to all "foreign" IPs.
> 
> Now I have a (large) list of routes/prefixes for destinations which are 
> ok - a whitelist if you want. The question I have now is, how do I best 
> proceed in using that list so that the kernel does not spend too much 
> time looking it up for every single packet.
> 
> Is the routing table hashed by default so access is fast and I can just 
> pump in the ~100KBytes of ip prefixes ? Or does it traverse them 
> linearly and I need to build a hierarchical structure so that it will be 
> fast ? (sort of like in section 12.4 of the LARTC howto with the filters?)
> 
> I've also toyed with the idea of doing it in netfilter since I know 
> netfilter quite a lot better than tc and ip but it is mostly outgoing 
> traffic that is a problem and I sort of feel that this is better done by 
> the routing/filtering infrastructure than by the firewall.
> 
> Any advice?
> 
> Thanks in advance
> 
> _______________________________________________
> 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] 12+ messages in thread

* Re: [LARTC] large routing table
  2004-03-30 22:56 [LARTC] large routing table Rene Gallati
                   ` (4 preceding siblings ...)
  2004-03-31  9:50 ` Jeroen Vriesman
@ 2004-03-31 10:26 ` Jeroen Vriesman
  2004-03-31 21:01 ` Rene Gallati
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Jeroen Vriesman @ 2004-03-31 10:26 UTC (permalink / raw)
  To: lartc

Another idea:

by default shape everything, but allow it to burst a bit (if that's not a problem).

make MARK X not shaped.

MARK X some big networks which will always be Switserland.

Then make a script (using the perl module I metioned previously) to check whether a new connection should be shaped or not, if it should not be shaped, and if it's not part of the marked IP's already, you add an entry to the MARK X list the /24 network where the IP address is in. (I think you can safely say that a /24 network is in one country).

After one of these "temporary" marks is inactive for a while, remove it from the MARK X list, increase the "time to stay" for networks which are used often.

So, your server apps should trigger a script (in the background) upon every new connection (maybe some tcpwrappers can do that, maybe you have to modify a tcpwrapper).

make sure to update the database used by the scripts, Geo::IP has a "premium database subscription" update thingy.

Good luck, you can mail me if you need some help,
Jeroen.




On Wed, 31 Mar 2004 00:56:52 +0200
Rene Gallati <lartc@draxinusom.ch> wrote:

> Hello List,
> 
> I have a little non-standard problem (or so I guess). I'm getting a 
> sponsored server on a backbone for almost nothing - which is quite nice. 
> However there is a string attached: Since the bandwith to foreign 
> countries is expensive, while in-land bandwith is almost free, I need to 
> shape down access to all "foreign" IPs.
> 
> Now I have a (large) list of routes/prefixes for destinations which are 
> ok - a whitelist if you want. The question I have now is, how do I best 
> proceed in using that list so that the kernel does not spend too much 
> time looking it up for every single packet.
> 
> Is the routing table hashed by default so access is fast and I can just 
> pump in the ~100KBytes of ip prefixes ? Or does it traverse them 
> linearly and I need to build a hierarchical structure so that it will be 
> fast ? (sort of like in section 12.4 of the LARTC howto with the filters?)
> 
> I've also toyed with the idea of doing it in netfilter since I know 
> netfilter quite a lot better than tc and ip but it is mostly outgoing 
> traffic that is a problem and I sort of feel that this is better done by 
> the routing/filtering infrastructure than by the firewall.
> 
> Any advice?
> 
> Thanks in advance
> 
> _______________________________________________
> 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] 12+ messages in thread

* Re: [LARTC] large routing table
  2004-03-30 22:56 [LARTC] large routing table Rene Gallati
                   ` (5 preceding siblings ...)
  2004-03-31 10:26 ` Jeroen Vriesman
@ 2004-03-31 21:01 ` Rene Gallati
  2004-03-31 21:19 ` Rene Gallati
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Rene Gallati @ 2004-03-31 21:01 UTC (permalink / raw)
  To: lartc

Hello,

 > this is exactly why ip addresses are already grouped with respect to 
location.
 >
 > So it should be possible to optimize things, maybe use some perl with 
http://search.cpan.org/~nwetters/IP-Country-2.15/lib/IP/Country.pm
 > e.g. 194.0.0.0/8 is NL


Nope its not, I have 919 prefixes starting with 194 which are located in 
Switzerland. And they really are, for example picking one out randomly:

nslookup 194.242.34.1 yields:

Name:    switch.swissix.ch
Address:  194.242.34.1

whois:
inetnum:      194.242.34.0 - 194.242.34.255
netname:      SWISSIX
descr:        swissix, Swiss Internet Exchange
country:      CH
admin-c:      MC322-RIPE
tech-c:       MC322-RIPE
status:       ASSIGNED PI
notify:       noc@sissix.ch
mnt-by:       RIPE-NCC-HM-PI-MNT
mnt-by:       SWISSIX-MNT
mnt-lower:    RIPE-NCC-HM-PI-MNT

To the best of my knowledge, region based IP-ranges are in IPv6 but not 
in IPv4.

 > And I guess you can afford to make some errors, e.g. shaping a 
destination which shouldn't be shaped is not a crime if it wouldn't 
happen too often, just make sure you shape foreign IP's, how bad would 
it be to shape some non-foreign IP's accidently?


Problem is the server runs several applications and mine is but one of 
it. I am to make as little trouble as possible. However I do have a very 
good list of which IP ranges are ok and the complement are those that 
are not. My list comes directly from a skript that pulls it out of the 
core router.

Some of the prefixes can be aggregated but that is a minor optimization.

 > And, ofcourse, either "foreign IP's" or "non foreign IP's" is the 
smallest list, use the samllest list.


I have only the non-foreign list, but I am very sure that this one is 
smaller than the rest of the internet

Its exactly 6486 prefixes atm. (without aggregating those that are 
possible). In any case too many to process linearly.

CU

René



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

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

* Re: [LARTC] large routing table
  2004-03-30 22:56 [LARTC] large routing table Rene Gallati
                   ` (6 preceding siblings ...)
  2004-03-31 21:01 ` Rene Gallati
@ 2004-03-31 21:19 ` Rene Gallati
  2004-03-31 21:24 ` Rene Gallati
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Rene Gallati @ 2004-03-31 21:19 UTC (permalink / raw)
  To: lartc

Hello,

> by default shape everything, but allow it to burst a bit (if that's not a problem).

Yeah, however my traffic won't really be too large. I expect max 
bandwidth usage of about 1mbps to 2mbps max. I just need to make sure 
that stays in the country, because if such bandwidth usage crosses 
boundaries, its going to create costs that are unbearable.

> make MARK X not shaped.
> 
> MARK X some big networks which will always be Switserland.
> 
> Then make a script (using the perl module I metioned previously) to check whether a new connection should be shaped or not, if it should not be shaped, and if it's not part of the marked IP's already, you add an entry to the MARK X list the /24 network where the IP address is in. (I think you can safely say that a /24 network is in one country).

The problem is that the geo-skript is wrong - and I already have a 
"perfect" list, so I rather use this, especially because that list is 
provided by the people who own the machine/network, so when in doubt I 
can always claim that I did my best to prevent undesired leakage.

As for the minimum size, I too think this is a safe assumption, though I 
need to check. I already wrote a skript that breaks the list up into 
different buckets according to the first byte. I just added a little 
check to see what the largest and smallest prefixes are:

This is the output (number of different prefixes sorted per first byte):
smallest prefix = 24, largest = 11
total 6486
15 = 7
16 = 4
32 = 15
40 = 7
44 = 1
53 = 3
57 = 1
60 = 1
62 = 312
63 = 4
64 = 5
66 = 14
69 = 5
80 = 249
81 = 221
82 = 153
83 = 49
128 = 15
129 = 16
130 = 23
131 = 27
132 = 2
134 = 11
135 = 1
136 = 5
137 = 9
138 = 16
139 = 18
140 = 4
141 = 20
143 = 9
144 = 13
145 = 23
146 = 27
147 = 19
148 = 13
149 = 21
150 = 2
151 = 5
152 = 6
153 = 13
154 = 6
155 = 24
156 = 10
157 = 6
158 = 10
159 = 23
160 = 20
161 = 9
162 = 7
163 = 9
164 = 21
166 = 1
167 = 1
168 = 7
170 = 7
171 = 5
192 = 532
193 = 1246
194 = 919
195 = 634
196 = 10
198 = 16
199 = 17
202 = 43
203 = 37
204 = 8
205 = 5
206 = 3
207 = 2
208 = 17
209 = 19
212 = 511
213 = 438
216 = 21
217 = 473

193.* is actually the one with most prefixes in it.

> After one of these "temporary" marks is inactive for a while, remove it from the MARK X list, increase the "time to stay" for networks which are used often.
> 
> So, your server apps should trigger a script (in the background) upon every new connection (maybe some tcpwrappers can do that, maybe you have to modify a tcpwrapper).
> 
> make sure to update the database used by the scripts, Geo::IP has a "premium database subscription" update thingy.

I just talked today with the owner about this and I think I'll go 
another way. I might use netfilter's connection tracker so that the 
lookup that decides which class to use is only done on connection setup 
and not per packet. Still, 6000 rules are too much so I'm going to 
create a hierarchical ruleset to minimize the worst case. I don't want 
to have anything beyond 30 rules worst case checking or so because the 
server runs different applications and I should not make my presence 
negatively noticeable. I think that is the best approach in this situation.

Thanks for all the advice!

CU

René

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

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

* Re: [LARTC] large routing table
  2004-03-30 22:56 [LARTC] large routing table Rene Gallati
                   ` (7 preceding siblings ...)
  2004-03-31 21:19 ` Rene Gallati
@ 2004-03-31 21:24 ` Rene Gallati
  2004-03-31 21:32 ` Rene Gallati
  2004-03-31 21:41 ` Adrian Vasile
  10 siblings, 0 replies; 12+ messages in thread
From: Rene Gallati @ 2004-03-31 21:24 UTC (permalink / raw)
  To: lartc

Hello,

> I know that routes can be cached what should help, but
> here we are talking about tc u32 filter, which can not be cached as I know
> without hierarchy it is not posible to decrease amount of testing
> 
> but the interesting idea is to use route for packet classification
> or it can be simulated with netfilters connmark module.
> then amount of test to be done will be more than half of active connections
> number.

I think I will do exactly that. I was thinking somewhere along the lines 
that the routing infrastructure would be the best place to do it, but 
the connection tracker of netfilter is quite a bonus since it keeps 
state and so does minimize the times when I need to walk my 
classification tree to find out how to treat the connection.

Also I don't really need to route, since all the traffic goes out of the 
same interface anyway.

Thanks for all the hints !

CU

René


> 
> ----- Original Message ----- 
> From: <alex@pilosoft.com>
> To: "Roy" <roy@xxx.lt>
> Cc: <lartc@mailman.ds9a.nl>
> Sent: Wednesday, March 31, 2004 4:06 AM
> Subject: Re: [LARTC] large routing table
> 
> 
> 
>>On Wed, 31 Mar 2004, Roy wrote:
>>
>>
>>>100kbytes of prefixes is not so good , hashing does not mean
>>
>>anything
>>
>>>faster when checking ip you will need to test 4 bytes in any
>>
>>way, since
>>
>>>hash is usualy 32 bit too. this can help on very complex rules
>>
>>only. so
>>
>>>if you pump 100 kbytes of prefixes this is probably 7000
>>
>>addreses so on
>>
>>>each packet 7000 tests will be done.
>>
>>Incorrect. Linux route lookup is crappy, but not THAT crappy.
>>Route-cache somewhat helps too.
>>
>>-alex
>>
> 
> 
> _______________________________________________
> 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] 12+ messages in thread

* Re: [LARTC] large routing table
  2004-03-30 22:56 [LARTC] large routing table Rene Gallati
                   ` (8 preceding siblings ...)
  2004-03-31 21:24 ` Rene Gallati
@ 2004-03-31 21:32 ` Rene Gallati
  2004-03-31 21:41 ` Adrian Vasile
  10 siblings, 0 replies; 12+ messages in thread
From: Rene Gallati @ 2004-03-31 21:32 UTC (permalink / raw)
  To: lartc

Hello,

> 100kbytes of prefixes is not so good , hashing does not mean anything faster
> when checking  ip
> you will need to test 4 bytes in any way, since hash is usualy 32 bit too.
> this can help on very complex rules only.

Yeah you're right. Also, the hash cannot tell me if something "like" 
nnn.nnn.xxx.yyy is in table X because only exact matches are possible.

> so if you pump 100 kbytes of prefixes this is probably 7000 addreses so on
> each packet 7000 tests will be done.

6486 to be exact. I don't really want more than 30 tests or so.

> everything mostly depends on how much trafic you need to pass.

Not much, about 1-2mbps, maybe 4 to 5 peak. But the server does a lot of 
other things and I am not to use up all the ressources. Its a fast 
machine with lots of RAM but I still don't pay for it and so I don't 
want to create a lot of load.

> probably hierarchical structure is the best option.
> you can use multiple servers to mark packets and one to shape trafic ( you
> sould use TOS not mark)

I only have one at my disposition for this. However I think with the 
help of the netfilter connection tracker I'll be able to minimize the 
problem to the connection setup phase. Now I just need to write a skript 
that generates the rules. If there is interest, I'll copy it to the list 
once its working.

Thanks for your hints

René


> 
> 
> 
> 
> ----- Original Message ----- 
> From: "Rene Gallati" <lartc@draxinusom.ch>
> To: <lartc@mailman.ds9a.nl>
> Sent: Wednesday, March 31, 2004 1:56 AM
> Subject: [LARTC] large routing table
> 
> 
> 
>>Hello List,
>>
>>I have a little non-standard problem (or so I guess). I'm getting a
>>sponsored server on a backbone for almost nothing - which is quite nice.
>>However there is a string attached: Since the bandwith to foreign
>>countries is expensive, while in-land bandwith is almost free, I need to
>>shape down access to all '"'foreign'"' IPs.
>>
>>Now I have a (large) list of routes/prefixes for destinations which are
>>ok - a whitelist if you want. The question I have now is, how do I best
>>proceed in using that list so that the kernel does not spend too much
>>time looking it up for every single packet.
>>
>>Is the routing table hashed by default so access is fast and I can just
>>pump in the ~100KBytes of ip prefixes ? Or does it traverse them
>>linearly and I need to build a hierarchical structure so that it will be
>>fast ? (sort of like in section 12.4 of the LARTC howto with the filters?)
>>
>>I've also toyed with the idea of doing it in netfilter since I know
>>netfilter quite a lot better than tc and ip but it is mostly outgoing
>>traffic that is a problem and I sort of feel that this is better done by
>>the routing/filtering infrastructure than by the firewall.
>>
>>Any advice?
>>
>>Thanks in advance
>>
>>René
>>_______________________________________________
>>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/
> 

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

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

* Re: [LARTC] large routing table
  2004-03-30 22:56 [LARTC] large routing table Rene Gallati
                   ` (9 preceding siblings ...)
  2004-03-31 21:32 ` Rene Gallati
@ 2004-03-31 21:41 ` Adrian Vasile
  10 siblings, 0 replies; 12+ messages in thread
From: Adrian Vasile @ 2004-03-31 21:41 UTC (permalink / raw)
  To: lartc

Hi,

You may wanna try this out (after adapting it a bit).
It's been written for the romanian iex in order to mark internal
traffic. It uses BGP tables and is quite fast. If you have access to BGP
routes then your task is to modify a script and add a cron job.
The address is http://sourceforge.net/projects/mipclasses/.

-- 
Adrian Vasile <adi@tettas.net>

On Thu, 2004-04-01 at 00:19, Rene Gallati wrote:
> Hello,
> 
> > by default shape everything, but allow it to burst a bit (if that's not a problem).
> 
> Yeah, however my traffic won't really be too large. I expect max 
> bandwidth usage of about 1mbps to 2mbps max. I just need to make sure 
> that stays in the country, because if such bandwidth usage crosses 
> boundaries, its going to create costs that are unbearable.
> 
> > make MARK X not shaped.
> > 
> > MARK X some big networks which will always be Switserland.
> > 
> > Then make a script (using the perl module I metioned previously) to check whether a new connection should be shaped or not, if it should not be shaped, and if it's not part of the marked IP's already, you add an entry to the MARK X list the /24 network where the IP address is in. (I think you can safely say that a /24 network is in one country).
> 
> The problem is that the geo-skript is wrong - and I already have a 
> "perfect" list, so I rather use this, especially because that list is 
> provided by the people who own the machine/network, so when in doubt I 
> can always claim that I did my best to prevent undesired leakage.
> 
> As for the minimum size, I too think this is a safe assumption, though I 
> need to check. I already wrote a skript that breaks the list up into 
> different buckets according to the first byte. I just added a little 
> check to see what the largest and smallest prefixes are:
> 
> This is the output (number of different prefixes sorted per first byte):
> smallest prefix = 24, largest = 11
> total 6486
> 15 = 7
> 16 = 4
> 32 = 15
> 40 = 7
> 44 = 1
> 53 = 3
> 57 = 1
> 60 = 1
> 62 = 312
> 63 = 4
> 64 = 5
> 66 = 14
> 69 = 5
> 80 = 249
> 81 = 221
> 82 = 153
> 83 = 49
> 128 = 15
> 129 = 16
> 130 = 23
> 131 = 27
> 132 = 2
> 134 = 11
> 135 = 1
> 136 = 5
> 137 = 9
> 138 = 16
> 139 = 18
> 140 = 4
> 141 = 20
> 143 = 9
> 144 = 13
> 145 = 23
> 146 = 27
> 147 = 19
> 148 = 13
> 149 = 21
> 150 = 2
> 151 = 5
> 152 = 6
> 153 = 13
> 154 = 6
> 155 = 24
> 156 = 10
> 157 = 6
> 158 = 10
> 159 = 23
> 160 = 20
> 161 = 9
> 162 = 7
> 163 = 9
> 164 = 21
> 166 = 1
> 167 = 1
> 168 = 7
> 170 = 7
> 171 = 5
> 192 = 532
> 193 = 1246
> 194 = 919
> 195 = 634
> 196 = 10
> 198 = 16
> 199 = 17
> 202 = 43
> 203 = 37
> 204 = 8
> 205 = 5
> 206 = 3
> 207 = 2
> 208 = 17
> 209 = 19
> 212 = 511
> 213 = 438
> 216 = 21
> 217 = 473
> 
> 193.* is actually the one with most prefixes in it.
> 
> > After one of these "temporary" marks is inactive for a while, remove it from the MARK X list, increase the "time to stay" for networks which are used often.
> > 
> > So, your server apps should trigger a script (in the background) upon every new connection (maybe some tcpwrappers can do that, maybe you have to modify a tcpwrapper).
> > 
> > make sure to update the database used by the scripts, Geo::IP has a "premium database subscription" update thingy.
> 
> I just talked today with the owner about this and I think I'll go 
> another way. I might use netfilter's connection tracker so that the 
> lookup that decides which class to use is only done on connection setup 
> and not per packet. Still, 6000 rules are too much so I'm going to 
> create a hierarchical ruleset to minimize the worst case. I don't want 
> to have anything beyond 30 rules worst case checking or so because the 
> server runs different applications and I should not make my presence 
> negatively noticeable. I think that is the best approach in this situation.
> 
> Thanks for all the advice!
> 
> CU
> 
> René
> 
> _______________________________________________
> 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] 12+ messages in thread

end of thread, other threads:[~2004-03-31 21:41 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-03-30 22:56 [LARTC] large routing table Rene Gallati
2004-03-31  1:06 ` alex
2004-03-31  1:25 ` alex
2004-03-31  1:26 ` Roy
2004-03-31  1:45 ` Roy
2004-03-31  9:50 ` Jeroen Vriesman
2004-03-31 10:26 ` Jeroen Vriesman
2004-03-31 21:01 ` Rene Gallati
2004-03-31 21:19 ` Rene Gallati
2004-03-31 21:24 ` Rene Gallati
2004-03-31 21:32 ` Rene Gallati
2004-03-31 21:41 ` Adrian Vasile

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.