miércoles, 2 de diciembre de 2009

Al menos hay Scrip pa el Balanceo

Como dice el titulo yta tengo el script para el Balanceo en donde estoy cabezon en en el Nateo con mi proxy transparente ademas tengo problemas con mi servidor DNS aqui va la configuracion del

#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

haber px cuantos entraron?