Balanceo de Carga PCC de 2, 3, 4 o más líneas de Internet con Mikrotik (load balance)

Tema en 'Balanceo de Carga (Load Balance)' comenzado por MikrotikPeru, 11 de Junio de 2015.

  1. MikrotikPeru

    MikrotikPeru Well-Known Member

    Mikrotik le permite balancear traficos de diferentes proveedores:

    en modos:


    Acerca del balanceo de carga es la distribucion tanto podria ser de conexiones como paquetes digo esto por que cuando se trabaja con PCC = a decir balanceo por flujos o conexiones y trabajar con NTH es balancear paquetes.


    [​IMG]
    Para este ejemplo tenemos dos proveedores de internet telefonica por adsl ahora hay modos en los que puede trabajar el modem/router

    Modem /Router/AP/Switch (en este equipo recae la IP publica o privada para salida a internet)
    Modem/Switch (Este equipo hace de pasarela bridge modula o demodula)

    Siempre el mejor modo es Modem/Switch pues la IP publica recae en el mikrotik y podemos realizar Nateos etc que hacerle un doble NAT con DMZ en el modo Modem /Router/AP/Switch.

    Asumiendo que trabajaremos en modo Modem/Switch - Bridge la configuracion mikrotik seria la siguiente.

    Ejmplo:

    Código (Text):
    add action=mark-connection chain=prerouting connection-state=new in-interface=pppoe-out1 new-connection-mark=ISP1_conn
    add action=mark-connection chain=prerouting connection-state=new in-interface=pppoe-out2 new-connection-mark=ISP2_conn
    Estas dos reglas contiene connection-state=new se refiere a que solo va marcar las conexiones nuevas no relacionadas no estabelidas y que le va dar un nombre ISP1_conn o ISP2_conn en sus determinadas interfaces de ingreso para este caso pppoe-out1 y pppoe-out2 que son nuestras interfaces virtual que creamos para conectarnos a internet.

    Código (Text):
    add action=mark-connection chain=prerouting connection-state=new dst-address-type=!local in-interface=ether5 new-connection-mark=ISP1_conn per-connection-classifier=both-addresses:2/0
    add action=mark-connection chain=prerouting connection-state=new dst-address-type=!local in-interface=ether5 new-connection-mark=ISP2_conn per-connection-classifier=both-addresses:2/1
    Estas dos reglas en cada una marcamos la conexion nueva que es originado desde su LAN para este casi seria ether5 y lo dividimos en dos partes iguales both-addresses:2/0 y both-addresses:2/1 donde no queremos marcar nada que valla al mikrotik por eso negamos dst-address-type=!local para finalmente ponerle una marca a cada ruta ISP1_conn y ISP2_conn.

    Código (Text):
    add action=mark-routing chain=prerouting connection-mark=ISP1_conn in-interface=ether5 new-routing-mark=to_ISP1
    add action=mark-routing chain=prerouting connection-mark=ISP2_conn in-interface=ether5 new-routing-mark=to_ISP2
     
    Luego estas dos reglas enrutan el trafico marcado hacia sus respectivas puertas de enlace
    Código (Text):

    add action=mark-routing chain=output connection-mark=ISP1_conn new-routing-mark=to_ISP1
    add action=mark-routing chain=output connection-mark=ISP2_conn new-routing-mark=to_ISP2
     
    Estas dos ultimas reglas hacen referencia a las dos primera lineas que todo lo que ingrese por pppoe-out1 o linea1 sale por su misma linea1

    Scrip Completo de balanceo PCC both-addresses Mangle ->NAT -> Route
    PHP:

    /ip firewall mangle
    add action=mark-connection chain=prerouting connection-state=new in-interface=pppoe-out1 new-connection-mark=ISP1_conn
    add action=mark-connection chain=prerouting connection-state=new in-interface=pppoe-out2 new-connection-mark=ISP2_conn
    add action=mark-connection chain=prerouting connection-state=new dst-address-type=!local in-interface=ether5 new-connection-mark=ISP1_conn per-connection-classifier=both-addresses:2/0
    add action=mark-connection chain=prerouting connection-state=new dst-address-type=!local in-interface=ether5 new-connection-mark=ISP2_conn per-connection-classifier=both-addresses:2/1
    add action=mark-routing chain=prerouting connection-mark=ISP1_conn in-interface=ether5 new-routing-mark=to_ISP1
    add action=mark-routing chain=prerouting connection-mark=ISP2_conn in-interface=ether5 new-routing-mark=to_ISP2
    add action=mark-routing chain=output connection-mark=ISP1_conn new-routing-mark=to_ISP1
    add action=mark-routing chain=output connection-mark=ISP2_conn new-routing-mark=to_ISP2
    / ip route
    add dst-address=0.0.0.0/0 gateway=pppoe-out1 routing-mark=to_ISP1 check-gateway=ping
    add dst-address=0.0.0.0/0 gateway=pppoe-out2 routing-mark=to_ISP2 check-gateway=ping
    add dst-address=0.0.0.0/0 gateway=pppoe-out1 distance=1 check-gateway=ping
    add dst-address=0.0.0.0/0 gateway=pppoe-out2 distance=2 check-gateway=ping
    / ip firewall nat
    add chain=srcnat out-interface=pppoe-out1 action=masquerade
    add chain=srcnat out-interface=pppoe-out2 action=masquerade
     

    Ahora veamos el NAT
    Código (Text):

    /ip nat
    add chain=srcnat out-interface=pppoe-out1 action=masquerade
    add chain=srcnat out-interface=pppoe-out2 action=masquerade
     
    Este ejemplo claro que tenemos que Natear todo SRC = Origen con Salida de interface out-interface=pppoe-out1 o pppoe-out1 que sustituya la IP privada por la Publica del pppoe-out1 o pppoe-out2 eso varia dependiendo como mangle por el algoritmo PCC lo este enrutando.

    Finalmente las Tablas de Enrutamiento
    Código (Text):

    / ip route
    add dst-address=0.0.0.0/0 gateway=pppoe-out1 routing-mark=to_ISP1 check-gateway=ping
    add dst-address=0.0.0.0/0 gateway=pppoe-out2 routing-mark=to_ISP2 check-gateway=ping
    add dst-address=0.0.0.0/0 gateway=pppoe-out1 distance=1 check-gateway=ping
    add dst-address=0.0.0.0/0 gateway=pppoe-out2 distance=2 check-gateway=ping
     
    Las dos primeras lineas hacen referencia a las marcas de ruteo en mangle to_ISP1 y to_ISP2 que saldran por sus respectivas puertas de enlace por ser PPPoE /32 bits el encaminamiento es por interface.

    Estas Tres secuencias son las mas importantes para casos como balanceo o enrutamiento en general.

    Saludos
     
    Última modificación por un moderador: 17 de Junio de 2015
    A pablof.pc le gusta esto.
  2. pablof.pc

    pablof.pc New Member

    te hago una consulta, como hago para que los 2 0 3 servicios adsl, tengan el mismo trafico?, ya que siempre consume mas el primero
     
  3. MikrotikPeru

    MikrotikPeru Well-Known Member

    El algoritmo PCC, trabaja con Funciones HASH el cual decide dependiendo que cabecera tomara Origen destino manejar el algoritmo no creo aunque el trate de equilibrar las cargas dependiendo de las marcas creadas, pero si es de necesita que sea equitativa podrías usar NTH que esta no te balancea por conexión si no por paquete esto seria casi exacto.
    Saludos,
     
  4. daviddomh

    daviddomh New Member

    Muy buena informaciòn, sin embargo como seria el caso si deseo que el puerto 80 vaya por una determinada wan y el 443 por otra wan desde ya agradezo su gran ayuda .
     
  5. MikrotikPeru

    MikrotikPeru Well-Known Member

    Hay Muchas formas, La mas usada es enrutamiento por puertos o por IP Publicas voy a tratar de armar un ejemplo
     
    A daviddomh le gusta esto.
  6. daviddomh

    daviddomh New Member

    eso es verdad luego de hacer mi balanceo de 2 Lineas, lo primero q pongo en mangle es :

    PHP:

    /ip firewall mangle
    add action=mark-connection chain=prerouting comment=ICMP in-interface=ether5 new-connection-mark=icmp_conn protocol=icmp
    add action=mark-routing chain=prerouting connection-mark=icmp_conn in-interface=ether5 new-routing-mark=to_pppoe-out1
    add action=mark-packet chain=prerouting connection-mark=icmp_conn new-packet-mark=icmp_packet passthrough=no
    add action=mark-connection chain=prerouting comment=DNS dst-port=53 \
        new-connection-mark=dns_conn protocol=udp
    add action=mark-connection chain=output dst-port=53 new-connection-mark=\
        dns_conn protocol=udp
    add action=mark-packet chain=output connection-mark=dns_conn new-packet-mark=\
        dns_packet passthrough=no
    add action=mark-packet chain=prerouting connection-mark=dns_conn \
        new-packet-mark=dns_packet passthrough=no
    add action=mark-connection chain=prerouting comment="Dota 2" dst-port=27000-27099 in-interface=ether5 \
        new-connection-mark=dota_conn protocol=udp
    add action=mark-routing chain=prerouting connection-mark=dota_conn in-interface=ether5 new-routing-mark=to_pppoe-out2
    add action=mark-packet chain=prerouting connection-mark=dota_conn new-packet-mark=dota_packet passthrough=no
    aparte de ello mando al to_pppoe-out1 el puerto 80 y al pppoe-out3 el puerto 443 , asi dejo el pppoe-out2 solo para Dota2, sin embargo cuando se satura el pppoe-out1 y pppoe-out3 comienza a agarrar linea del ppoe-out2 y satura mi linea de juegos con lo q genera latencia muy alta

    porfavor desde ya se agradece la gran ayuda q brindan !
     
    Última modificación por un moderador: 15 de Mayo de 2016
  7. daviddomh

    daviddomh New Member

    Este es mi Script completo

    PHP:

    /ip firewall mangle
    add action=mark-connection chain=prerouting comment=ICMP in-interface=ether5 new-connection-mark=icmp_conn protocol=icmp
    add action=mark-routing chain=prerouting connection-mark=icmp_conn in-interface=ether5 new-routing-mark=to_pppoe-out1
    add action=mark-packet chain=prerouting connection-mark=icmp_conn new-packet-mark=icmp_packet passthrough=no
    add action=mark-connection chain=prerouting comment=DNS dst-port=53 \
        new-connection-mark=dns_conn protocol=udp
    add action=mark-connection chain=output dst-port=53 new-connection-mark=\
        dns_conn protocol=udp
    add action=mark-packet chain=output connection-mark=dns_conn new-packet-mark=\
        dns_packet passthrough=no
    add action=mark-packet chain=prerouting connection-mark=dns_conn \
        new-packet-mark=dns_packet passthrough=no
    add action=mark-connection chain=prerouting comment="Dota 2" dst-port=27000-27099 in-interface=ether5 \
        new-connection-mark=dota_conn protocol=udp
    add action=mark-routing chain=prerouting connection-mark=dota_conn in-interface=ether5 new-routing-mark=to_pppoe-out2
    add action=mark-packet chain=prerouting connection-mark=dota_conn new-packet-mark=dota_packet passthrough=no
    add action=mark-connection chain=prerouting comment=Navegacion dst-port=80 in-interface=ether5 new-connection-mark=\
        navegacion_conn protocol=tcp
    add action=mark-routing chain=prerouting connection-mark=navegacion_conn in-interface=ether5 new-routing-mark=to_pppoe-out1
    add action=mark-packet chain=prerouting connection-mark=navegacion_conn new-packet-mark=naveg_conn passthrough=no
    add action=mark-connection chain=prerouting comment=Navegacion dst-port=443 in-interface=ether5 new-connection-mark=\
        navegacion_conn protocol=tcp
    add action=mark-routing chain=prerouting connection-mark=navegacion_conn in-interface=ether5 new-routing-mark=to_pppoe-out3
    add action=mark-packet chain=prerouting connection-mark=navegacion_conn new-packet-mark=naveg_conn passthrough=no
    add action=mark-connection chain=prerouting comment=Juegos dst-port=\
        1025-1934,1936-4069,4071-8079,8081-8290,8293-11909,11911-65535 in-interface=ether5 new-connection-mark=juegos_conn \
        protocol=tcp
    add action=mark-connection chain=prerouting dst-port=1025-1934,1936-4069,4071-8079,8081-8290,8293-11909,11911-65535 \
        in-interface=ether5 new-connection-mark=juegos_conn protocol=udp
    add action=mark-routing chain=prerouting connection-mark=juegos_conn in-interface=ether5 new-routing-mark=to_pppoe-out2
    add action=mark-packet chain=prerouting connection-mark=juegos_conn new-packet-mark=juegos_packet passthrough=no
     
    Última modificación por un moderador: 15 de Mayo de 2016
  8. MikrotikPeru

    MikrotikPeru Well-Known Member

    Hay algo Que debes tener en cuenta Youtube no solo pasa 80,443 en TCP`si no en UDP eso es algo que Haciendo Torch me di cuenta, por ello mismo si no marcas ese trafico como descarga va tener que pasar por la linea de GAMES si tiene metrica 1
     
    A Sebastianz le gusta esto.
  9. Sebastianz

    Sebastianz New Member

    hola buenos tardes como estan todos quisiera saber si solucionaste el detalle del dota 2 pasarla solo x 1 linea y los videos y demas x otra linea
     
  10. Sebastianz

    Sebastianz New Member

    como podria hacer ese marcado de udp en el scrtip del amigo para podr usarlo tengo mucha saturacion con los videos y la navegacion
     
  11. MikrotikPeru

    MikrotikPeru Well-Known Member

    Las otras opciones, que son recomendable es enrutar trafico o ip origen a determinadas lineas.
     
  12. daviddomh

    daviddomh New Member

    le di solucion a mi problema, hice esto :

    ip firewall layer7-protocol
    add name=facebook regexp="^.*(facebook).*\$"
    add name=fbcdn regexp="^.*(fbcdn).*\$"
    add name=googlevideo regexp="^.*(googlevideo).*\$"
    add name=steamcontent regexp="^.*(steamcontent).*\$"
    add name=steampowered regexp="^.*(steampowered).*\$"



    /ip firewall filter
    add action=add-dst-to-address-list address-list=steam_ip \
    address-list-timeout=3d chain=forward comment="Steam " dst-port=80,443 \
    layer7-protocol=steampowered protocol=tcp
    add action=add-dst-to-address-list address-list=steam_ip \
    address-list-timeout=3d chain=forward dst-port=80,443 layer7-protocol=\
    steamcontent protocol=tcp
    add action=add-dst-to-address-list address-list=Youtube_ip \
    address-list-timeout=3d chain=forward comment=Youtube dst-port=80,443 \
    layer7-protocol=googlevideo protocol=tcp
    add action=add-dst-to-address-list address-list=Youtube_ip \
    address-list-timeout=3d chain=forward dst-port=80,443 layer7-protocol=\
    googlevideo protocol=udp
    add action=drop chain=forward dst-address-list=Youtube_ip dst-port=443 \
    protocol=udp
    add chain=input comment="ICMP Seguro" protocol=icmp
    add chain=input connection-state=established
    add chain=input dst-port=53 protocol=udp
    add chain=input connection-state=related
    add chain=input dst-port=8291-8292 protocol=tcp
    add action=tarpit chain=input comment="Filtro de Seguridad" protocol=tcp \
    src-address-list=atacante
    add action=add-src-to-address-list address-list=atacante \
    address-list-timeout=3h chain=input connection-limit=10,32
    add action=add-src-to-address-list address-list=atacante \
    address-list-timeout=3h chain=input protocol=tcp psd=21,3s,3,1
    add action=drop chain=input in-interface=ether1


    /ip firewall mangle
    add action=mark-connection chain=prerouting comment=ICMP dst-address-list=\
    icmpseguro new-connection-mark=icmp protocol=icmp
    add action=mark-packet chain=prerouting connection-mark=icmp new-packet-mark=\
    ICMP passthrough=no
    add action=mark-connection chain=prerouting comment=DNS dst-port=53 \
    new-connection-mark=dns_conn protocol=udp
    add action=mark-connection chain=output dst-port=53 new-connection-mark=\
    dns_conn protocol=udp
    add action=mark-packet chain=output connection-mark=dns_conn new-packet-mark=\
    dns_packet passthrough=no
    add action=mark-packet chain=prerouting connection-mark=dns_conn \
    new-packet-mark=dns_packet passthrough=no
    add action=mark-connection chain=prerouting comment="Youtube " \
    dst-address-list=Youtube_ip dst-port=443 new-connection-mark=Youtube \
    protocol=tcp
    add action=mark-packet chain=prerouting connection-mark=Youtube \
    new-packet-mark=Youtube passthrough=no
    add action=mark-connection chain=prerouting comment=Steam dst-address-list=\
    steam_ip dst-port=80 new-connection-mark=Steam protocol=tcp
    add action=mark-packet chain=prerouting connection-mark=Steam \
    new-packet-mark=steam passthrough=no
    add action=mark-connection chain=prerouting comment=Juegos dst-port=\
    1025-8079,8081-8290,8293-65535 new-connection-mark=juegos_conn protocol=\
    tcp
    add action=mark-connection chain=prerouting dst-port=\
    1025-8079,8081-8290,8293-65535 new-connection-mark=juegos_conn protocol=\
    udp
    add action=mark-packet chain=prerouting connection-mark=juegos_conn \
    new-packet-mark=juegos_packet passthrough=no



    al marcar los paquetes enrute a diferentes lineas y listo , todo funcionò de maravillas .
     
  13. renatoeames

    renatoeames Member

  14. ragis

    ragis New Member

    Buenas tardes, tengo configurada una VPN, logro que conecte, declaro una ip para mi cliente dentro del rango del servidor VPN pero por ejemplo no logro hacer ping a ningun equipo ni conectarme por rdp. Entiendo que debería enrutar el trafico por una única Wan pero no me doy cuenta como, alguien me podrá dar una mano....Gracias
     
    Última modificación: 23 de Junio de 2017
  15. MikrotikPeru

    MikrotikPeru Well-Known Member

    Hay dos posibilidades usa en la LAN -> ARP-PROXY o bien haz un enmascaramiento LAN to LAN.

    Saludos,
     
  16. ragis

    ragis New Member

    Gracias por tu pronta respuesta, lo he probado sin éxito.alguna otra idea, desde ya muchas gracias....
     
  17. MikrotikPeru

    MikrotikPeru Well-Known Member

    Otro detalle, si tienes amarre MAC e IP el equipo al cual deseas llegar debe estar en las tablas arp.
     
  18. ragis

    ragis New Member

    Estimado, gracias por tu colaboración, pude resolver el problema, es una combinación del mangle y routes voy a postear la solución completa.
     
  19. ragis

    ragis New Member

  20. miquelito

    miquelito New Member

    Buenas Tardes, estoy configurando un balanceo pcc de 3 lineas , quería saber cual de estos dos se comporta mejor , Muchas Gracias.

    1
    add action=mark-connection chain=prerouting connection-state=new in-interface=ETH-1-P1 new-connection-mark=ISP1_conn

    add action=mark-routing chain=output connection-mark=ISP1_conn new-routing-mark=to_ISP1

    add action=mark-connection chain=prerouting connection-state=new dst-address-type=!local in-interface=ETH-A13 AL CORE new-connection-mark=ISP1_conn per-connection-classifier=both-addresses:3/0

    add action=mark-routing chain=prerouting connection-mark=ISP1_conn in-interface=ETH-A13 AL CORE new-routing-mark=to_ISP1


    2
    chain=prerouting action=mark-connection new-connection-mark=ISP1_conn passthrough=yes connection-mark=no-mark in-interface=ETH-1-P1

    chain=output action=mark-routing new-routing-mark=to_ISP1 passthrough=yes connection-mark=ISP1_conn

    chain=prerouting action=mark-connection new-connection-mark=ISP1_conn passthrough=yes dst-address-type=!local connection-mark=no-mark in-interface=ETH-A13 AL CORE per-connection-classifier=both-addresses:3/0

    chain=prerouting action=mark-routing new-routing-mark=to_ISP1 passthrough=yes connection-mark=ISP1_conn in-interface=ETH-A13 AL CORE
     

Comparte esta página