PDA

Ver la Versión Completa : Balanceo Carga ( dos ADSLs ) Muy Facil



Estopin
29/06/2010, 04:51
Hola

El siguiente mini tutorial muestra como configurar un balanceo de carga para dos ADSLs muy facil de implementar en Mikrotik.

Los comandos son escritos por consola,la intencion es el dividir las dos conexiones y sacar el trafico dependiendo de lo que nos interese por una puerta de enlace o por la otra.

Veamos entonces un ejemplo de como seria.

Trafico a controlar:

HTTP--- puerto 80
SSL --- puerto 443
POP3--- puerto 110
SMTP-- puerto 25
MSN --- puerto 1863
P2P Diferentes puertos
Trafico desconocido

Una vez tenemos definido el trafico a controlar empezaremos a crear las diferentes reglas.

Configurando la red:

Para empezar a desarrollar este tutorial, necesitamos una red ficticia que usaremos como ejemplo

* Ordenadores Clientes (172.18.1.0/24)
* Routeros IPs (10.0.1.2/24, 10.0.2.2/24) ADSL1 y ADSL2

Se asume que las direcciones IP, rutas por defecto y DNS ya estan correctamente configurados para que los usuarios tengan acceso a internet.

Se crean las primeras reglas de Masquerading al tráfico a cada conexión a internet

/ ip firewall nat
add chain=srcnat action=masquerade out-interface="ADSL1" comment="Gateway 10.0.1.1/24" disabled=no
add chain=srcnat action=masquerade out-interface="ADSL2" comment="Gateway 10.0.2.1/24" disabled=no

con estas dos reglas creadas los clientes ya pueden navegar en internet,en cambio una sola conexión a internet será usada (la que esté declarada en la default route)

Lo siguiente son las diferentes reglas necesarias de Routeros para marcar el tráfico en particular por una determinada ruta.

/ ip firewall mangle
add chain=prerouting action=mark-routing new-routing-mark="HTTP Trafico" passthrough=no dst-port=80 protocol=tcp comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="SSL Trafico" passthrough=no dst-port=443 protocol=tcp comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="POP3 Trafico" passthrough=no dst-port=110 protocol=tcp comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="SMTP Trafico" passthrough=no dst-port=25 protocol=tcp comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="MSN Trafico" passthrough=no dst-port=1863 protocol=tcp comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="P2P Trafico" passthrough=no p2p=all-p2p comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="Unknown Trafico" passthrough=no comment="" disabled=no

Estas líneas , con marca de tráfico basado en el puerto de destino, dicen que tráfico se marca y que tráfico se deja pasar aún si no lo conocemos, esto es siempre para diferentes conexiones a internet tanto si sabemos que es P2P como si no pudiendo salir tambien por la ruta por defecto,tambien se marca el p2p separado para que pueda salir por la misma conexión a internet como si fuera desconocido.

Se Hace esto por algunas buenas razones,y es que puede detener la mayoria del p2p con solo deshabilitar la ruta de salida.

Lo que sigue son los comandos necesarios para agregar las rutas al Routeros para los paquetes marcados como HTTP, SSL, POP3, SMTP, MSN, P2P, y trafico desconocido.

/ ip route
add dst-address=0.0.0.0/0 gateway=10.0.2.1 scope=255 target-scope=10 routing-mark="HTTP Trafico" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.2.1 scope=255 target-scope=10 routing-mark="SSL Trafico" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.2.1 scope=255 target-scope=10 routing-mark="POP3 Trafico" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.1.1 scope=255 target-scope=10 routing-mark="MSN Trafico" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.2.1 scope=255 target-scope=10 routing-mark="SMTP Trafico" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.1.1 scope=255 target-scope=10 routing-mark="P2P Trafico" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.1.1 scope=255 target-scope=10 routing-mark="Unknown Trafico" comment="" disabled=no

Estas reglas son las que definen usando la función de ruteo para forzar el tráfico por una determinada conexión.

Como veis es muy facil e intuitivo el configurar un routeros como balanceo de carga,en este caso para dos ADSLs,se pueden definir mas reglas en el mangle y asi tener mejor control de las conexiónes a diferentes aplicaciones o puertos.

Espero que sea de vuestro agrado este pequeño tutorial y le deis una buena utilidad.

Saludos :)

Zero13
29/06/2010, 11:21
Gracias Estopin!, muy util la guia.. chincheta al canto! :)

parreira13
08/08/2010, 23:28
Amigos boa noite aqui vai uma dica de um amigo do brasil

Balanceamento PCC de 2 a 16 links testado e aprovado

