martes, 8 de julio de 2014

Balanceo de carga mejorado atravéz de multiples gateway (wan)

Con NAT y politicas de ruteos, trabaja con HTTPS, IM (mensajeros instantáneos) y grandes descargas
Considerar el siguiente diagrama de red
LoadBalancing.jpg
Configuración exportada del router:
/ ip address 
add address=1.1.1.50/24 network=1.1.1.0 broadcast=1.1.1.255 interface=Local comment="" \
    disabled=no 
add address=10.111.0.2/24 network=10.111.0.0 broadcast=10.111.0.255 interface=wlan2 \
    comment="" disabled=no 
add address=10.112.0.2/24 network=10.112.0.0 broadcast=10.112.0.255 interface=wlan1 \
    comment="" disabled=no
/ ip firewall mangle
add chain=prerouting in-interface=Local connection-state=new nth=1,1,0 \
    action=mark-connection new-connection-mark=odd passthrough=yes comment="" \
    disabled=no 
add chain=prerouting in-interface=Local connection-mark=odd action=mark-routing \
    new-routing-mark=odd passthrough=no comment="" disabled=no 
add chain=prerouting in-interface=Local connection-state=new nth=1,1,1 \
    action=mark-connection new-connection-mark=even passthrough=yes comment="" \
    disabled=no 
add chain=prerouting in-interface=Local connection-mark=even action=mark-routing \
    new-routing-mark=even passthrough=no comment="" disabled=no 
/ ip firewall nat 
add chain=srcnat connection-mark=odd action=src-nat to-addresses=10.111.0.2 \
    to-ports=0-65535 comment="" disabled=no 
add chain=srcnat connection-mark=even action=src-nat to-addresses=10.112.0.2 \
    to-ports=0-65535 comment="" disabled=no 
/ ip route 
add dst-address=0.0.0.0/0 gateway=10.111.0.1 scope=255 target-scope=10 routing-mark=odd \
    comment="" disabled=no 
add dst-address=0.0.0.0/0 gateway=10.112.0.1 scope=255 target-scope=10 routing-mark=even \
    comment="" disabled=no 
add dst-address=0.0.0.0/0 gateway=10.112.0.1 scope=255 target-scope=10 comment="" \
    disabled=no

Explicación

Primero mostramos el código y luego explicamos que es lo que hace.

Mangle

/ ip address 
add address=1.1.1.50/24 network=1.1.1.0 broadcast=1.1.1.255 interface=Local comment="" \
    disabled=no 
add address=10.111.0.2/24 network=10.111.0.0 broadcast=10.111.0.255 interface=wlan2 \
    comment="" disabled=no 
add address=10.112.0.2/24 network=10.112.0.0 broadcast=10.112.0.255 interface=wlan1 \
    comment="" disabled=no
El router tiene los interfaces de subidas (wan) con la dirección IP 10.111.0.2/24 y 10.112.0.2/24. La interface LAN tiene el nombre "Local" y la dirección ip 1.1.1.50/24.

/ ip firewall mangle

add chain=prerouting in-interface=Local connection-state=new nth=1,1,0 \
    action=mark-connection new-connection-mark=odd passthrough=yes comment="" \
    disabled=no 

Primero tomamos cada segundo paquete que establece una nueva sesión (nota connection-state=new) y marcamos con marca coneccion "impar". Consecuentemente todos los sucesivos paquetes siguientes de la misma sesión llevarán la marca conección "impar". Notar que estamos pasando esos paquetes a la segunda regla (passtrough=yes) par poner la marca de routeo en esos paquetes adicionando a la marca conección.
add chain=prerouting in-interface=Local connection-mark=odd action=mark-routing \
    new-routing-mark=odd passthrough=no comment="" disabled=no 
La regla anterior pone la marca de routing "impar" en todos los paquetes pertenecientes a la conección "impar" y para de procesar todos los otros mangles en la cadena prerouting para esos paquetes.
add chain=prerouting in-interface=Local connection-state=new nth=1,1,1 \
    action=mark-connection new-connection-mark=even passthrough=yes comment="" \
    disabled=no 
add chain=prerouting in-interface=Local connection-mark=even action=mark-routing \
    new-routing-mark=even passthrough=no comment="" disabled=no 
Esas reglas son las mismas para la mitad restante del tráfico como las primeras dos reglas para la primer mitad del tráfico.
El código anterior hace que cada nueva conección que se inicia a travéz del router desde la red local será marcado como "impar" o "par" con ambas marcas de routing y conección.

NAT

/ ip firewall nat 
add chain=srcnat connection-mark=odd action=src-nat to-addresses=10.111.0.2 \
    to-ports=0-65535 comment="" disabled=no 
add chain=srcnat connection-mark=even action=src-nat to-addresses=10.112.0.2 \
    to-ports=0-65535 comment="" disabled=no 

Routing

/ ip route 
add dst-address=0.0.0.0/0 gateway=10.111.0.1 scope=255 target-scope=10 routing-mark=odd \
    comment="" disabled=no 
add dst-address=0.0.0.0/0 gateway=10.112.0.1 scope=255 target-scope=10 routing-mark=even \
    comment="" disabled=no 
add dst-address=0.0.0.0/0 gateway=10.112.0.1 scope=255 target-scope=10 comment="" \
    disabled=no comment="gateway for the router itself"
Para todo el tráfico marcado "impar" (consecuentemente teniendo 10.111.1.0.2 como dirección origen traducida) usamos 10.111.0.1 como gateway. De la misma manera todo el tráfico marcado "par" es ruteada por el gateway 10.112.0.1. Finalmente, tenemos una entrada adicional especificando el trafico del router mismo (tráfico sin marcas de routing) deberían ir por el gateway 10.112.0.1.

1 comentario:

  1. y como haces con los bancos y paginas que usan conexiones fijas esto no causa que se desconecte te hace falta una regla primordial

    ResponderEliminar