Mostrando entradas con la etiqueta mangle. Mostrar todas las entradas
Mostrando entradas con la etiqueta mangle. Mostrar todas las entradas

miércoles, 12 de septiembre de 2018

Mikrotik, queue tree basado en L7

En entradas anteriores compartí distintas formas de regular el tráfico a traves de queue simple y queue tree.
Ahora, experimentando con un nuevo router, el ccr 1009 (creedence) encontré este script para la versión 6 de ROS basado en Layer 7.

Como se puede observar, definir las reglas de layer 7 es a primera vista algo sencillo, sin embargo hay que comprobar luego que estas funcionen de acuerdo a nuestras necesidades.
Por el momento yo dejé el script tal como lo programó el autor y estoy monitoreando el tráfico observando la actividad en cada una de las ramas del queue tree.
Solo faltaría agregar una rama más que le dé baja prioridad al resto del tráfico desconocido.

El tráfico considerado es el siguiente:


VoIP
VPN
Tráfico de juegos (red xbox, red PS Wii, WoW, LoL, etc.)
Transmisión de video (netflix, youtube, etc.)
Navegación Http (conexiones de menos de 5 MB)
Protocolos de administración (ssh, telnet, etc.)
Servicios de administración (DNS, ICMP, etc.)
Todo lo que sobra se considera basura y lucha por lo que queda.



Agregamos dos clases nuevas de queue:
 /queue type
add kind=pfifo name=streaming-video-in pfifo-limit=500
add kind=pcq name=games-in-pcq pcq-classifier=dst-address \
    pcq-dst-address6-mask=64 pcq-rate=100k pcq-src-address6-mask=64 \
    pcq-total-limit=750000KiB
 creamos los filtros regex según nuestras necesidades:
/ip firewall layer7-protocol
add name=speedtest-servers regexp="^.*(get|GET).+speedtest.*\$"
add name=torrent-wwws regexp="^.*(get|GET).+(torrent|thepiratebay|isohunt|ente\
    rtane|demonoid|btjunkie|mininova|flixflux|vertor|h33t|zoozle|bitnova|bitso\
    up|meganova|fulldls|btbot|fenopy|gpirate|commonbits).*\$"
add name=torrent-dns regexp="^.+(torrent|thepiratebay|isohunt|entertane|demono\
    id|btjunkie|mininova|flixflux|vertor|h33t|zoozle|bitnova|bitsoup|meganova|\
    fulldls|btbot|fenopy|gpirate|commonbits).*\$"
add name=netflix regexp="^.*(get|GET).+(netflix).*\$"
add name=mp4 regexp="^.*(get|GET).+\\.mp4.*\$"
add name=swf regexp="^.*(get|GET).+\\.swf.*\$"
add name=flv regexp="^.*(get|GET).+\\.flv.*\$"
add name=video regexp="^.*(get|GET).+(\\.flv|\\.mp4|netflix|\\.swf).*\$"
Creamos las listas de direcciones de la salida a Internet y la red interna:
 /ip firewall address-list
add address=192.168.0.0/16 list=internal-nets
add address=138.121.228.0/24 list=external-nets
add address=192.168.254.90 comment="cliente 1" list=customer-servers
 creamos las reglas del firewall para marcar el tráfico conocido:
/ip firewall mangle
add action=mark-packet chain=prerouting comment=\
    "internal-traffic packet mark" dst-address-list=internal-nets \
    new-packet-mark=internal-traffic passthrough=no src-address-list=\
    internal-nets
add action=mark-packet chain=prerouting comment=\
    "customer-servers-out packet mark" new-packet-mark=customer-servers-out \
    passthrough=no src-address-list=customer-servers
add action=mark-packet chain=prerouting comment=\
    "customer-servers-in packet mark" dst-address-list=customer-servers \
    new-packet-mark=customer-servers-in passthrough=no
