+ Responder ao Tópico



  1. #1

    Padrão criando artigo sobre balaneceamento

    Ola pessoal.
    Vejo que há muitas duvidas sobre balanceamento de carga de internet em diversos foruns.
    Então estava a fim de criar um artigo/tutorial com informação teórica e pratica (no RouterOS) sobre diversos tipos de balanceamento, para postar aqui e nos outros foruns que eu auxilio (como o guiadohardware.net).
    Contudo, não tenho algumas informações, em grande parte pratica. por isso venho aqui para pedir ajuda (com ideias de como eu posso implementar, fontes a pesquisar e correções de erros) para criar esse guia definitivo, auxiliando os usuarios (antes que falem algo,vou dar os devidos créditos).
    o tutorial segue a seguinte ordem
    TEORIA
    breve explicação sobre MK e RouterOS
    balanceamento
    ecmp(so tenho pratica)
    pcc
    balanceamento por roteamento dinamico
    -ospf
    -bgb(não tenho nada)
    PRATICA
    ecmp
    pcc
    ospf(falta algumas informações e testes)
    bgb(não tenho nada)

    (tbm não tenho a infra pra desenvolver esses artigos, por isso estou tentando criar a estrutura em VMs com virtualbox, se alguem tiver dicas)

  2. #2

    Padrão Re: criando artigo sobre balaneceamento

    Balance PCC detalhado - REGRAS E EXPLICAÇÕES

    Parte 1

    Ether1 – Lan 10.10.10.0/24

    Ether3 – Wan Embratel (router + 4 modems PPP) / Link 8 Mb/s

    Ether4 – Wan OI (router+2modems PPP)/ Link 4 Mb/s

    3. Regras para os Impacientes

    /ip firewall mangle

    add action=accept chain=output comment=”Sem Balance” disabled=no dst-address-list=SemBalance

    add action=accept chain=prerouting comment=”" disabled=no dst-address=200.200.200.200/29 in-interface=ether1

    add action=accept chain=prerouting comment=”" disabled=no dst-address=222.222.222.222/28 in-interface=ether1

    add action=mark-connection chain=input comment=”____________Inicio Conf PCC (Load Balance) ————— Marca Conexoes de entrada para que voltem pelo mesmo link” disabled=no in-interface=ether3 new-connection-mark=EBT_conn passthrough=yes

    add action=mark-connection chain=input comment=”" disabled=no in-interface=ether4 new-connection-mark=OI_conn passthrough=yes

    add action=mark-connection chain=output comment=”Load Balance Proxy” connection-state=new disabled=no dst-address=!10.10.10.0/24 new-connection-mark=EBT_conn passthrough=yes per-connection-classifier=both-addresses:3/0

    add action=mark-connection chain=output comment=”" connection-state=new disabled=no dst-address=!10.10.10.0/24 new-connection-mark=EBT_conn passthrough=yes per-connection-classifier=both-addresses:3/1

    add action=mark-connection chain=output comment=”" connection-state=new disabled=no dst-address=!10.10.10.0/24 new-connection-mark=OI_conn passthrough=yes per-connection-classifier=both-addresses:3/2

    add action=mark-routing chain=output comment=”Retorna as conexoes marcadas no inicio, pelo mesmo link que entraram” connection-mark=EBT_conn disabled=no new-routing-mark=EBT_traffic passthrough=yes

    add action=mark-routing chain=output comment=”" connection-mark=OI_conn disabled=no new-routing-mark=OI_traffic passthrough=yes

    add action=mark-connection chain=prerouting comment=”Load Balance (PCC), para os dois links (OI e EBT) sendo um peso maior o link da EBT por causa da velocidade maior” disabled=no dst-address-type=!local in-interface=ether1 new-connection-mark=EBT_conn passthrough=yes per-connection-classifier=both-addresses:3/0

    add action=mark-connection chain=prerouting comment=”" disabled=no dst-address-type=!local in-interface=ether1 new-connection-mark=EBT_conn passthrough=yes per-connection-classifier=both-addresses:3/1

    add action=mark-connection chain=prerouting comment=”" disabled=no dst-address-type=!local in-interface=ether1 new-connection-mark=OI_conn passthrough=yes per-connection-classifier=both-addresses:3/2

    add action=mark-routing chain=prerouting comment=”Aponta as conexoes do load balance para as novas tabelas de roteamento, possibilitando o Load Balance(PCC)” connection-mark=EBT_conn disabled=no in-interface=ether1 new-routing-mark=EBT_traffic passthrough=yes

    add action=mark-routing chain=prerouting comment=”____________FIM Load Balance (PCC)” connection-mark=OI_conn disabled=no in-interface=ether1 new-routing-mark=OI_traffic passthrough=yes

    /ip route

    add comment=”Rota Saida Principal EBT sem Load Balance” disabled=no distance=2 dst-address=0.0.0.0/0 gateway=222.222.222.222 scope=30

    target-scope=10

    add comment=”Rota saida OI sem Load Balance” disabled=no distance=3 dst-address=0.0.0.0/0 gateway=200.200.200.200 scope=30

    target-scope=10

    add comment=”Rota saida OI para Load Balance” disabled=no distance=1 dst-address=0.0.0.0/0 gateway= 200.200.200.200 routing-mark=

    OI_traffic scope=30 target-scope=10

    add comment=”Rota Saida EBT para Load Balance” disabled=no distance=1 dst-address=0.0.0.0/0 gateway= 222.222.222.222 routing-mark=

    EBT_traffic scope=30 target-scope=10

    add comment=”Rota para Rede interna” disabled=no distance=1 dst-address=10.10.10.0/24 gateway=10.10.10.1 scope=30 target-scope=10

    /ip firewall nat

    add action=masquerade chain=srcnat comment=”Mascaramento Link EBT” disabled=no out-interface=ether3
    add action=masquerade chain=srcnat comment=”Mascaramento Link OI” disabled=no out-interface=ether4

    4. Explicação das Regras

    /ip firewall mangle

    add action=accept chain=output comment=”Sem Balance” disabled=no dst-address-list=SemBalance

    A regra acima cria uma address list para cadastrar ips que você queira que saia pela rota default e não pelo balanceamento.

    /ip firewall mangle

    add action=accept chain=prerouting comment=”" disabled=no dst-address=200.200.200.200/29 in-interface=ether1

    add action=accept chain=prerouting comment=”" disabled=no dst-address=222.222.222.222/28 in-interface=ether1

    É necessário “remover” do balanceamento as redes que estão conectadas diretamente ao mikrotik, neste caso meus dois links: 200.200.200.200/29 e 222.222.222.222/28, para que não sejam balanceados entre si!

    /ip firewall mangle

    add action=mark-connection chain=input comment=”____________Inicio Conf PCC (Load Balance) ————— Marca Conexoes de entrada para que voltem pelo mesmo link” disabled=no in-interface=ether3 new-connection-mark=EBT_conn passthrough=yes

    add action=mark-connection chain=input comment=”" disabled=no in-interface=ether4 new-connection-mark=OI_conn passthrough=yes

    Esta regra serve para marcar os pacotes que estão entrando, para que os mesmos saiam pelo link que entraram, ou seja, caso seja estabelecia uma conexão entrante no link da oi com destino, por exemplo, ao meu servidor web, esta será marcada como “OI_conn”, e nas próximas regras será direcionado para a saída correta que é a interface ether4.

    /ip firewall mangle

    add action=mark-connection chain=output comment=”Load Balance Proxy” connection-state=new disabled=no dst-address=!10.10.10.0/24 new-connection-mark=EBT_conn passthrough=yes per-connection-classifier=both-addresses:3/0

    add action=mark-connection chain=output comment=”" connection-state=new disabled=no dst-address=!10.10.10.0/24 new-connection-mark=EBT_conn passthrough=yes per-connection-classifier=both-addresses:3/1

    add action=mark-connection chain=output comment=”" connection-state=new disabled=no dst-address=!10.10.10.0/24 new-connection-mark=OI_conn passthrough=yes per-connection-classifier=both-addresses:3/2

    Essas 3 regras só se aplicam se você tiver na mesma maquina o PCC e o Web-Proxy ativado, é ai que a mágica começa, a opção “per-connection-classifier” é o PCC, no qual você deve subdividir seu link, no meu caso tenho um de 8 Mb e um de 4Mb, ou seja, para não subutilizar o meu link de 8 Mb, devo colocar 2 vezes para o de 8 Mb (EBT_conn) e um para o de 4Mb (OI_conn).

    /ip firewall mangle

    add action=mark-routing chain=output comment=”Retorna as conexoes marcadas no inicio, pelo mesmo link que entraram” connection-mark=EBT_conn disabled=no new-routing-mark=EBT_traffic passthrough=yes

    add action=mark-routing chain=output comment=”" connection-mark=OI_conn disabled=no new-routing-mark=OI_traffic passthrough=yes

    Nas duas regras acima, nos asseguramos que os pacotes que entraram pelos links OI e EBT e que foram marcados como OI_conn e EBT_conn saiam pela interface correta, ou seja, a interface que eles entraram, para isso é necessário criar uma tabela de roteamento para cada um dos links, descritos nas regras como OI_traffic e EBT_traffic, logo abaixo adicionaremos as rotas para essas tabelas.

    /ip firewall mangle

    add action=mark-connection chain=prerouting comment=”Load Balance (PCC), para os dois links (OI e EBT) sendo um peso maior o link da EBT por causa da velocidade maior” disabled=no dst-address-type=!local in-interface=ether1 new-connection-mark=EBT_conn passthrough=yes per-connection-classifier=both-addresses:3/0

    add action=mark-connection chain=prerouting comment=”" disabled=no dst-address-type=!local in-interface=ether1 new-connection-mark=EBT_conn passthrough=yes per-connection-classifier=both-addresses:3/1

    add action=mark-connection chain=prerouting comment=”" disabled=no dst-address-type=!local in-interface=ether1 new-connection-mark=OI_conn passthrough=yes per-connection-classifier=both-addresses:3/2

    Essas 3 regras fazem o Load Balance das conexões que estão passando pelo mikrotik (FORWARD), funcionam da mesma forma que as regras para o balanceamento do proxy, a diferença é o “chain”, pois as 3 primeiras que são do proxy, especificamos como “OUTPUT” e neste caso pega o resto que nao se encaixam na primeira (FORWARD), lembrando que para nao subutilizar um dos links, por causa da diferença de velocidade, coloquei 2 vezes o link EBT por ter o dobro da velocidade do link OI.

    /ip firewall mangle

    add action=mark-routing chain=prerouting comment=”Aponta as conexoes do load balance para as novas tabelas de roteamento, possibilitando o Load Balance(PCC)” connection-mark=EBT_conn disabled=no in-interface=ether1 new-routing-mark=EBT_traffic passthrough=yes

    add action=mark-routing chain=prerouting comment=”____________FIM Load Balance (PCC)” connection-mark=OI_conn disabled=no in-interface=ether1 new-routing-mark=OI_traffic passthrough=yes

    Essas duas últimas regras encaminham o tráfego que foi marcado(balanceado) nas regras acima para suas tabelas de roteamento correspondentes.


    Continua regras na Parte 2...

  3. #3

    Padrão Re: criando artigo sobre balaneceamento

    Parte 2 continuação...

    /ip route

    add comment=”Rota Saida Principal EBT sem Load Balance” disabled=no distance=2 dst-address=0.0.0.0/0 gateway=222.222.222.222 scope=30 target-scope=10

    add comment=”Rota saida OI sem Load Balance” disabled=no distance=3 dst-address=0.0.0.0/0 gateway=200.200.200.200 scope=30 target-scope=10

    add comment=”Rota saida OI para Load Balance” disabled=no distance=1 dst-address=0.0.0.0/0 gateway= 200.200.200.200 routing-mark=OI_traffic scope=30 target-scope=10

    add comment=”Rota Saida EBT para Load Balance” disabled=no distance=1 dst-address=0.0.0.0/0 gateway= 222.222.222.222 routing-mark=EBT_traffic scope=30 target-scope=10

    add comment=”Rota para Rede interna” disabled=no distance=1 dst-address=10.10.10.0/24 gateway=10.10.10.1 scope=30 target-scope=10

    As regras acima criam as tabelas de roteamento necessárias para o funcionamento do PCC Load Balance, as duas primeiras são rotas estáticas para os ips que não irão utilizar o PCC, as duas seguintes dizem que os pacotes marcados como OI_traffic e EBT_traffic devem sair pelo gateway do qual entraram para não ter perda de conexão. A ultima é a rota para a rede interna.

    add action=masquerade chain=srcnat comment=”Mascaramento Link EBT” disabled=no out-interface=ether3
    add action=masquerade chain=srcnat comment=”Mascaramento Link OI” disabled=no out-interface=ether4
    Essas regras são necessárioas para fazer o mascaramento para poder saira para internet.


    Créditos:Luiz Claudio Martins Maia


    Espero ter ajudado!

  4. #4

    Padrão Re: criando artigo sobre balaneceamento

    valew! adicionado ao projeto