MKV: 3.x
MKR: 3.28

EthLinkA = Interface do primeiro link
EthLinkB = Interface do segundo link
EthLinkC = Interface do terceiro link
EthClientes = Interface dos clientes

Quando em modo roteado:
10.1.10.129 = Ip do modem A
10.1.10.161 = Ip do modem B
10.1.10.193 = Ip do modem C

Endereços das interfaces no Mikrotik ROS
10.1.10.130/27 = Ip da interface EthLinkA
10.1.10.162/27 = Ip da interface EthLinkB
10.1.10.194/27 = Ip da interface EthLinkC

================================================== ====================

Vamos as regras e explanações sobre o sistema PCC

Em mangle
add action=accept chain=prerouting comment="SEM BALANCE" disabled=no dst-address-list=sem_balance in-interface=EthClientes
esta primera regra aceita as conexões para todos os ips de destino que se encontrarem na lista 'sem_balance' que irão sair pela rota padrão

add action=mark-connection chain=input comment="" connection-state=new disabled=no in-interface=EthLinkA new-connection-mark=conn_na passthrough=yes
add action=mark-connection chain=input comment="" connection-state=new disabled=no in-interface=EthLinkB new-connection-mark=conn_nb passthrough=yes
add action=mark-connection chain=input comment="" connection-state=new disabled=no in-interface=EthLinkC new-connection-mark=conn_nc passthrough=yes
cria as marcas (conn_na, conn_nb, conn_nc) para novas conexões em cada uma das interfaces (EthLinkA, EthLinkB, EthLinkC)

add action=mark-routing chain=output comment="" connection-mark=conn_na disabled=no new-routing-mark=to_ra passthrough=no
add action=mark-routing chain=output comment="" connection-mark=conn_nb disabled=no new-routing-mark=to_rb passthrough=no
add action=mark-routing chain=output comment="" connection-mark=conn_nc disabled=no new-routing-mark=to_rc passthrough=no
utiliza as marcações (conn_na, conn_nb, conn_nc) para criar as marcações das respectivas rotas (to_ra, to_rb, to_rc)

add action=mark-connection chain=prerouting comment="" disabled=no dst-address-type=!local in-interface=EthClientes new-connection-mark=conn_ma0 passthrough=yes per-connection-classifier=both-addresses:3/0
add action=mark-connection chain=prerouting comment="" disabled=no dst-address-type=!local in-interface=EthClientes new-connection-mark=conn_mb1 passthrough=yes per-connection-classifier=both-addresses:3/1
add action=mark-connection chain=prerouting comment="" disabled=no dst-address-type=!local in-interface=EthClientes new-connection-mark=conn_mc2 passthrough=yes per-connection-classifier=both-addresses:3/2

agora utilizando os classificadores (0,1,2 e portanto são 3) na interface de clientes criamos novas marcas de conexão (conn_ma0, conn_mb1, conn_mc2), notem que se tivessemos 4 links seria aquie que fariamos as alterações para (0,1,2,3 e portanto são 4) ficando 4/0, 4/1, 4/2, 4/3 ou ainda se tivessemos links assimétricos onde por exemplo:

LinkX de 512k
LinkY de 1024k
LinkZ de 2048k

somariamos todos os links e dividiriamos pelo valor do menor link então teriamos 3584k/512k=7 então teriamos 7 marcações de pcc indo de 7/0 até 7/6 das quais devemos direcionar a primeira pro link X, a segunda e terceira pro link Y e as quatro restantes para o link Z fazendo nosso sistema perfeitamente equilibrado, vale resaltar que sistemas do tipo ADSL não garantem a banda e portanto devemos fazer testes em cada um dos links para aferir as velocidades possíveis em cada um, já vi muitos casos onde um link desse tipo de 2Mb era melhor do que o de 4Mb da mesma operadora instalada no mesmo local, também se deve criar as marcações para input e output.

add action=mark-routing chain=prerouting comment="" connection-mark=conn_ma0 disabled=no in-interface=EthClientes new-routing-mark=to_nra passthrough=no
add action=mark-routing chain=prerouting comment="" connection-mark=conn_mb1 disabled=no in-interface=EthClientes new-routing-mark=to_nrb passthrough=no
add action=mark-routing chain=prerouting comment="" connection-mark=conn_mc2 disabled=no in-interface=EthClientes new-routing-mark=to_nrc passthrough=no
utilizando das novas marcações (conn_ma0, conn_mb1, conn_mc2) criamos uma nova marcação de rota na interface de clientes como (to_nra, to_nrb, to_nrc)