add action=mark-packet chain=prerouting comment="admin-in packet mark DNS" \
    in-interface=!ISP new-packet-mark=admin-in passthrough=no protocol=udp \
    src-port=53
add action=mark-packet chain=prerouting comment="admin-in packet mark snmp" \
    dst-port=161 in-interface=ISP new-packet-mark=admin-in passthrough=no \
    protocol=udp
add action=mark-connection chain=prerouting comment=\
    "Remote Protocols admin connection mark" new-connection-mark=admin port=\
    20,21,22,23,3389,8291 protocol=tcp
add action=mark-connection chain=prerouting comment=\
    "icmp connection mark as admin" new-connection-mark=admin protocol=icmp \
    src-address-list=internal-nets
add action=mark-packet chain=prerouting comment="admin-in packet mark" \
    connection-mark=admin in-interface=ISP new-packet-mark=admin-in \
    passthrough=no
add action=mark-packet chain=prerouting comment="admin-out packet mark" \
    connection-mark=admin new-packet-mark=admin-out passthrough=no
add action=mark-connection chain=prerouting comment=\
    "streaming video connection mark" dst-port=80 layer7-protocol=video \
    new-connection-mark=streaming-video protocol=tcp src-address-list=\
    internal-nets
add action=mark-packet chain=prerouting comment=\
    "streaming video in packet mark" connection-mark=streaming-video \
    in-interface=ISP new-packet-mark=streaming-video-in passthrough=no
add action=mark-packet chain=prerouting comment=\
    "streaming video out packet mark" connection-mark=streaming-video \
    new-packet-mark=streaming-video-out passthrough=no
add action=mark-connection chain=prerouting comment=\
    "http traffic connection mark" dst-port=80,443 new-connection-mark=http \
    protocol=tcp src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "http traffic connection mark" connection-bytes=5000000-4294967295 \
    dst-port=80,443 new-connection-mark=http-download protocol=tcp \
    src-address-list=internal-nets
add action=mark-packet chain=prerouting comment="http in packet mark" \
    connection-mark=http in-interface=ISP new-packet-mark=http-in \
    passthrough=no
add action=mark-packet chain=prerouting comment="http out packet mark" \
    connection-mark=http new-packet-mark=http-out passthrough=no
add action=mark-connection chain=prerouting comment=\
    "wow connetion mark as gaming" dst-port=\
    1119,3724,6112-6114,4000,6881-6999 new-connection-mark=games protocol=tcp \
    src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "eve online connetion mark as gaming" dst-address=87.237.38.200 \
    new-connection-mark=games src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "starcraft 2 connetion mark as gaming" dst-port=1119 new-connection-mark=\
    games protocol=tcp src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "heros of newerth connetion mark as gaming" dst-port=11031,11235-11335 \
    new-connection-mark=games protocol=tcp src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "steam connetion mark as gaming" dst-port=27014-27050 \
    new-connection-mark=games protocol=tcp src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "xbox live connetion mark as gaming" dst-port=3074 new-connection-mark=\
    games protocol=tcp src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "ps3 online connetion mark as gaming" dst-port=5223 new-connection-mark=\
    games protocol=tcp src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "wii online connetion mark as gaming" dst-port=28910,29900,29901,29920 \
    new-connection-mark=games protocol=tcp src-address-list=internal-nets
add action=mark-packet chain=prerouting comment=\
    "games packet mark forever-saken-game" dst-address-list=external-nets \
    new-packet-mark=games-in passthrough=no src-address-list=\
    forever-saken-game
add action=mark-packet chain=prerouting comment="games packet mark wow" \
    dst-address-list=external-nets new-packet-mark=games-in passthrough=no \
    protocol=udp src-port=53,3724
add action=mark-packet chain=prerouting comment=\
    "games packet mark starcraft2" dst-address-list=external-nets \
    new-packet-mark=games-in passthrough=no protocol=udp src-port=1119,6113
