1 Anexo(s)
Balance PCC com Failover Avançado (Sem Script)
O objetivo deste tutorial é demonstrar como configurar um balanceamento de carga entre múltiplos links com um avançado Failover (Sem Scripts).
Existem algumas formas de balancear links:
- ECMP
- NTH
- PCC
Para o balanceamento, iremos utilizar o PCC.
O PCC ou “Per Connection Classifier”, marca os pacotes para que os mesmos sejam direcionados para o gateway certo, com isso a conexão ficará pertinente à certo gateway.
Para o Failover, algumas pessoas usam ferramenta NetWatch para monitorar o Link. Outros usam scripts para executar ping periodicamente hosts remotos E então desabilitar rotas ou de alguma outra forma alterar o comportamento do roteamento/balanceamento.
Mas nós iremos usar apenas /ip route para fazer esse monitoramento, sem NetWatch, sem script...
Vamos lá.
Cenário
Eth5 – Lan 10.10.10.0/24
IP no Mikrotik: 10.10.10.1
Eth4 – LINK 1 - 10 MEGA - 192.168.30.0/24
IP no Mikrotik: 192.168.30.2
Gateway: 192.168.30.1
Eth3 – LINK 2 - 10 MEGA - 192.168.31.0/24
IP no Mikrotik: 192.168.31.2
Gateway: 192.168.31.1
REGRAS PARA OS IMPACIENTES
Citação:
/ip address
add address=10.10.10.1/24 disabled=no interface=Eth5 network=10.10.10.0
add address=192.168.30.2/24 disabled=no interface=Eth4 network=192.168.30.0
add address=192.168.31.2/24 disabled=no interface=Eth3 network=192.168.31.0
/ip firewall nat
add action=masquerade chain=srcnat comment="### MASQUERADE ###" disabled=no out-interface=Eth4
add action=masquerade chain=srcnat disabled=yes out-interface=Eth3
/ip firewall mangle
add action=mark-connection chain=prerouting comment="SITE POR LINK" connection-state=new disabled=no dst-
address-list=LINK0 in-interface=Eth5 new-connection-mark=Sites0 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=Sites0 disabled=no in-interface=Eth5 new-routing-mark=Rota0 passthrough=no
add action=mark-connection chain=prerouting connection-state=new disabled=no dst-address-list=LINK1 in-interface=Eth5 new-connection-mark=Sites1 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=Sites1 disabled=no in-interface=Eth5 new-routing-mark=Rota1 passthrough=no
add action=add-dst-to-address-list address-list=ftp_con address-list-timeout=6h chain=prerouting comment="FTP FORA DO BALANCE" disabled=no dst-port=21 in-interface=Eth5 protocol=tcp
add action=accept chain=prerouting disabled=no dst-address-list=ftp_con in-interface=Eth5
add action=accept chain=prerouting comment="OUTRAS PORTAS FORA DO LOADBALACED" disabled=no dst-port=443,5000-6999,8080 in-interface=Eth5 protocol=tcp
add action=accept chain=prerouting disabled=no dst-port=443,5000-6999,8080 in-interface=Eth5 protocol=udp
add action=accept chain=prerouting comment="ACEITA REDE" disabled=no dst-address=192.168.30.0/24 in-interface=Eth5
add action=accept chain=prerouting disabled=no dst-address=192.168.31.0/24 in-interface=Eth5
add action=mark-connection chain=prerouting comment="MARCA CONEXAO ENTRADA PARA VOLTAR PELO MESMO LINK" connection-state=new disabled=no in-interface=Eth4 new-connection-mark=Eth4_conn passthrough=yes
add action=mark-connection chain=prerouting connection-state=new disabled=no in-interface=Eth3 new-connection-mark=Eth3_conn passthrough=yes
add action=mark-routing chain=output connection-mark=Eth4_conn disabled=no new-routing-mark=to_Eth4 passthrough=yes
add action=mark-routing chain=output connection-mark=Eth3_conn disabled=no new-routing-mark=to_Eth3 passthrough=yes
add action=mark-connection chain=prerouting comment="BALANCEANDO CONEXAO" connection-state=established disabled=no dst-address-type=!local in-interface=Eth5 new-connection-mark=Eth4_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:2/0
add action=mark-connection chain=prerouting connection-state=established disabled=no dst-address-type=!local in-interface=Eth5 new-connection-mark=Eth3_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:2/1
add action=mark-routing chain=prerouting comment="DIRECIONA MARCACAO PARA ROTEAMENTO" connection-mark=Eth4_conn disabled=no in-interface=Eth5 new-routing-mark=to_Eth4 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=Eth3_conn disabled=no in-interface=Eth5 new-routing-mark=to_Eth3 passthrough=yes
/ip route
add disabled=no distance=1 dst-address=200.154.56.80/32 gateway=192.168.30.1 scope=10 target-scope=10
add disabled=no distance=1 dst-address=208.67.222.222/32 gateway=192.168.30.1 scope=10 target-scope=10
add disabled=no distance=1 dst-address=200.160.2.3/32 gateway=192.168.31.1 scope=10 target-scope=10
add disabled=no distance=1 dst-address=208.67.220.220/32 gateway=192.168.31.1 scope=10 target-scope=10
add check-gateway=ping disabled=no distance=1 dst-address=192.168.56.1/32 gateway=208.67.220.220 scope=10 target-scope=10
add check-gateway=ping disabled=no distance=1 dst-address=192.168.56.1/32 gateway=200.160.2.3 scope=10 target-scope=10
add check-gateway=ping disabled=no distance=1 dst-address=192.168.57.1/32 gateway=208.67.222.222 scope=10 target-scope=10
add check-gateway=ping disabled=no distance=1 dst-address=192.168.57.1/32 gateway=200.154.56.80 scope=10 target-scope=10
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.56.1 routing-mark=Rota0 scope=30 target-scope=10
add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=192.168.57.1 routing-mark=Rota0 scope=30 target-scope=10
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.57.1 routing-mark=Rota1 scope=30 target-scope=10
add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=192.168.56.1 routing-mark=Rota1 scope=30 target-scope=10
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.56.1 routing-mark=to_Eth3 scope=30 target-scope=10
add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=192.168.57.1 routing-mark=to_Eth3 scope=30 target-scope=10
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.57.1 routing-mark=to_Eth4 scope=30 target-scope=10
add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=192.168.56.1 routing-mark=to_Eth4 scope=30 target-scope=10
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.56.1 scope=30 target-scope=10
add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=192.168.57.1 scope=30 target-scope=10
add disabled=no distance=20 dst-address=200.154.56.80/32 type=blackhole
add disabled=no distance=20 dst-address=200.160.2.3/32 type=blackhole
add disabled=no distance=20 dst-address=208.67.220.220/32 type=blackhole
add disabled=no distance=20 dst-address=208.67.222.222/32 type=blackhole
Re: Balance PCC com Failover Avançado (Sem Script)
EXPLICAÇÃO DAS REGRAS IP ADDRESS e IP FIREWALL
Citação:
/ip address
add address=10.10.10.1/24 disabled=no interface=Eth5 network=10.10.10.0
add address=192.168.30.2/24 disabled=no interface=Eth4 network=192.168.30.0
add address=192.168.31.2/24 disabled=no interface=Eth3 network=192.168.31.0
/ip firewall nat
add action=masquerade chain=srcnat comment="### MASQUERADE ###" disabled=no out-interface=Eth4
add action=masquerade chain=srcnat disabled=yes out-interface=Eth3
As regras acima criam a rede e faz o NAT.
Citação:
/ip firewall mangle
add action=mark-connection chain=prerouting comment="SITE POR LINK" connection-state=new disabled=no dst-address-list=LINK0 in-interface=Eth5 new-connection-mark=Sites0 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=Sites0 disabled=no in-interface=Eth5 new-routing-mark=Rota0 passthrough=no
add action=mark-connection chain=prerouting connection-state=new disabled=no dst-address-list=LINK1 in-interface=Eth5 new-connection-mark=Sites1 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=Sites1 disabled=no in-interface=Eth5 new-routing-mark=Rota1 passthrough=no
As regras acima criam um address list para cadastrar ips que você queira que saia por um ou pelo outro Link.
Citação:
/ip firewall mangle
add action=add-dst-to-address-list address-list=ftp_con address-list-timeout=6h chain=prerouting comment="FTP FORA DO BALANCE" disabled=no dst-port=21 in-interface=Eth5 protocol=tcp
add action=accept chain=prerouting disabled=no dst-address-list=ftp_con in-interface=Eth5
A regra acima evita problema com servidores FTP.
Citação:
/ip firewall mangle
add action=accept chain=prerouting comment="OUTRAS PORTAS FORA DO LOADBALACED" disabled=no dst-port=443,5000-6999,8080 in-interface=Eth5 protocol=tcp
add action=accept chain=prerouting disabled=no dst-port=443,5000-6999,8080 in-interface=Eth5 protocol=udp
A regra acima retira outras portas do Balance.
Citação:
/ip firewall mangle
add action=accept chain=prerouting comment="ACEITA REDE" disabled=no dst-address=192.168.30.0/24 in-interface=Eth5
add action=accept chain=prerouting disabled=no dst-address=192.168.31.0/24 in-interface=Eth5
A Regra acima aceita a conexão de cada Link.
Citação:
/ip firewall mangle
add action=mark-connection chain=prerouting comment="MARCA CONEXAO ENTRADA PARA VOLTAR PELO MESMO LINK" connection-state=new disabled=no in-interface=Eth4 new-connection-mark=Eth4_conn passthrough=yes
add action=mark-connection chain=prerouting connection-state=new disabled=no in-interface=Eth3 new-connection-mark=Eth3_conn passthrough=yes
add action=mark-routing chain=output connection-mark=Eth4_conn disabled=no new-routing-mark=to_Eth4 passthrough=yes
add action=mark-routing chain=output connection-mark=Eth3_conn disabled=no new-routing-mark=to_Eth3 passthrough=yes
A regra acima marca a conexão de entrada do link para que ele volte pelo mesmo Link.
Citação:
/ip firewall mangle
add action=mark-connection chain=prerouting comment="BALANCEANDO CONEXAO" connection-state=established disabled=no dst-address-type=!local in-interface=Eth5 new-connection-mark=Eth4_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:2/0
add action=mark-connection chain=prerouting connection-state=established disabled=no dst-address-type=!local in-interface=Eth5 new-connection-mark=Eth3_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:2/1
A Regra acima é responsável pelo balanceamento. Como os dois links tem o mesmo peso, então criamos apenas 2 regra.
Caso Um link tenha peso maior, então precisa ter 1 regra a mais para esse Link.
Citação:
/ip firewall mangle
add action=mark-routing chain=prerouting comment="DIRECIONA MARCACAO PARA ROTEAMENTO" connection-mark=Eth4_conn disabled=no in-interface=Eth5 new-routing-mark=to_Eth4 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=Eth3_conn disabled=no in-interface=Eth5 new-routing-mark=to_Eth3 passthrough=yes
A regra acima direciona a marcação para cada Link.
EXPLICAÇÃO DAS REGRAS /IP ROUTE
Aqui vem o pulo de Gato.
Antes de explicar a Regra, temos que entender 3 coisas:
1 - IP para Teste (a sua escolha).
- Para o Link 1, eu configurei um dos IP do OpenDNS (208.67.222.222) e o site do Terra (200.154.56.80).
- Para o Link 2, eu configurei o outro IP do OpenDNS (208.67.220.220) e o site do Registrobr (200.160.2.3)
2 - Criar um Gateway Falso (Fake) (a sua escolha).
- Para o Link 1, eu decidi que o Gateway Falso seria 192.168.56.1
- Para o Link 2, eu decidi que o Gateway Falso seria 192.168.57.1
3 - E finalmente, o Gateway Verdadeiro (veja a faixa de IP de cada link).
- Para o Link 1, Gateway Verdadeiro é 192.168.30.1
- Para o Link 2, Gateway Verdadeiro é 192.168.31.1
Então vamos lá.
Citação:
/ip route
add disabled=no distance=1 dst-address=200.154.56.80/32 gateway=192.168.30.1 scope=10 target-scope=10
add disabled=no distance=1 dst-address=208.67.222.222/32 gateway=192.168.30.1 scope=10 target-scope=10
add disabled=no distance=1 dst-address=200.160.2.3/32 gateway=192.168.31.1 scope=10 target-scope=10
add disabled=no distance=1 dst-address=208.67.220.220/32 gateway=192.168.31.1 scope=10 target-scope=10
A Regra diz por qual Link cada IP de teste deverá sair.
Ele irá testar um IP, senão tiver sucesso irá testar o outro IP, se também não tiver sucesso só então irá derrubar a conexão.
Citação:
/ip route
add check-gateway=ping disabled=no distance=1 dst-address=192.168.56.1/32 gateway=208.67.220.220 scope=10 target-scope=10
add check-gateway=ping disabled=no distance=1 dst-address=192.168.56.1/32 gateway=200.160.2.3 scope=10 target-scope=10
add check-gateway=ping disabled=no distance=1 dst-address=192.168.57.1/32 gateway=208.67.222.222 scope=10 target-scope=10
add check-gateway=ping disabled=no distance=1 dst-address=192.168.57.1/32 gateway=200.154.56.80 scope=10 target-scope=10
A Regra acima cria um destino Virtual.
As duas primeiras direcionam os IPs de teste para o Gateway Falso do Link 1 (192.168.56.1/32)
As duas outras direcionam os outros IPs de teste para o Gateway Falso do Link 2 (192.168.57.1/32)
Citação:
/ip route
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.56.1 routing-mark=Rota0 scope=30 target-scope=10
add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=192.168.57.1 routing-mark=Rota0 scope=30 target-scope=10
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.57.1 routing-mark=Rota1 scope=30 target-scope=10
add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=192.168.56.1 routing-mark=Rota1 scope=30 target-scope=10
As Regras acima criam a rota de saída dos IPs que foram marcados no firewall (address-list) para sair por um ou outro Link.
Citação:
/ip route
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.56.1 routing-mark=to_Eth3 scope=30 target-scope=10
add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=192.168.57.1 routing-mark=to_Eth3 scope=30 target-scope=10
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.57.1 routing-mark=to_Eth4 scope=30 target-scope=10
add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=192.168.56.1 routing-mark=to_Eth4 scope=30 target-scope=10
As regras acima criam as rotas de saída da marcação do Balanceamento.
Citação:
/ip route
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.56.1 scope=30 target-scope=10
add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=192.168.57.1 scope=30 target-scope=10
As regras acima é do Default Route, para aqueles que foram configurados no Firewall para sair por Fora do Balance.
Citação:
/ip route
add disabled=no distance=20 dst-address=200.154.56.80/32 type=blackhole
add disabled=no distance=20 dst-address=200.160.2.3/32 type=blackhole
add disabled=no distance=20 dst-address=208.67.220.220/32 type=blackhole
add disabled=no distance=20 dst-address=208.67.222.222/32 type=blackhole
As regras acima corrigi um bug em algumas versões do Mikrotik.
Quando um link caia, após retornar, as Rotas não eram recalculadas e todo o trafego continuava saindo por um unico Link.
Com essas regras tudo é recalculado corretamente.
Re: Balance PCC com Failover Avançado (Sem Script)
Muito Bom ! ! !
Valew pela Contribuição amigo, já me tirou muitas duvidas aqui !
Re: Balance PCC com Failover Avançado (Sem Script)
Muito bom! Parabéns pela ótima iniciativa, vai ser de grande ajuda p/ muitos aqui no fórum.
Tenho uma pergunta: no caso do exemplo postado, o cenário é c/ modems roteados, correto ?
O que mudaria (além de não precisar adicionar IPs no IP>Address), se os modems estiverem em bridge ?
Abraço.
Re: Balance PCC com Failover Avançado (Sem Script)
Citação:
Citação:
Postado originalmente por
FabianoMartins2
Muito bom! Parabéns pela ótima iniciativa, vai ser de grande ajuda p/ muitos aqui no fórum.
Tenho uma pergunta: no caso do exemplo postado, o cenário é c/ modems roteados, correto ?
O que mudaria (além de não precisar adicionar IPs no IP>Address), se os modems estiverem em bridge ?
Abraço.
Citação:
Postado originalmente por
Arthur Bernardes
Criar uma interface "PPPoE-Client" e nas configurações do balance, onde se define as interfaces cabeadas dos modens, defina as interfaces "PPPoE-Client".
Olha, em parte o Arthur está certo.
Basicamente nas regras de firewall basta alterar para a interface do PPoE.
Contudo, em IP Route fica um pouco complicado fazer esse Failover.
Em um breve teste, não foi possível criar um Gateway Fake em cima do PPoE, ele precisa de um IP para isso.
Mas vou fazer mais testes.
Quem sabe, adicionando um IP no mikrotik, direcionando esse IP para o PPoE... e depois criar um Gateway Fake em cima do IP criado.