#Nota: aun falta pulir mi configuracion asi que esta en modo bruto
root@balancin:~# cat /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0
# LAN
auto eth0
iface eth0 inet static
address 192.168.2.100
netmask 255.255.255.0
#Proveedor de internet 1
auto eth1
iface eth1 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
#gateway 192.168.1.1
dns-nameservers 192.168.1.1
Proveedor de internet 2
auto eth2
iface eth2 inet static
address 192.168.3.100
netmask 255.255.255.0
network 192.168.3.0
broadcast 192.168.3.255
#gateway 192.168.3.100
dns-nameservers 192.168.3.100
Luego la manera en que resuelvo la ejecucion de comandos es por medio de tres script y deben ejecutarse en el orden en que los detallo.
*- Seteamos Parametros que nos permiten refrescar las conexiones con mayor frecuencia.
root@balancin:~# cat parametros
###############################################
### AJUSTES DE PARAMETROS DE RUTEO
###############################################
echo 30 > /proc/sys/net/ipv4/route/gc_interval
echo 30 > /proc/sys/net/ipv4/route/gc_elasticity
echo 30 > /proc/sys/net/ipv4/route/gc_timeout
echo 5 > /proc/sys/net/ipv4/route/max_delay
echo 4096 > /proc/sys/net/ipv4/route/max_size
#echo 2048 > /proc/sys/net/ipv4/route/gc_thresh
*- Luego hacemos el balance de carga entre los dos ISP.
root@balancin:~# cat balancear
#!/bin/bash
echo 200 T1 >> /etc/iproute2/rt_tables
echo 201 T2 >> /etc/iproute2/rt_tables
echo 202 lento >> /etc/iproute2/rt_tables
echo 203 rapido >> /etc/iproute2/rt_tables
IF0="eth0" # Interface conectada a la LAN
IF1="eth1" # Interface conectada a ADSL1 Lenta
IF2="eth2" # Interface conectada a ADSL2 Rapida
IP0="192.168.2.100" # Gateway Local, IP Local
IP1="192.168.1.100" # IP de la IF1
IP2="192.168.3.100" # IP de la IF2
P0_NET="192.168.2.0/24" # Red Local
P1_NET="192.168.1.0/24" # Red para IF1
P2_NET="192.168.3.0/24" # Red para IF2
P1="192.168.1.1" # Gateway para ADSL1
P2="192.168.3.1" # Gateway para ADSL2
# Creo las tablas de rutas para las dos interfaces uplink
echo "Creando las rutas para cada tabla"
ip route add ${P1_NET} dev ${IF1} src ${IP1} table T1
ip route add default via ${P1} table T1
ip route add ${P2_NET} dev ${IF2} src ${IP2} table T2
ip route add default via ${P2} table T2
echo "Hecho."
# Aseguro que cada red enviar. sus solicitudes a la ip correcta
echo "Asegurando la ruta para cada interface e IP"
ip route add ${P1_NET} dev ${IF1} src ${IP1}
ip route add ${P2_NET} dev ${IF2} src ${IP2}
echo "Hecho."
# Creo dos reglas para que cada ip se fije a su tabla de rutas
echo "Creando reglas para cada tabla"
ip rule add from ${IP1} table T1
ip rule add from ${IP2} table T2
echo "Hecho."
# Hago el balanceo 1 a 2
echo "Haciendo el balanceo"
ip route add default scope global nexthop via ${P1} dev ${IF1} weight 1 nexthop via ${P2} dev ${IF2} weight 2
echo "Hecho."
# Agrego dos tablas de rutas estaticas para hacer marcado de paquetes sobre ellas
echo "Creando tablas para marcado de paquetes ..."
# Enlace lento
ip rule add fwmark 1 table lento
ip route add table lento via ${P1} dev eth1
# Enlace rapido
ip rule add fwmark 2 table rapido
ip route add table rapido via ${P2} dev eth2
echo "Refrescando las rutas"
ip route flush cache
echo "Hecho."
Por último hacemos nat para que la Lan pueda navegar, dejo comentadas las lineas que corresponden a tener un proxy transparente.
root@balancin:~# cat natear
#!/bin/bash
echo "Limpiando Reglas Anteriores..."
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
#iptables -t mangle -F
IF0="eth0" # Interface conectada a la LAN
IF1="eth1" # Interface conectada a ADSL1 Lenta
IF2="eth2" # Interface conectada a ADSL2 Rapida
IP0="192.168.2.100" # Gateway Local, IP Local
IP1="192.168.1.100" # IP de la IF1
IP2="192.168.3.100" # IP de la IF2
P0_NET="192.168.1.0/24" # Red Local
P1_NET="192.168.1.0/24" # Red para IF1
P2_NET="192.168.3.0/24" # Red para IF2
P1="192.168.1.1" # Gateway para ADSL1
P2="192.168.3.1" # Gateway para ADSL2
# Ahora hago el NAT
echo "Activando NAT ..."
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s ${P0_NET} -o ${IF1} -j MASQUERADE
iptables -t nat -A POSTROUTING -s ${P0_NET} -o ${IF2} -j MASQUERADE
#Las dos lineas siguientes son por si se quiere natear solo un sitio, hay que comentar las dos de arriba
#iptables -t nat -A POSTROUTING -s ${P0_NET} -o ${IF1} -j MASQUERADE -d http://www.google.com.ar/255.255.255.255
#iptables -t nat -A POSTROUTING -s ${P0_NET} -o ${IF2} -j MASQUERADE -d http://www.google.com.ar/255.255.255.255
# Redirecciono al Proxy
iptables -t nat -A PREROUTING -i ${IF0} -p tcp --dport http -j DNAT --to ${IP0}":8080"
iptables -t nat -A PREROUTING -i ${IF0} -p tcp --dport 81 -j DNAT --to ${IP0}":8080"
iptables -t nat -A PREROUTING -i ${IF0} -p tcp --dport 8080:8099 -j DNAT --to ${IP0}":8080"
iptables -t nat -A PREROUTING -i ${IF0} -p tcp --dport 3128:3130 -j DNAT --to ${IP0}":8080"
# Hago marcado de paquetes para asegurar que los paquetes de estos puertos encontraron el camino de vuelta
echo "Realizando marcado de paquetes ..."
iptables -t mangle -A PREROUTING -i ${IF0} -s ${P0_NET} -p tcp --dport 1863 -m state --state NEW,ESTABLISHED,RELATED -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i ${IF0} -s ${P0_NET} -p tcp --dport 6667 -m state --state NEW,ESTABLISHED,RELATED -j MARK --set-mark 2
echo "Listo."
echo "Reglas Aplicadas"
iptables -L -n -v
iptables -t nat -L -n -v
iptables -t mangle -L -n -v