add action=mark-packet chain=prerouting comment="games packet mark HoN" \
    dst-address-list=external-nets new-packet-mark=games-in passthrough=no \
    protocol=udp src-port=11031,11235-11335
add action=mark-packet chain=prerouting comment="games packet mark steam in" \
    dst-address-list=external-nets new-packet-mark=games-in passthrough=no \
    port=4380,28960,27000-27030 protocol=udp
add action=mark-packet chain=prerouting comment="games packet mark steam out" \
    dst-port=53,1500,3005,3101,3478,4379-4380,4380,28960,27000-27030,28960 \
    new-packet-mark=games-out passthrough=no protocol=udp src-address-list=\
    internal-nets
add action=mark-packet chain=prerouting comment="games packet mark xbox live" \
    dst-address-list=external-nets new-packet-mark=games-in passthrough=no \
    protocol=udp src-port=88,3074,3544,4500
add action=mark-packet chain=prerouting comment=\
    "games packet mark ps3 online" dst-address-list=external-nets \
    new-packet-mark=games-in passthrough=no protocol=udp src-port=\
    3478,3479,3658
add action=mark-packet chain=prerouting comment="games packet mark in" \
    connection-mark=games dst-address-list=external-nets new-packet-mark=\
    games-in passthrough=no
add action=mark-packet chain=prerouting comment="games packet mark out" \
    connection-mark=games new-packet-mark=games-out passthrough=no
add action=mark-packet chain=prerouting comment=\
    "voip-in packet mark teamspeak" dst-address-list=external-nets \
    new-packet-mark=voip-in passthrough=no protocol=udp src-port=9987
add action=mark-packet chain=prerouting comment=\
    "voip-out packet mark teamspeak" dst-port=9987 new-packet-mark=voip-out \
    passthrough=no protocol=udp src-address-list=internal-nets
add action=mark-packet chain=prerouting comment=\
    "voip-out packet mark teamspeak" dst-address-list=external-nets \
    new-packet-mark=voip-in passthrough=no protocol=udp src-port=9987
add action=mark-packet chain=prerouting comment=\
    "voip-in packet mark ventrilo" dst-address-list=external-nets \
    new-packet-mark=voip-in passthrough=no protocol=udp src-port=3784
add action=mark-packet chain=prerouting comment=\
    "voip-out packet mark ventrilo" dst-port=3784 new-packet-mark=voip-out \
    passthrough=no protocol=udp src-address-list=internal-nets
add action=mark-packet chain=prerouting comment=\
    "voip-in packet mark ventrilo" dst-address-list=external-nets \
    new-packet-mark=voip-in passthrough=no protocol=tcp src-port=3784
add action=mark-packet chain=prerouting comment=\
    "voip-out packet mark ventrilo" dst-port=3784 new-packet-mark=voip-out \
    passthrough=no protocol=tcp src-address-list=internal-nets
add action=mark-packet chain=prerouting comment="voip-in packet mark SIP" \
    dst-address-list=internal-nets new-packet-mark=voip-in passthrough=no \
    port=5060 protocol=tcp
add action=mark-packet chain=prerouting comment="voip-out packet mark SIP" \
    new-packet-mark=voip-out passthrough=no port=5060 protocol=tcp \
    src-address-list=internal-nets
add action=mark-packet chain=prerouting comment="voip-in packet mark udp SIP" \
    dst-address-list=internal-nets new-packet-mark=voip-in passthrough=no \
    port=5004,5060 protocol=udp
add action=mark-packet chain=prerouting comment=\
    "voip-out packet mark udp SIP" new-packet-mark=voip-out passthrough=no \
    port=5004,5060 protocol=udp src-address-list=internal-nets
add action=mark-packet chain=prerouting comment="voip-in packet mark RTP" \
    dst-address-list=internal-nets new-packet-mark=voip-in packet-size=\
    100-400 passthrough=no port=16348-32768 protocol=udp
