1
BALANCEO DE CARGA
Alejandro Teixeira G.
[email protected]
MikroTik Certified Trainer
MikroTik Trainer ID #TR0163
Alejandro Teixeira
Topicos
2
¿Qué es balanceo de carga?
Consideraciones
Mecanismos de balanceo
ECMP
PCC
NTH
Soluciones a posibles problemas
Failover
3
Nuestros clientes
4
5
¿Qué es balanceo de carga?
¿Qué es balanceo de carga?
6
Proceso a través del cual el tráfico saliente
es distribuido por múltiples enlaces
¿Qué es balanceo de carga?
7
2 ISP
Ejemplos
8
Ejemplos
9
Aplicación para configuración
10
Consideraciones
11
Cuando se emplea algún mecanismo de
balanceo, lo que realmente se balancea son
el número total de conexiones entre la
cantidad de enlaces disponibles.
No se balancea el consumo de tráfico ni se
“suma” literalmente.
12
Mecanismos de balanceo
Herramientas involucradas
13
/ip firewall mangle
/ip route
/system scripts
/system scheduler
/ip firewall filter
ECMP: Equal Cost Multi-Path
14
Simple de implementar
Balanceo persistente por conexión
Se agregan todas las puertas de enlace
En la misma ruta
No se puede controlar la forma de balanceo
No funciona con puertas de enlace iguales
Mas de una por proveedor
Failover automatico
No es práctico
ECMP: Implementación
15
/ip route add
gateway=1.1.1.1,2.2.2.1
check-gateway=ping
PCC: Peer Connection Classifier
16
Sofisticado
No distribuye de forma equitativa la cantidad de
conexiones
PCC toma algunos campos de la cabecera IP
Alguna combinación
IP (origen/destino) y puerto (origen/destino)
La cabecera se divide por el número de ISP activos
El resultado indica
Clasificadores
src-address
dst-address
src-port
dst-port
PCC: ¿Cómo funciona?
17
Número de enlaces wan: 3
Posibles resultados: 0, 1 o 2
Hash 1: 14350 / 3 = 1
Hash 2: 3480 / 3 = 0
Hash 3: 13468 / 3 = 1
Hash 4: 5390 / 3 = 2
Hash 5: 7894 / 3 = 1
Link 0: 1
Link 1: 3
Link 2: 1
ALEATORIO
PCC: Implementación
18
Marcas de nuevas
conexiones
/ip firewall mangle add
chain=prerouting
in-interface=lan
connection-mark=no-mark
action=mark-connection
new-connection-mark=wan1_conn
per-connection-classifier=both-addresses:2/1
/ip firewall mangle add
chain=prerouting
in-interface=lan
connection-mark=wan1_conn
action=mark-routing
new-routing-mark=to_wan1
passthrough=no
Repetir
para
cada
WAN
Marca de rutas para
cada conexión marcada
PCC:MANGLE
19
PCC: implementación
20
/ip route add
distance=1
gateway=1.1.1.1
routing-mark=to_wan1
/ip route add
distance=1
gateway=2.2.2.1
routing-mark=to_wan2
Rutas
Balanceo con 4 enlaces de 10M
21
NTH
22
Permite distribuir de forma equitativa
Cada regla del NTH tiene su propio contador
Cuando una regla recibe un paquete se
incrementa el contador
Cuando el contador llega al máximo se reinicia
Nuevas marcas de
conexión
NTH: implementación
23
/ip firewall mangle add
chain=prerouting
in-interface=lan
connection-mark=no-mark
action=mark-connection
new-connection-mark=wan[link number]_conn
nth=[link number],1
/ip firewall mangle add
chain=prerouting
in-interface=lan
connection-mark=wan1_conn
action=mark-routing
new-routing-mark=to_wan1
passthrough=no
Repetir
para
cada
WAN
Marca de rute para cada
marca de conexión
NTH: implementación
24
/ip route add
distance=1
gateway=1.1.1.1
routing-mark=to_wan1
/ip route add
distance=1
gateway=2.2.2.1
routing-mark=to_wan2
Rutas iguales que PCC
25
Poderación de enlaces
MikroTik Xperts Chile @
[email protected]
¿Dónde puedo aplicar ponderación?
26
ECMP
Simple de implementar
PCC
Complejo de implementar
Robusto y escalable
NTH
No permite implementar
Ponderación: ECMP
27
Ponderación: PCC
28
add action=mark-connection chain=prerouting
comment="SIN PONDERACION - 2 WAN /
PCC" connection-mark=no-mark in-
interface=ether2_laptop new-connection-
mark=mc_to-wan1 per-connection-
classifier=both-addresses-and-ports:8/x
29
Failover
Failover
30
Cómo manejar Failover
31
Formas comúmes
Scripts
Haciendo ping a links externos.
Netwatch
Haciendo ping a links externos.
Sin scripts ni Netwatch
Routes Nexthop Lookup
Rutas recursivas
Usando scope=10
check-gateway=ping
Failover: scripts
32
/ip dhcp-client disable [find interface=ether1_wan1]
:delay 1s
/ip dhcp-client enable [find interface=ether1_wan1]
:local pingip
:set pingip [/ping 1.1.1.1 count=10]
:if ($pingip = 0) do={
}
:global gateway1a [/ip dhcp-client get [find interface=wan1] gateway]
:global gateway1b [/ip route get [find routing-mark=mr_to-wan1
comment=mr_to-wan1] gateway]
:if ($gateway1a != $gateway1b) do={
gateway=$gateway1a
}
/ip route set [find comment=mr_to-wan1]
Failover: consideraciones
33
Debe existir una o mas rutas por defecto
Se usa como desborde cuando una tabla de
enrutamiento no está disponible
Se puede aplicar la opción check-
gateway=ping para revisar estado de la
puerta de enlace
Esto no garantiza que el servicio esté caído dado
que solo revisa la conexión con la puerta de
enlace
Se debe hacer chequeo externo
Resolviendo el Next-Hop Recursivo
34
Es posible especificar el gateway a una red
incluso si el gateway no se puede alcanzar
directamente. Esto se puede lograr usando
Resolución de Next-Hop Recursivo desde
cualquier ruta existente
Una ruta debe estar en el scope (al alcance)
de otra ruta para que la Resolución de Next-
Hop Recursivo funcione.
©Academy Xperts / MikroTik Xperts 2016
Nexthop Lookup: scope
35
Nexthop 10.2.0.1 es resuelta por una ruta conectada,
su estado es alcanzable
Nexthop 10.3.0.1 es resuelto a través de la ruta
10.3.0.0/16, su estado es recursivo, y utiliza 10.2.0.1
como valor de próximo salto instalado en el FIB.
Failover
36
Failover usando scope y check-gateway by ping
/ip route
add dst-address=8.8.8.8 gateway=1.1.1.1 scope=10
add dst-address=8.8.4.4 gateway=2.2.2.1 scope=10
add distance=1 dst-adress=0.0.0.0/0 gateway=8.8.8.8
routing-mark=to_wan1 check-gateway=ping
add distance=2 gateway=8.8.4.4 routing-
mark=to_wan2 check-gateway=ping
Failover: chequeo ping recursivo
37
Failover: chequeo ping recursivo
38
Failover: chequeo ping recursivo
39
Failover recursivo
40
Importante: Éste método de implementar
failover no funciona cuando se tienen
múltiples links con el mismo gateway. En éste
caso es necesario scripts o netwatch
chequeando enlaces externos.
Si el enlace no tiene IP y gateway fijo también
son necesarios scripts.
41
Failover con desborde
Failover con desborde
42
Redistribuye las conexiones
correspondientes a la wan sin servicio por el
resto de las wan.
La redistribución se puede llevar a cabo
usando diferentes lógicas. Depende
directamente del criterio del administrador
Redistribución en base a ponderaciones
Redistribución en base a cantidad de wan
Técnica complicada y compleja de desarrollar
Se recomienda emplear herramientas API
Ejercicio: failover con desborde
43
1
2
3
2,3
1,3
1,2
1,2,3
2,3
1,3
1,2
6/0
6/1
6/2
6/3
6/4
6/5
1
1
1
2
2
3
2
2
3
2
2
3
1
1
1
1
1
3
1
1
1
2
2
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
3
3
3
3
3
3
3
Ejercicio: failover con desborde
44
45
Posibles problemas
Posibles problemas balanceando
46
Problemas con páginas HTTPS
Problemas con conexiones al mismo router
Permitir acceso a servidores internos por una
WAN específica (DST-NAT)
Forzar un host por una wan específica.
Varios links con el mismo gateway
Problema con SSL páginas HTTPS
47
Sitios como Gmail y bancos no permiten
establecer múltiples conexiones provenientes
de diferentes enlaces simultáneamente.
Phishing
Comunmente se usa el 443
Problema con SSL páginas HTTPS
48
Colocar de primera en el mangle
/ ip firewall mangle
add action=accept chain=prerouting dst-port=443 in-
interface=lan passthrough=no protocol=tcp
Ruta por defecto para conexiones
delmismo router o no marcadas.
/ip route
add distance=1 gateway=1.1.1.1
add distance=1 gateway=2.2.2.1
Problema con conexiones dirigidas
al router
49
Paquetes salientes utilizan la misma decisión de
ruteo que los paquetes que atraviesan el router.
Las respuestas de un paquete que fue recibida
por wan1 podría ser enviada de vuelta y
enmascarada por wan2
wan1 wan2
Problema con conexiones dirigidas
al router
50
Marcamos conexiones de
entrada
Repetim
os para
cada wan
/ip firewall mangle add
action=mark-connection
chain=input
connection-mark=no-mark
in-interface=wan1
new-connection-mark=wan1_conn
/ip firewall mangle add
action=mark-routing
chain=output
connection-mark=wan1_conn
new-routing-mark=to_wan1
passthrough=no
Forzamos que la conexión
sea ruteada por una wan
específica.
Permitir acceso a servidores
internos desde una wan específica
51
add action=mark-connection chain=forward
connection-mark=no-mark in-interface=wan1
new-connection-mark=mc_to-wan1 out-
interface=ether2_laptop passthrough=no
add action=mark-routing chain=prerouting
connection-mark=mc_to-wan1 in-
interface=ether2_laptop new-routing-
mark=mr_to-wan1 passthrough=no
Forzar acceso a internet por una
wan específica
52
add action=mark-routing chain=prerouting
comment=EXCEPCION dst-
address=54.165.129.249 new-routing-
mark=mr_to-wan2
Múltiples enlaces con el mismo
Gateway
53
Forza el tráfico respetando cada routing-mark
/ip route
Comentarios de: Balanceo de carga (0)
No hay comentarios