Hi. Before start i need to say that i lost a lot of weekends trying every 
single posible solution on the net. So this i s my last resource.
This is NOT an ERROR, is just help to make something work. (sorry for my 
english)
Hi have 3 zones
loc	eth0 => here we have 192.168.1.0/24 with 12 IP''s/PC''s
	I can subdivide in 2 tematics zones but if not needed there is no reason 
to do it.
net	ppp0 => adsl 512 Kb by contract and working
net2	ppp1 => adsl 256 Kb by contract with another ISP and working but 
working at ¿512? (I will explain that later)
I need to split the access to the internet between this 2 connections.
I want to make 2 things Split by IP ==> 192.168.1.9-192.168.1.12 to ppp1
And split by port                   ==> port 21,... (ftp,...) to ppp1
I have tested and read a lot of loadbalancing but dont works well, maybe 
some kernel compiling issue but i think that this is not what i want to do.
What i want to do:
if ( (traffic comes from selectedIPlist) OR (traffic comes from 
selectedPORTlist ) )
    route by ppp1
else
    route by ppp0
I think that linux must do this in an easy way. Dont seems to be so 
dificult but i dont have any clue. So i''m here asking.
when i reboot the linux server this is what i get from "route"
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use 
Iface
host144.200-3-6 *               255.255.255.255 UH    0      0        0 
ppp0
host144.200-3-6 *               255.255.255.255 UH    0      0        0 
ppp1
192.168.1.0     *               255.255.255.0   U     0      0        0 
eth0
default         *               0.0.0.0         U     0      0        0 
ppp0 // look here ppp0 as default
default         *               0.0.0.0         U     0      0        0 
ppp1
default         host144.200-3-6 0.0.0.0         UG    0      0        0 
ppp0
I have masqueraded in shorewall all eth0 traffic to ppp0 and all the 
internet request travels via ppp0. Thats fine.
If i masquerade some IP''s or the entire network to ppp1 traffic to the 
internet from this IP''s (excluding www traffic becouse i have squid
that
use ppp0) traffic does not travels to any way. (only www throw ppp0).
I''m suppose that this is becouse the first default gateway that route 
finds is ppp0. So I test this:
route del default
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use 
Iface
host144.200-3-6 *               255.255.255.255 UH    0      0        0 
ppp0
host144.200-3-6 *               255.255.255.255 UH    0      0        0 
ppp1
192.168.1.0     *               255.255.255.0   U     0      0        0 
eth0
default         *               0.0.0.0         U     0      0        0 
ppp1 // look here ppp0 as default
default         host144.200-3-6 0.0.0.0         UG    0      0        0 
ppp0
i leave the ppp1 as the default gateway so:
Masquerading eth0 by ppp0 does not work, even www traffic.
Masquerading eth0 by ppp1 does work very well
Spliting some IP''s by ppp0 and default ppp1 dont work for the first
case.
So, i conclude that the problem is the default route becouse.
How can i do a conditional default gateway i think that this is not 
posible with shorewall i must do some script that runs together with 
shorewall.
Maybe marking packets with tcrules and then asignning to some mark the 
gateway ppp1 and ppp0 for all others. Is this posible? how do i specify 
the mark when adding the default gateway?
Some any other idea?
I will really apreciate any help that you can provide me.