add action=mark-packet chain=prerouting comment="voip-out packet mark RTP" \
    new-packet-mark=voip-in packet-size=100-400 passthrough=no port=\
    16348-32768 protocol=udp src-address-list=internal-nets
add action=mark-packet chain=prerouting comment="vpn-in packet mark GRE" \
    in-interface=ISP new-packet-mark=vpn-in passthrough=no protocol=gre
add action=mark-packet chain=prerouting comment="vpn-out packet mark GRE" \
    new-packet-mark=vpn-out passthrough=no protocol=gre
add action=mark-packet chain=prerouting comment="vpn-in packet mark ESP" \
    in-interface=ISP new-packet-mark=vpn-in passthrough=no protocol=ipsec-esp
add action=mark-packet chain=prerouting comment="vpn-out packet mark ESP" \
    new-packet-mark=vpn-out passthrough=no protocol=ipsec-esp
add action=mark-packet chain=prerouting comment=\
    "vpn-in packet mark VPN UDP ports" in-interface=ISP new-packet-mark=\
    vpn-in passthrough=no protocol=udp src-port=500,1701,4500
add action=mark-packet chain=prerouting comment=\
    "vpn-out packet mark VPN UDP ports" new-packet-mark=vpn-out passthrough=\
    no protocol=udp src-port=500,1701,4500
add action=mark-packet chain=prerouting comment="vpn-in packet mark PPTP" \
    in-interface=ISP new-packet-mark=vpn-in passthrough=no protocol=tcp \
    src-port=1723
add action=mark-packet chain=prerouting comment="vpn-out packet mark PPTP" \
    new-packet-mark=vpn-out passthrough=no protocol=tcp src-port=1723
add action=mark-packet chain=prerouting comment="all in" in-interface=ISP \
    new-packet-mark=in passthrough=no
add action=mark-packet chain=prerouting comment="all out" new-packet-mark=out \
    passthrough=no
 Finalmente creamos el queue tree:
/queue tree
add max-limit=10M name=in parent=global
add max-limit=10M name=out parent=global
add limit-at=3M max-limit=10M name=http-in packet-mark=http-in parent=in \
    priority=4 queue=default
add limit-at=4M max-limit=10M name=streaming-In packet-mark=\
    streaming-video-in parent=in priority=3 queue=streaming-video-in
add limit-at=500k max-limit=10M name=gaming-in packet-mark=games-in parent=in \
    priority=2 queue=games-in-pcq
add max-limit=10M name=download-in packet-mark=in parent=in queue=default
add max-limit=10M name=upload-out packet-mark=out parent=out queue=default
add limit-at=500k max-limit=10M name=gaming-out packet-mark=games-out parent=\
    out priority=2 queue=default
add limit-at=3M max-limit=10M name=http-out packet-mark=http-out parent=out \
    priority=4 queue=default
add limit-at=4M max-limit=10M name=streaming-Out packet-mark=\
    streaming-video-out parent=out priority=3 queue=default
add limit-at=1M max-limit=10M name=Clientes-In packet-mark=\
    customer-servers-in parent=in priority=1 queue=default
add limit-at=1M max-limit=10M name=Clientes-Out packet-mark=\
    customer-servers-out parent=out priority=1 queue=default
add limit-at=500k max-limit=10M name=voip-in packet-mark=voip-in parent=in \
    priority=1 queue=default
add limit-at=500k max-limit=10M name=vpn-in packet-mark=vpn-in parent=in \
    priority=2 queue=default
add limit-at=500k max-limit=10M name=voip-out packet-mark=voip-out parent=out \
    priority=1 queue=default
add limit-at=500k max-limit=10M name=vpn-out packet-mark=vpn-out parent=out \
    priority=2 queue=default
add limit-at=500k max-limit=10M name=admin-in packet-mark=admin-in parent=in \
    priority=1 queue=default
add limit-at=500k max-limit=10M name=admin-out packet-mark=admin-out parent=\
    out priority=1 queue=default

