EdgeMAX - fresado con balanceo de carga WAN basada en políticas

Resumen


Los lectores aprenderán a realizar WAN equilibrio de carga para routers con múltiples puertos WAN designado.

El ejemplo utiliza conexión de paquetes de marcas para hacer balanceo de carga WAN dual. En los ejemplos anteriores de enrutamiento basado en políticas la decisión de tabla de enrutamiento se basó en fuente fija o puerto de destino. Para esta página de wiki que queremos tratar de equilibrar las nuevas conexiones de 50/50 sobre ISP1 y ISP2.

En el siguiente diagrama, tenemos 2 conexiones de Internet, ISP-1 y 2 de ISP:

  1. ISP-1 eth0 192.0.2.0/24
  2. ISP-2 203.0.113.0/24 eth1

En el lado de la LAN:

  1. eth2 172.16.0.0/24

Diagrama de red


Tablas de enrutamiento


Estamos utilizando las mismas tablas de enrutamiento a partir del EdgeOS política basa enrutamiento donde la tabla de enrutamiento "principal" tiene una ruta predeterminada a ambos ISP, la tabla 1 sólo tiene una ruta a ISP1 y tabla 2 sólo tiene una ruta a ISP2, pero con una simple adición. Aquí también estamos asociando una mesa con una marca de paquete - marque 1 para la tabla 1 y marque el 2 para la tabla 2. Esto nos dice que utilice la tabla 1 si el paquete tiene una marca de 1 y 2 cuando hay una marca de 2.

set protocols static route 0.0.0.0/0 next-hop 192.0.2.1
set protocols static route 0.0.0.0/0 next-hop 203.0.113.1
set protocols static table 1 mark 1
set protocols static table 1 route 0.0.0.0/0 next-hop 192.0.2.1
set protocols static table 2 mark 2
set protocols static table 2 route 0.0.0.0/0 next-hop 203.0.113.1

Balanceo de carga


Cuando stateful firewall está en uso, el sistema realiza un seguimiento de todas las conexiones en el sistema. La entrada de la conexión y el paquete puede tener un marca aplicados a ellos y las marcas se pueden guardar/restaurar entre la conexión y el paquete. Básicamente lo que estamos tratando de hacer aquí es para un nuevo conexión 50% del tiempo que te Marque el paquete con la marca 1 y el resto del tiempo te Marque con 2 . Luego guardaremos esa marca de paquete para la nueva entrada de conexión. Para las conexiones existentes ya habría una marca, así te restauramos esa marca en el paquete.

 set firewall modify balance rule 10 action modify
 set firewall modify balance rule 10 description 'restore mark from connection'
 set firewall modify balance rule 10 modify connmark restore-mark
 set firewall modify balance rule 20 action accept
 set firewall modify balance rule 20 description 'accept the packet if the mark isnt zero'
 set firewall modify balance rule 20 mark '!0'
 set firewall modify balance rule 30 action modify
 set firewall modify balance rule 30 description 'for new connections mark 50% with mark 1'
 set firewall modify balance rule 30 modify mark 1
 set firewall modify balance rule 30 protocol tcp_udp
 set firewall modify balance rule 30 state new enable
 set firewall modify balance rule 30 statistic probability 50%
 set firewall modify balance rule 40 action modify
 set firewall modify balance rule 40 description 'for packets with mark zero, mark with 2'
 set firewall modify balance rule 40 mark 0
 set firewall modify balance rule 40 modify mark 2
 set firewall modify balance rule 40 protocol tcp_udp
 set firewall modify balance rule 40 state new enable
 set firewall modify balance rule 50 action modify
 set firewall modify balance rule 50 description 'save the packet mark to the connection mark'
 set firewall modify balance rule 50 modify connmark save-mark

Luego debemos aplicar a nuestra interfaz de LAN.

set interfaces ethernet eth2 firewall in modify balance
 

Prueba


Aquí podemos ver que las reglas 30 y 40 se equilibran casi 50/50:

ubnt@PBR:~$ show firewall modify statistics
 --------------------------------------------------------------------------------
 IPv4 Firewall "balance"
 Active on (eth2,IN)
 rule packets bytes action description
 ---- ------- ----- ------ -----------
 10 399516 61839166 MODIFY restore mark from connection
 20 366897 59641481 ACCEPT accept the packet if the mark isn't zero
 30 16196 1094021 MODIFY for new connections mark 50% with mark 1
 40 16377 1101667 MODIFY for packets with mark zero, mark with 2
 50 32619 2197685 MODIFY save the packet mark to the connection mark
 10000 32619 2197685 ACCEPT DEFAULT ACTION

Nuevas conexiones WAN