================================================== ====================

Em nat
add action=masquerade chain=srcnat comment="MASCARAMENTO PCC" disabled=no out-interface=EthLinkA
add action=masquerade chain=srcnat comment="" disabled=no out-interface=EthLinkB
add action=masquerade chain=srcnat comment="" disabled=no out-interface=EthLinkC
vale resaltar que o mascaramento pode ser feito de várias formas, indicando por exempo o ip da interface em src-nat, pela range de ips dos clientes e pela interface do link como acima.

================================================== ====================

Em rotas
add comment="" disabled=no distance=2 dst-address=0.0.0.0/0 gateway=10.1.10.129 scope=30 target-scope=10
add comment="" disabled=no distance=3 dst-address=0.0.0.0/0 gateway=10.1.10.161 scope=30 target-scope=10
add comment="" disabled=no distance=4 dst-address=0.0.0.0/0 gateway=10.1.10.193 scope=30 target-scope=10
definimos 3 rotas padrão sendo que cada uma tem um custo diferente e portanto a primeira terá a preferencia, caso venha a faltar a segunda assume, em seguida a terceira

add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.1.10.129 routing-mark=to_nra scope=30 target-scope=10
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.1.10.161 routing-mark=to_nrc scope=30 target-scope=10
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.1.10.193 routing-mark=to_nrb scope=30 target-scope=10
em seguida todas as 3 rotas que utilizam marca de rotas (to_nra, to_nrb, to_nrc) dividem a carga que foi previamente marcada pelo mangle

================================================== ====================

Ainda é possível fazer com que o próprio Mikrotik ROS disque as conexões do tipo ADSL aumentando a eficiência do sistema (MODENS EM BRIDGE), sendo que neste caso é recomendado fazer o mascaramento por range de ips e não por interface e a indicação dos gateways por interface e não por ip, no caso de links dedicados é recomendável fazer a indicação do ip do gateway e não da interface.

Em nat
add action=masquerade chain=srcnat src-address=10.0.0.0/24 comment="MASCARAMENTO PCC" disabled=no

Em rotas
add comment="" disabled=no distance=2 dst-address=0.0.0.0/0 gateway=EthLinkA scope=30 target-scope=10
add comment="" disabled=no distance=3 dst-address=0.0.0.0/0 gateway=EthLinkB scope=30 target-scope=10
add comment="" disabled=no distance=4 dst-address=0.0.0.0/0 gateway=EthLinkC scope=30 target-scope=10
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=EthLinkA routing-mark=to_nra
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=EthLinkB routing-mark=to_nrb
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=EthLinkC routing-mark=to_nrc

================================================== ====================

Com relação ao usar o check ping, devemos tomar um certo cuidado pois links de diferentes tipos tendem a ter diferentes tempos de resposta ao ping e quando este método é utilizado pode ocorrer desigualdade entre os consumos dos links apesar de as marcações estarem corretas, isso porque o sistema leva em consideração o tempo de resposta de cada gateway.

================================================== ====================

Dica:
/system ntp client
set enabled=yes mode=unicast primary-ntp=a.ntp.br
set enabled=yes mode=unicast secondary-ntp=b.ntp.br
importante manter o relógio do seu sistema em sincronia com UTC para automação de tarefas e registro de logs.

================================================== ====================

parreira13
08/08/2010, 23:30
Amigos boa noite aqui vai uma dica de um amigo do brasil

Balanceamento PCC de 2 a 16 links testado e aprovado

MKV: 3.x
MKR: 3.28

EthLinkA = Interface do primeiro link
EthLinkB = Interface do segundo link
EthLinkC = Interface do terceiro link
EthClientes = Interface dos clientes

Quando em modo roteado:
10.1.10.129 = Ip do modem A
10.1.10.161 = Ip do modem B
10.1.10.193 = Ip do modem C

Endereços das interfaces no Mikrotik ROS
10.1.10.130/27 = Ip da interface EthLinkA
10.1.10.162/27 = Ip da interface EthLinkB
10.1.10.194/27 = Ip da interface EthLinkC

================================================== ====================

Vamos as regras e explanações sobre o sistema PCC

Em mangle
add action=accept chain=prerouting comment="SEM BALANCE" disabled=no dst-address-list=sem_balance in-interface=EthClientes
esta primera regra aceita as conexões para todos os ips de destino que se encontrarem na lista 'sem_balance' que irão sair pela rota padrão