Aqui se puede observar un exceso en el trafico marcado como descargas:

 alarma en el tráfico http:

Tráfico total:

Fuente: http://gregsowell.com/?p=4665

lunes, 25 de junio de 2012

SEQUREISP ¿el Mejor Software de Gestión de ISPs?


SequreISP es un software de gestión de ISP (Proveedores de Servicios de Internet).
El software permite gestionar el acceso a Internet garantizando calidad de servicio para los clientes
y maximizando la rentabilidad para el proveedor.



https://github.com/sequre/sequreisp


sequreisp

sequreisp is an ISP management software.
  • Has a really nice and powerful web interface
  • Can handle up to 3000 or more clients in a single server, thus it is oriented to small/medium ISPs
  • Can group multiple internet providers and do load balancing and failover between them (current record is 32 DSL lines balanced in a single server)
  • Supports all kind of internet providers, dedicated, DSL lines, cable-modem, etc.
  • Does a meticulous bandwidth control and traffic prioritization
    • Allows to set maximum and minimum(guaranteed) for download/upload traffic
    • Efficiently detects P2P traffic and allows to set a maximum as a percent of client’s bandwidth
    • Prioritization can be customized even to a per client basis
  • Integrates with Squid proxy to do transparent web cache(optional)
  • Has a plug-in interface, you can write your custom functionality in top of sequreisp
  • It is written in Ruby on Rails
  • And a lot more
    • Instant and historical graphs
    • Backup & restore from the web interface with a single and lightweight file
    • Port forwarding, full DNAT, and proxy ARP to clients
    • VLAN support
    • E-mail notifications
    • Role based authentication, with audit system
    • Multilingual support (currently Spanish and English, contributions are welcome)

Demo

There is an online demo of the application available
Url: http://demo.sequreisp.com/
User: admin@sequre.com.ar
Pass: 1234

jueves, 3 de mayo de 2012

Balanceo de carga, Router Mikrotik, Load balancing