Si tenemos reglas de reenvío de puertos configuradas, podemos tener nuevas conexiones iniciadas desde el lado WAN. Para mantener esas conexiones nuevas salir de la misma interfaz que vinieron en, nos marca un 1 en las nuevas conexiones desde ISP1 y marque 2 en nuevas conexiones de ISP2.

 set firewall modify ISP1_IN rule 1 description 'use mark 1 for new ISP1 connections'
 set firewall modify ISP1_IN rule 1 action modify
 set firewall modify ISP1_IN rule 1 log enable
 set firewall modify ISP1_IN rule 1 modify connmark set-mark 1
 set firewall modify ISP1_IN rule 1 protocol tcp_udp
 set firewall modify ISP1_IN rule 1 state new enable
 set firewall modify ISP2_IN rule 1 description 'use mark 2 for new ISP2 connections'
 set firewall modify ISP2_IN rule 1 action modify
 set firewall modify ISP2_IN rule 1 log enable
 set firewall modify ISP2_IN rule 1 modify connmark set-mark 2
 set firewall modify ISP2_IN rule 1 protocol tcp_udp
 set firewall modify ISP2_IN rule 1 state new enable

Se aplica a interfaces WAN:

set interfaces ethernet eth0 firewall in modify ISP1_IN
set interfaces ethernet eth1 firewall in modify ISP2_IN
 Ejemplo de configuración
 firewall {
 modify ISP1_IN {
 rule 1 {
 action modify
 description "use mark 1 for new ISP1 connections"
 log enable
 modify {
 connmark {
 set-mark 1
 }
 }
 protocol tcp_udp
 state {
 new enable
 }
 }
 }
 modify ISP2_IN {
 rule 1 {
 action modify
 description "use mark 2 for new ISP2 connections"
 log enable
 modify {
 connmark {
 set-mark 2
 }
 }
 protocol tcp_udp
 state {
 new enable
 }
 }
 }
 modify balance {
 enable-default-log
 rule 10 {
 action modify
 description "restore mark from connection"
 modify {
 connmark {
 restore-mark
 }
 }
 }
 rule 20 {
 action accept
 description "accept the packet if the mark isn't zero"
 mark !0
 }
 rule 30 {
 action modify
 description "for new connections mark 50% with mark 1"
 modify {
 mark 1
 }
 protocol tcp_udp
 state {
 new enable
 }
 statistic {
 probability 50%
 }
 }
 rule 40 {
 action modify
 description "for packets with mark zero, mark with 2"
 mark 0
 modify {
 mark 2
 }
 protocol tcp_udp
 state {
 new enable
 }
 }
 rule 50 {
 action modify
 description "save the packet mark to the connection mark"
 modify {
 connmark {
 save-mark
 }
 }
 }
 }
 }
 interfaces {
 ethernet eth0 {
 address 192.0.2.2/24
 duplex auto
 firewall {
 in {
 modify ISP1_IN
 }
 }
 speed auto
 }
 ethernet eth1 {
 address 203.0.113.2/24
 duplex auto
 firewall {
 in {
 modify ISP2_IN
 }
 }
 speed auto
 }
 ethernet eth2 {
 address 172.16.0.1/24
 duplex auto
 firewall {
 in {
 modify balance
 }
 }
 speed auto
 }
 loopback lo {
 }
 }
 protocols {
 static {
 route 0.0.0.0/0 {
 next-hop 192.0.2.1 {
 }
 next-hop 203.0.113.1 {
 }
 }
 table 1 {
 mark 1
 route 0.0.0.0/0 {
 next-hop 192.0.2.1 {
 }
 }
 }
 table 2 {
 mark 2
 route 0.0.0.0/0 {
 next-hop 203.0.113.1 {
 }
 }
 }
 }
 }
 service {
 dhcp-server {
 disabled false
 shared-network-name LAN {
 authoritative disable
 subnet 172.16.0.0/24 {
 default-router 172.16.0.1
 dns-server 8.8.8.8
 lease 86400
 start 172.16.0.10 {
 stop 172.16.0.100
 }
 }
 }
 }
 gui {
 https-port 443
 }
 nat {
 rule 5000 {
 outbound-interface eth0
 type masquerade
 }
 rule 6000 {
 outbound-interface eth1
 type masquerade
 }
 }
 ssh {
 port 22
 protocol-version v2
 }
 }
 system {
 host-name WLB
 login {
 user ubnt {
 authentication {
 encrypted-password $1$zKNoUbAo$gomzUbYvgyUMcD436Wo66.
 }
 level admin
 }
 }
 name-server 8.8.8.8
 ntp {
 server 0.ubnt.pool.ntp.org {
 }
 server 1.ubnt.pool.ntp.org {
 }
 server 2.ubnt.pool.ntp.org {
 }
 server 3.ubnt.pool.ntp.org {
 }
 }
 syslog {
 global {
 facility all {
 level notice
 }
 facility protocols {
 level debug
 }
 }
 }
 time-zone UTC
 }
 /* Warning: Do not remove the following line. */
 /* === vyatta-config-version: "config-management@1:dhcp-relay@1:dhcp-server@4:firewall@4:ipsec@3:nat@3:qos@1:quagga@2:system@4:ubnt-pptp@1:vrrp@1:webgui@1:webproxy@1:zone-policy@1" === */
 /* Release version: v1.1.0beta3dev.4539852.130227.0102 */