+ Responder ao Tópico



  1. #1

    Padrão Balanceamento orientado por conexao, ECMP no Mikrotik

    Introdução:
    Já vi vários posts na internet mostrando como fazer o balanceamento de carga em dois ou mais links no mikrotik, mas todos os que eu vi ou deixam um dos links sem utilização somente como failover ou você tem que dividir as saídas por certos ips da sua rede interna.
    Nenhum dos casos me agradou, à seguir vou mostrar como fazer um balanceamento de carga de uma forma eficaz sem subutilizar um dos links ou dividir sua rede, o mesmo é orientado à conexão, ou seja, sem problemas com msn..., “ECMP load balance” no mikrotik.


    Cenário:


    LAN: 192.168.0.1/24
    WAN1: 172.16.10.10/32 – Link Embratel 2Mb
    WAN2: 172.16.20.10/32 – Link OI 2Mb

    IPS Mikrotik:
    LAN: 192.168.0.1
    WAN1:172.16.10.1
    WAN2:172.16.20.1

    IPS Routers:
    WAN1: 172.16.10.10
    WAN2:172.16.20.10


    Regras para os impacientes:

    /ip address
    add address=192.168.0.1/24 broadcast=192.168.0.255 comment="LAN" disabled=no \
    interface=ether2 network=192.168.0.0
    add address=172.16.10.1/24 broadcast=172.16.10.255 comment="WAN1" disabled=no \
    interface=ether3 network=172.16.10.0
    add address=172.16.20.1/24 broadcast=172.16.20.255 comment="WAN2" disabled=no \
    interface=ether1 network=172.16.20.0


    / ip route
    add dst-address=0.0.0.0/0 gateway=172.16.10.10,172.16.20.10 check-gateway=ping


    / ip firewall nat
    add chain=srcnat out-interface=WAN1 action=masquerade
    add chain=srcnat out-interface=WAN2 action=masquerade


    / ip firewall mangle
    add chain=input in-interface=WAN1 action=mark-connection new-connection-mark=wan1_conn
    add chain=input in-interface=WAN2 action=mark-connection new-connection-mark=wan2_conn
    add chain=output connection-mark=wan1_conn action=mark-routing new-routing-mark=to_wan1
    add chain=output connection-mark=wan2_conn action=mark-routing new-routing-mark=to_wan2


    / ip route
    add dst-address=0.0.0.0/0 gateway=172,16.10.10 routing-mark=to_wan1
    add dst-address=0.0.0.0/0 gateway=172.16.20.10 routing-mark=to_wan2

    Explicação:



    -IP Address:

    /ip address
    add address=192.168.0.1/24 broadcast=192.168.0.255 comment="LAN" disabled=no \
    interface=ether2 network=192.168.0.0
    add address=172.16.10.10/24 broadcast=172.16.10.255 comment="WAN1" disabled=no \
    interface=ether3 network=172.16.10.0
    add address=172.16.20.10/24 broadcast=172.16.20.255 comment="WAN2" disabled=no \
    interface=ether1 network=172.16.20.0
    Neste trecho definimos os ips da interface local LAN (192.168.0.1/24) e os ips das interfaces externas WAN(172.16.10.1/24 e 172.16.20.1/24), claro, ips inválidos, adeque a sua necessidade!



    -Routing:

    / ip route
    add dst-address=0.0.0.0/0 gateway=172.16.10.10,172.16.20.10 check-gateway=ping
    Aqui criamos uma rota tipica de ECMP (Equal Cost Multi-Path), com check-gateway. Por definição o ECMP é persistente por conexão, ou seja, se um cliente estabelece conexão pelo gateway 172.16.10.10, ele irá utilizar somente este gateway durante ESTA conexão. Assim que um dos links cair o check-gateway irá remove-lo da lista de gateway, com isso você terá um efeito failover de brinde .
    você pode utilizar também links assimétricos, por exemplo, digamos que o link da OI seja de 4Mb e o da Embratel de 8Mb, sendo o da Embratel o dobro do link da OI, você pode fazer a rota da seguinte forma para não subutilizar um dos links:
    / ip route
    add dst-address=0.0.0.0/0 gateway=172.16.20.10,172.16.10.10,172.16.10.10 check-gateway=ping



    -NAT:

    / ip firewall nat
    add chain=srcnat out-interface=wan1 action=masquerade
    add chain=srcnat out-interface=wan2 action=masquerade
    Como as rotas já foram decididas, só precisamos das regras para corrigir o src-address para os pacotes de saída, Se o pacote sair pela WAN1 será “NATeado” para 172.16.10.10/24, caso contrário será para 172.16.20.10/24.



    -Conexões Entrantes:

    / ip firewall mangle
    add chain=input in-interface=WAN1 action=mark-connection new-connection-mark=wan1_conn
    add chain=input in-interface=wlan2 action=mark-connection new-connection-mark=wan2_conn
    add chain=output connection-mark=wan1_conn action=mark-routing new-routing-mark=to_wan1
    add chain=output connection-mark=wan1_conn action=mark-routing new-routing-mark=to_wan2
    / ip route
    add dst-address=0.0.0.0/0 gateway=172.16.10.10 routing-mark=to_wan1
    add dst-address=0.0.0.0/0 gateway=172.16.20.10 routing-mark=to_wan2
    Imagine um pacote INPUT vindo pelo link da Oi e retornando pelo link da Embratel, com ip diferente não vai dar, para evitar isso, vamos avisar ao mikrotik que o pacote que for recebido pelo link1 deve ser retornado pelo mesmo link.



    Conclusão:

    O ECMP é uma boa forma de balancear múltiplos links no mikrotik, com a utilização dele não subutilizamos os links e conseguimos um failover caso um dos links caiam, ele bem configurado dificilmente dará problemas.
    Existem alguns boatos que que o tempo de conexão do ECMP é de 10 min, até o momento não tive problemas com o msn nesta configuração, ja passei de 10 min! , pode ser sorte de sair pelo mesmo link, mas o certo e que o balanceamento está funcionando 100%, postarei mais impressões sobre esta implementação.
    Se alguem tiver algo para adicionar, be my guest!



    Fonte: Load Balance no Mikrotik usando ECMP e failover

  2. #2

    Padrão

    Vc fala que esse load se saiu melhor que o PCC, será que vale a pena testar esse load?



  3. #3

    Padrão nao

    rogeriodj, ainda nao testei o PCC, o segundo RB1000 que eu pedi chega amanha e vou configurá-lo como pcc para testar tb!

    neste load balance com ecmp dizem que quando da 10 min é dado um flush na tabela de roteamento, o que pode causar problemas qndo os hosts mudam de gateway(msn, bancos,...) ainda nao detectei isso, vou ver melhor amanha e digo aqui.

    o PCC foi colocado no MK para nao acontecer isso, mas ainda nao tive contato com o mesmo!

  4. #4

    Padrão

    Certo amigo, aqui uso o PCC com rotas dos bancos e outros sites para sairem por um mesmo link, pois se não fizer assim da problema nas paginas dos bancos, tirando isso o PCC é show de bola amigo, vc vai gostar dele...

    Citação Postado originalmente por lcmm84 Ver Post
    rogeriodj, ainda nao testei o PCC, o segundo RB1000 que eu pedi chega amanha e vou configurá-lo como pcc para testar tb!

    neste load balance com ecmp dizem que quando da 10 min é dado um flush na tabela de roteamento, o que pode causar problemas qndo os hosts mudam de gateway(msn, bancos,...) ainda nao detectei isso, vou ver melhor amanha e digo aqui.

    o PCC foi colocado no MK para nao acontecer isso, mas ainda nao tive contato com o mesmo!



  5. #5

    Padrão ECMP

    Já usei este balanceamento algum tempo, porem comigo o fato dos flushes a cada 10 minutos aconteciam sim, nem sempre interrompiam conexoes pois eu dava "sorte" da conexao voltar na mesma WAN, em outras situaçoes interrompiam. Realmente funciona bem, porem os flushes nas tabelas de roteamento me causaram dor de cabeça. Depois de um tempo surgiu o balanceamento PCC, migrei para o mesmo e ai sim acabaram-se todos os problemas, o melhor balanceamento possivel é utilizando PCC com a combinaçao both-addresses ou both-addresses-and-ports , ainda nao tive problemas de sub ou super-utilizaçao de links com o balancemento PCC.
    Porem sua dica é muito valida, obrigado
    Gabriel

  6. #6

    Padrão

    Citação Postado originalmente por rogeriodj Ver Post
    Certo amigo, aqui uso o PCC com rotas dos bancos e outros sites para sairem por um mesmo link, pois se não fizer assim da problema nas paginas dos bancos, tirando isso o PCC é show de bola amigo, vc vai gostar dele...
    Blz rogerio não vejo a hora do rb chegar p testar, mas se vc tem que setar rotas para sites de banco por exemplo sairem pelo mesmo link, não seria a mesma coisa usando ecmp e setando rotas para esses serviços no mesmo link? não consigo enchergar uma diferença(fora implementação)!
    Pensei que não fosse necessário setar rotas fixas no PCC para bancos , msn,....
    Para mim ele era a solução deste problema do ECMP!



  7. #7

    Padrão Re: Balanceamento orientado por conexao, ECMP no Mikrotik

    Amigos estou usando em um cliente o ECMP e até o momento esta balanceando tudo corretamente, porem só consigo acessar a porta 8291 por um link, olhem meu NAT:

    Código :
    /ip firewall nat
    add action=masquerade chain=srcnat comment=MASCARAMENTO disabled=no out-interface=ether1
    add action=masquerade chain=srcnat comment="" disabled=no out-interface=ether2
    add action=masquerade chain=srcnat comment="" disabled=no src-address=10.0.0.0/8
    add action=accept chain=dstnat comment="LIBERA ACESSO WINBOX" disabled=no dst-address=\
        yyy.yyy.yyy.yyy dst-port=8291 protocol=tcp
    add action=accept chain=dstnat comment="" disabled=no dst-address=xxx.xxx.xxx.xxx \
        dst-port=8291 protocol=tcp
    add action=dst-nat chain=dstnat comment=DMZ disabled=no dst-address=yyy.yyy.yyy.yyy \
        protocol=tcp src-port=0-65535 to-addresses=10.1.1.2 to-ports=0-65535
    add action=dst-nat chain=dstnat comment="" disabled=no dst-address=yyy.yyy.yyy.yyy \
        protocol=udp src-port=0-65535 to-addresses=10.1.1.2 to-ports=0-65535
    add action=dst-nat chain=dstnat comment="" disabled=no dst-address=xxx.xxx.xxx.xxx \
        protocol=tcp src-port=0-65535 to-addresses=10.1.1.2 to-ports=0-65535
    add action=dst-nat chain=dstnat comment="" disabled=no dst-address=xxx.xxx.xxx.xxx \
        protocol=udp src-port=0-65535 to-addresses=10.1.1.2 to-ports=0-65535

    Detalhe que primeiro fiz o mascaramento, depois aceitei a porta 8291 nos 2 IPs validos, e logo depois fiz a DMZ para o servidor Linux.

    Eu acesso pelo ip yyy.yyy.yyy.yyy, mas pelo ip xxx.xxxx.xxx.xxx não vai....

    Alguma ideia ??

  8. #8

    Padrão Re: Balanceamento orientado por conexao, ECMP no Mikrotik

    libera a porta do winbox no filter e nao no nat, ve se funciona!



  9. #9

    Padrão Re: Balanceamento orientado por conexao, ECMP no Mikrotik

    /ip firewall nat
    add action=masquerade chain=srcnat comment=MASCARAMENTO disabled=no out-interface=ether1
    add action=masquerade chain=srcnat comment="" disabled=no out-interface=ether2
    add action=masquerade chain=srcnat comment="" disabled=no src-address=10.0.0.0/8
    essas dua regras aqui em baixo, descarta ela
    add action=accept chain=dstnat comment="LIBERA ACESSO WINBOX" disabled=no dst-address=\
    yyy.yyy.yyy.yyy dst-port=8291 protocol=tcp
    add action=accept chain=dstnat comment="" disabled=no dst-address=xxx.xxx.xxx.xxx \
    dst-port=8291 protocol=tcp

    tens uma dmz, logo estás redirecionado todas asportas para esse ip, inclusive a do mikrotik.
    alem disso tens a mesma regras duas vezes.
    add action=dst-nat chain=dstnat comment=DMZ disabled=no dst-address=yyy.yyy.yyy.yyy \
    protocol=tcp src-port=0-65535 to-addresses=10.1.1.2 to-ports=0-65535
    add action=dst-nat chain=dstnat comment="" disabled=no dst-address=yyy.yyy.yyy.yyy \
    protocol=udp src-port=0-65535 to-addresses=10.1.1.2 to-ports=0-65535
    add action=dst-nat chain=dstnat comment="" disabled=no dst-address=xxx.xxx.xxx.xxx \
    protocol=tcp src-port=0-65535 to-addresses=10.1.1.2 to-ports=0-65535
    add action=dst-nat chain=dstnat comment="" disabled=no dst-address=xxx.xxx.xxx.xxx \
    protocol=udp src-port=0-65535 to-addresses=10.1.1.2 to-ports=0-65535

    tente fazer a regra assim:
    /ip firewall nat
    add action=dst-nat chain=dstnat comment=DMZ disabled=no dst-address=yyy.yyy.yyy.yyy \
    protocol=tcp src-port=!8291 to-addresses=10.1.1.2 to-ports=!8291

    add action=dst-nat chain=dstnat comment=DMZ disabled=no dst-address=xxx.xxx.xxx.xxx \
    protocol=tcp src-port=!8291 to-addresses=10.1.1.2 to-ports=!8291

    clica na estrelinha pra agradecer

  10. #10

    Padrão Re: Balanceamento orientado por conexao, ECMP no Mikrotik

    Senhores, bom dia.. sei que o topico é meio antigo... porem me foi muito util...
    Lendo a teoria e as informações sobre os varios tipos de balance, cheguei a conclusão que realmente o ECMP é o mais inteligente (opinião minha, quase um leigo), porem o flush da tabela realmente deixa qualquer um louco.... heheheh derruba msn, downloads, etc, etc, etc.... Alguem sabe se existe uma maneira de parametrizar isso? tipo aumentar o tempo? e se tiver, qual o problema que isso pode gerar?

    Amplexos.



  11. #11

    Padrão Re: Balanceamento orientado por conexao, ECMP no Mikrotik

    Olá rfmedeiros,

    na época dei uma boa pesquisada no assunto e descobri que é uma limitação do kernel *nix, podes tentar recompilar o kernel de um distro open e ver se funciona.
    MAS, recomendo usares o PCC, ele bem configurado, não necessita de regras individuais para bancos e msn, realmente o PCC é show de bola!

  12. #12

    Padrão Re: Balanceamento orientado por conexao, ECMP no Mikrotik

    Rapaz! Coloquei aqui suas regras no meu servidor, esta funcionando filé, gostei.



  13. #13

    Padrão Re: Balanceamento orientado por conexao, ECMP no Mikrotik

    Citação Postado originalmente por thiagotgc Ver Post
    Amigos estou usando em um cliente o ECMP e até o momento esta balanceando tudo corretamente, porem só consigo acessar a porta 8291 por um link, olhem meu NAT:

    Código :
    /ip firewall nat
    add action=masquerade chain=srcnat comment=MASCARAMENTO disabled=no out-interface=ether1
    add action=masquerade chain=srcnat comment="" disabled=no out-interface=ether2
    add action=masquerade chain=srcnat comment="" disabled=no src-address=10.0.0.0/8
    add action=accept chain=dstnat comment="LIBERA ACESSO WINBOX" disabled=no dst-address=\
        yyy.yyy.yyy.yyy dst-port=8291 protocol=tcp
    add action=accept chain=dstnat comment="" disabled=no dst-address=xxx.xxx.xxx.xxx \
        dst-port=8291 protocol=tcp
    add action=dst-nat chain=dstnat comment=DMZ disabled=no dst-address=yyy.yyy.yyy.yyy \
        protocol=tcp src-port=0-65535 to-addresses=10.1.1.2 to-ports=0-65535
    add action=dst-nat chain=dstnat comment="" disabled=no dst-address=yyy.yyy.yyy.yyy \
        protocol=udp src-port=0-65535 to-addresses=10.1.1.2 to-ports=0-65535
    add action=dst-nat chain=dstnat comment="" disabled=no dst-address=xxx.xxx.xxx.xxx \
        protocol=tcp src-port=0-65535 to-addresses=10.1.1.2 to-ports=0-65535
    add action=dst-nat chain=dstnat comment="" disabled=no dst-address=xxx.xxx.xxx.xxx \
        protocol=udp src-port=0-65535 to-addresses=10.1.1.2 to-ports=0-65535

    Detalhe que primeiro fiz o mascaramento, depois aceitei a porta 8291 nos 2 IPs validos, e logo depois fiz a DMZ para o servidor Linux.

    Eu acesso pelo ip yyy.yyy.yyy.yyy, mas pelo ip xxx.xxxx.xxx.xxx não vai....

    Alguma ideia ??
    tambem estou com esse problema alguem sabe como resolver? pode me dar uma dica @lcmm84

  14. #14

    Padrão Re: Balanceamento orientado por conexao, ECMP no Mikrotik

    Amigos, não esqueçam, para quem usa modem roteado, deve ser feita a DMZ do modem para o MK, e só mente após isso, deve criar no MK a liberação para o 8291