Introducción
El manejo del ancho de banda es una parte escencial del trabajo diario de todo ISP, usuario comercial o doméstico. Hay varias formas diferentes de hacer esto con el RouterOS Mikrotik ya sea usando QoS, Limite de tasa de transferencia, limite de paquetes, solo por nombrar algunos En lo personal, el autor del presente, es administrador de un ISP que presta servicio inalámbrico en una zona donde no hay otro proveedor de conexiones de banda ancha (Ej.: Cable, Fibra, ADSL, etc). El autor se encuentra con el problema de que su mas rápida conexión troncal no le provee suficiente ancho de banda como para tener un solo vínculo contra internet. Como consecuencia de esta limitación el balanceo de carga es sumamente importante para el (y para el traductor del presente!) En el pasado el autor utilizó ECMP, conexion con mantenimiento persistente de la puerta de enlace (para mas datos veahttp://wiki.mikrotik.com/wiki/Load_Balancing) como algunos otros métodos. Como era de esperar, el autor encontró muchos problemas de retardos (entre otros), no se balanceaba correctamente, se cortaban las descargas largas, problemas con los mensajeros instantáneos (MSN, Yahoo, etc) son solo algunos. Asi que el autor se dedicó a investigar como obtener un mayor control de su ancho de banda tratando de minimizar los potenciales problemas (al igual que el traductor!). El resultado fué el balanceo de carga en función del tráfico que se presenta. Este tutorial esta escrito para tratar este tema en forma específica y lo mas profunda posible, en un futuro el autor agregará información sobre resistencia a fallas de enlace (fail over) y QoS (y este traductor traducirá!)
(n del t: algunos términos son dejados en ingles a fin de facilitar su ubicación entre los comandos del RouterOS)

Funciones del RouteOS Utilizadas aquí

  • Firewall mangle rules
  • Firewall address-lists
  • Routing

Paso 1 - Cómo separar el tráfico?

Antes de ingresar a su RouteOS WinBox ya debe tener una idea aproximada de como separar su tráfico, y debe entender que trafico puede separarse y cual no.
Aquí tiene un ejemplo de que tráfico es separable (sin orden en particular):
  • HTTP tráfico (port 80)
  • SSL tráfico (port 443)
  • POP3 tráfico (port 110)
  • SMTP tráfico (port 25)
  • P2P tráfico (varios puertos)
  • Unknown tráfico (varios puertos)
Despues de hacer una lista del tipo de tráfico, y de los puertos en que estos trabajan, deberíamos revisar la lista y decidir si este tráfico puede ser forzado a salir por una determinada conexión a internet.
usando la lista anterior como ejemplo aquí es lo que vemos:
  • HTTP tráfico (sin impedimentos conocidos)(n de t: si conocen alguno, avisen!)
  • SSL tráfico (algunos problemas, para los sitios SSL normales y el 90% de todo el software no es un problema, luego veremos por que pueden surgir)
  • POP3 tráfico (sin impedimentos conocidos)
  • SMTP tráfico (sin impedimentos conocidos)
  • P2P tráfico (el p2p debe salir siempre por la misma conexión como tráfico desconocido, luego veremos por que)(n del t: aquí se usa "desconocido" como "sin catalogar")
  • desconocido tráfico (debe salir por la misma conexión y nombrado como P2P, mas adelante se explica el motivo)
Ahora para una explicación rápida de como pueden surgir algunos problemas dependiendo del tipo de tráfico. Algunos programas o sitios web no se llevan bien con los múltiples conexiones desde direcciones IP diferentes, esta es la razón por la que ECMP tiene varios problemas. El autor proporciona una solución simple para los casos particulares y aislados en los que a alguno de nuestros usuarios el balanceo de carga les resulte un estorbo.
De nuevo y usando el ejemplo anterior, veremos un problema que puede surgir.
SSL - Lo bello de un sitio web es que utiliza peticiones separadas para cada tipo de datos, ej.: cargar 3 fotos diferentes de 3 fuentes diferentes con requerimientos a cada uno de los respectivos servers. El resultado es que tenemos un sitio web que usa SSL y HTTP, conocemos que en la mayoría de los casos los servidores web contestan la petición sin ocuparse de la dirección IP origen del server. No obstante, en este tipo especial de sitio web, el programador/diseñador "revisa" desde "que dirección IP" se originó el pedido y si encuentra diferencias entonces no completará la respuesta (esto puede ser accidental o a propósito). El autor tuvo 2 casos así, en ambos casos fueron sitios médicos con seguridad para los datos de esas empresas.
P2P y desconocido - Manejamos este tráfico junto por que este es un problema único. El RouterOS no puede identificar el P2P en una condición simple, pero, a cambio, analiza paquetes!, esto quiere decir que el RouterOS necesita tiempo para ver los datos ANTES y saber si es en efecto P2P. Como resultado RouterOS no sabe si tiene un paquete P2P hasta DESPUES que la conexión está establecida. Esto es importante por que la única manera de enviar este tráfico a una determinada conexión a internet es conociendo el tráfico ANTES de que el mismo establezca una conexión de salida, el tráfico desconocido es eso, "desconocido". Marcándolo como tal se puede definir por que conexión saldrá y se puede especificar que enlace se usa para P2P y el trafico "en general" (muy útil!)

Paso 2 - Configurando la red

Para empezar a desarrollar este tutorial, necesitamos una red ficticia que usaremos como ejemplo
  • Computadoras Cliente (172.18.1.0/24)
  • Internet Gateways (10.0.1.1/24, 10 0.2.1/24)
  • RouterOS IPs (10.0.1.2/24, 10.0.2.2/24)

Asumimos que las direcciones IP, rutas por defecto y DNS ya estan correctamente configurados para que los usuarios tengan acceso a internet
Creamos una Address-List que permita la salida de nuestros usuarios a internet
/ ip firewall address-list
add list="Allowed - Internet" address=172.18.1.0/24 comment="" disabled=no
Creamos una Address-List para aquellos usuarios que necesitan saltarse el balanceo

/ ip firewall address-list
add list="WAN-01" address=172.18.1.24/32 comment="" disabled=no
add list="WAN-02" address=172.18.1.76/32 comment="" disabled=no
Aplicamos 'Masquerading'al tráfico a cada conexión a internet
/ ip firewall nat 
add chain=srcnat action=masquerade out-interface="WAN - 01" src-address-list="Allowed - Internet" comment="Gateway 10.0.1.1/24" disabled=no 
add chain=srcnat action=masquerade out-interface="WAN - 02" src-address-list="Allowed - Internet" comment="Gateway 10.0.2.1/24" disabled=no
Los clientes deben poder navegar la internet, sin embargo una sola conexión a internet será usada (la que esté declarada en la default route)

Paso 3 - Usando la herramienta MANGLE en RouterOS's marcamos el tráfico específico

Lo que sigue son los comandos necesarios del RouterOS para marcar el tráfico en particular por una determinada ruta. Para esto se usa la misma tabla de trafico mostrada en el ejemplo
/ ip firewall mangle 
add chain=prerouting action=mark-routing new-routing-mark="WAN-01" src-address-list="WAN-01" passthrough=no comment="" disabled=no 
add chain=prerouting action=mark-routing new-routing-mark="WAN-02" src-address-list="WAN-02" passthrough=no comment="" disabled=no 
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="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 
Las primeras dos lineas, nos dejan un método para que puedan salir aquellos clientes que no puedan salir por el balanceo de carga y necesiten una conexión determinada. Las líneas que siguen, 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. El autor tambien marca el p2p separado para que pueda salir por la misma conexión a internet como si fuera desconocido. Hace esto por algunas buenas razones, una es que puede detener TODO el p2p con solo deshabilitar la ruta de salida y otra es que para su RouterOS es usa QoS que es muy sencillo de recordar como esta configurado Asi ahora vamos a poner cada tráfico en su respectiva ruta, lo que sigue se agrega a las rutas actuales

Paso 4 - Usando la función de ruteo para forzar el tráfico por una determinada conexión

Lo que sigue son los comandos necesarios para agregar las rutas al RouterOS para los paquetes marcados como HTTP, SSL, POP3, SMTP, P2P, y desconocido
/ ip route 
add dst-address=0.0.0.0/0 gateway=10.0.1.1 scope=255 target-scope=10 routing-mark="WAN-01" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.2.1 scope=255 target-scope=10 routing-mark="WAN-02" comment="" disabled=no
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="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
Las primeras dos lineas proveen la ruta de salida para los clientes que NO salen por balanceo de carga

Paso 5 - Revisión de lo que se hizo

Que fué lo que hizo?:
  • Usted inteligentemente separó su tráfico en diferentes tipos
  • Usted marcó paquetes usando la herramienta Mangle
  • Usted creó una lista especial para aquellos clientes que NO puedan salir por el balanceo de carga
  • Usted asignó una rura particular para cada paqueta marcado en el Mangle

Conclusión

Lo que acaba de hacer es muy potente y este tutorial le ha mostrado solo la punta del iceberg. Los tipos de tráfico que el autor listó son solo una pequeña cantidad del total y usted DEBERA agregar otros (ej: DNS, terminal services, ICMP, etc). Esto puede usarse como una solución tambien en oficinas o pequeños comercios para, por ejemplo separar el mail de su navegación a internet o, en una red grande inalámbrica para balancear carga. Algunos consejos al final:
  1. Piense lo que quiere hacer antes de comenzar
  2. Ponga atención en el tipo de tráfico en cada linea (si es entrante intensivo o saliente intensivo)
  3. Finalmente pruebe, nada mejor que encontrar mejores y mas rápidas e inteligentes formas de mejorar los servicios con muy pequeña inversión!