add action=mark-connection chain=input comment="" connection-state=new disabled=no in-interface=EthLinkA new-connection-mark=conn_na passthrough=yes
add action=mark-connection chain=input comment="" connection-state=new disabled=no in-interface=EthLinkB new-connection-mark=conn_nb passthrough=yes
add action=mark-connection chain=input comment="" connection-state=new disabled=no in-interface=EthLinkC new-connection-mark=conn_nc passthrough=yes
cria as marcas (conn_na, conn_nb, conn_nc) para novas conexões em cada uma das interfaces (EthLinkA, EthLinkB, EthLinkC)

add action=mark-routing chain=output comment="" connection-mark=conn_na disabled=no new-routing-mark=to_ra passthrough=no
add action=mark-routing chain=output comment="" connection-mark=conn_nb disabled=no new-routing-mark=to_rb passthrough=no
add action=mark-routing chain=output comment="" connection-mark=conn_nc disabled=no new-routing-mark=to_rc passthrough=no
utiliza as marcações (conn_na, conn_nb, conn_nc) para criar as marcações das respectivas rotas (to_ra, to_rb, to_rc)

add action=mark-connection chain=prerouting comment="" disabled=no dst-address-type=!local in-interface=EthClientes new-connection-mark=conn_ma0 passthrough=yes per-connection-classifier=both-addresses:3/0
add action=mark-connection chain=prerouting comment="" disabled=no dst-address-type=!local in-interface=EthClientes new-connection-mark=conn_mb1 passthrough=yes per-connection-classifier=both-addresses:3/1
add action=mark-connection chain=prerouting comment="" disabled=no dst-address-type=!local in-interface=EthClientes new-connection-mark=conn_mc2 passthrough=yes per-connection-classifier=both-addresses:3/2

agora utilizando os classificadores (0,1,2 e portanto são 3) na interface de clientes criamos novas marcas de conexão (conn_ma0, conn_mb1, conn_mc2), notem que se tivessemos 4 links seria aquie que fariamos as alterações para (0,1,2,3 e portanto são 4) ficando 4/0, 4/1, 4/2, 4/3 ou ainda se tivessemos links assimétricos onde por exemplo:

LinkX de 512k
LinkY de 1024k
LinkZ de 2048k

somariamos todos os links e dividiriamos pelo valor do menor link então teriamos 3584k/512k=7 então teriamos 7 marcações de pcc indo de 7/0 até 7/6 das quais devemos direcionar a primeira pro link X, a segunda e terceira pro link Y e as quatro restantes para o link Z fazendo nosso sistema perfeitamente equilibrado, vale resaltar que sistemas do tipo ADSL não garantem a banda e portanto devemos fazer testes em cada um dos links para aferir as velocidades possíveis em cada um, já vi muitos casos onde um link desse tipo de 2Mb era melhor do que o de 4Mb da mesma operadora instalada no mesmo local, também se deve criar as marcações para input e output.

add action=mark-routing chain=prerouting comment="" connection-mark=conn_ma0 disabled=no in-interface=EthClientes new-routing-mark=to_nra passthrough=no
add action=mark-routing chain=prerouting comment="" connection-mark=conn_mb1 disabled=no in-interface=EthClientes new-routing-mark=to_nrb passthrough=no
add action=mark-routing chain=prerouting comment="" connection-mark=conn_mc2 disabled=no in-interface=EthClientes new-routing-mark=to_nrc passthrough=no
utilizando das novas marcações (conn_ma0, conn_mb1, conn_mc2) criamos uma nova marcação de rota na interface de clientes como (to_nra, to_nrb, to_nrc)

================================================== ====================

Em nat
add action=masquerade chain=srcnat comment="MASCARAMENTO PCC" disabled=no out-interface=EthLinkA
add action=masquerade chain=srcnat comment="" disabled=no out-interface=EthLinkB
add action=masquerade chain=srcnat comment="" disabled=no out-interface=EthLinkC
vale resaltar que o mascaramento pode ser feito de várias formas, indicando por exempo o ip da interface em src-nat, pela range de ips dos clientes e pela interface do link como acima.

================================================== ====================

Em rotas
add comment="" disabled=no distance=2 dst-address=0.0.0.0/0 gateway=10.1.10.129 scope=30 target-scope=10
add comment="" disabled=no distance=3 dst-address=0.0.0.0/0 gateway=10.1.10.161 scope=30 target-scope=10
add comment="" disabled=no distance=4 dst-address=0.0.0.0/0 gateway=10.1.10.193 scope=30 target-scope=10
definimos 3 rotas padrão sendo que cada uma tem um custo diferente e portanto a primeira terá a preferencia, caso venha a faltar a segunda assume, em seguida a terceira

add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.1.10.129 routing-mark=to_nra scope=30 target-scope=10
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.1.10.161 routing-mark=to_nrc scope=30 target-scope=10
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.1.10.193 routing-mark=to_nrb scope=30 target-scope=10
em seguida todas as 3 rotas que utilizam marca de rotas (to_nra, to_nrb, to_nrc) dividem a carga que foi previamente marcada pelo mangle

================================================== ====================

Ainda é possível fazer com que o próprio Mikrotik ROS disque as conexões do tipo ADSL aumentando a eficiência do sistema (MODENS EM BRIDGE), sendo que neste caso é recomendado fazer o mascaramento por range de ips e não por interface e a indicação dos gateways por interface e não por ip, no caso de links dedicados é recomendável fazer a indicação do ip do gateway e não da interface.

Em nat
add action=masquerade chain=srcnat src-address=10.0.0.0/24 comment="MASCARAMENTO PCC" disabled=no

Em rotas
add comment="" disabled=no distance=2 dst-address=0.0.0.0/0 gateway=EthLinkA scope=30 target-scope=10
add comment="" disabled=no distance=3 dst-address=0.0.0.0/0 gateway=EthLinkB scope=30 target-scope=10
add comment="" disabled=no distance=4 dst-address=0.0.0.0/0 gateway=EthLinkC scope=30 target-scope=10
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=EthLinkA routing-mark=to_nra
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=EthLinkB routing-mark=to_nrb
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=EthLinkC routing-mark=to_nrc

================================================== ====================

Com relação ao usar o check ping, devemos tomar um certo cuidado pois links de diferentes tipos tendem a ter diferentes tempos de resposta ao ping e quando este método é utilizado pode ocorrer desigualdade entre os consumos dos links apesar de as marcações estarem corretas, isso porque o sistema leva em consideração o tempo de resposta de cada gateway.

================================================== ====================

Dica:
/system ntp client
set enabled=yes mode=unicast primary-ntp=a.ntp.br
set enabled=yes mode=unicast secondary-ntp=b.ntp.br
importante manter o relógio do seu sistema em sincronia com UTC para automação de tarefas e registro de logs.

================================================== ====================

mjnavapo
20/09/2010, 19:19
Esto se podria montar en un RB750 ?
http://www.routerboard.com/pricelist.php?showProduct=56

Estopin
21/09/2010, 10:28
Esto se podria montar en un RB750 ?
http://www.routerboard.com/pricelist.php?showProduct=56

Hola

Si puedes implementar en esa RB el balanceador sin ningun problema,el unico problema que yo le veo es si vas a utilizarla para el control de muchas PCs que se queda corta de memoria RAM

saludos

mjnavapo
22/09/2010, 21:28
Muchas gracias Estopin

Sabes mas o menos hasta cuantos equipos puede dar servicio el RB750 sin que se quede corto ?? lo he estado buscando por google, a ver si hay alguna lista que diga que caracteristicas hace falta segun el numero de equipos, pero no veo nada.

Por cierto, que diferencia hay entre un RB450 ?? asi por lo alto parecen muy similares, misma velocidad (aunque diferente procesador), misma RAM... solo que el RB450 tiene puerto serie y no lleva caja y cuesta casi el doble.

Saludos.

Estopin
23/09/2010, 21:57
Muchas gracias Estopin

Sabes mas o menos hasta cuantos equipos puede dar servicio el RB750 sin que se quede corto ?? lo he estado buscando por google, a ver si hay alguna lista que diga que caracteristicas hace falta segun el numero de equipos, pero no veo nada.

Por cierto, que diferencia hay entre un RB450 ?? asi por lo alto parecen muy similares, misma velocidad (aunque diferente procesador), misma RAM... solo que el RB450 tiene puerto serie y no lleva caja y cuesta casi el doble.

Saludos.

Hola

La RB750 no tienes problemas para llevar 20 o 30 PCs esta placa tiene mas velocidad que la RB450 = 300Mhz RB750 = 400Mhz

De todas formas por un poco mas de dinero tienes la RB750G los puertos son Gigabit y un procesador de 680Mhz CPU y hasta 580Mbps de throughout, esta placa la he montado en un par de sitios y van de maravilla.

saludos

linuchero
18/10/2011, 07:24
Que tal, amigo Estopin que diferencia o ventajas tengo entre el balanceo que pusiste y el balanceo pcc? esque recien estoy empezando en mikrotik, y estoy vendiendo internet a varias instituciones y quisiera saber cual me conviene, mis lineas (ISP) son adsl y con ip publica dinamica. Espero tu ayuda, gracias