Caso práctico I: Comprensión de la capa 4 NAT y el equilibrio de carga DNAT

PUBLICADO EL 20 septiembre, 2017

Estos casos prácticos son una guía de capacitación para comprender mejor cómo funcionan las tecnologías de redes, seguridad y alta disponibilidad.

En primer lugar, intente el siguiente ejercicio:

Step 1. Install Zevenet CE from GIT, SF or Docker
            https://www.zevenet.com/community

Step 2. Create L4xNAT farm with 2 backends and NAT or DNAT mode
            https://www.zevenet.com/knowledge-base/

Step 3. Execute in a console of Zevenet CE and try to understand the result of:
            root# iptables -t mangle -n -L
            root# iptables -t nat -n -L

Dudas y comentarios en el funcionario. lista de envío!

Respuesta

El equilibrador de carga es un dispositivo de red encargado de garantizar el flujo de tráfico entre el cliente y los backends o servidores reales, por lo que los pasos de 4 se tomarán en cuenta para garantizar los flujos, paquetes por paquete de la conexión en la capa 4:

Load_Balancer_l4_packet_flows

1. El paquete del cliente se envía desde el cliente al equilibrador de carga.
2. El paquete se envía desde el equilibrador de carga a un servidor real o backend seleccionado
3. El paquete responde desde el servidor al equilibrador de carga.
4. El paquete se devuelve al cliente como respuesta.

Zevenet La capa 4 (perfiles LSLB - L4xNAT) maneja todos estos paquetes usando netfilter subsistema a través de iptables y el sistema de enrutamiento de red.

Por este motivo, al configurar un DTA modo agrupar y ejecutar los comandos de iptables podemos encontrar reglas generadas en las tablas desaparecido y nat de netfilter. Más información sobre Tablas de Netfilter aquí .

En el caso PREROUTING cadena de la desaparecido tabla se muestran las reglas que coinciden:

- Todos los paquetes entrantes de todas las fuentes o clientes cuyo destino es la dirección virtual y el puerto del servicio (en el ejemplo será 192.168.101.250:443)
- Luego marque los paquetes de acuerdo con un algoritmo determinado, en este caso es un peso basado en un método de probabilidad.

root@zevenet:~# iptables -L -t mangle -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
CONNMARK   all  --  0.0.0.0/0            0.0.0.0/0            CONNMARK restore
MARK       tcp  --  0.0.0.0/0            192.168.101.250      statistic mode random probability 1.00000000000 multiport dports 443 /*  FARM_app_1_  */ MARK set 0x20d
MARK       tcp  --  0.0.0.0/0            192.168.101.250      statistic mode random probability 0.50000000000 multiport dports 443 /*  FARM_app_0_  */ MARK set 0x20c
CONNMARK   all  --  0.0.0.0/0            0.0.0.0/0            state NEW CONNMARK save

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Ahora que los paquetes entrantes están marcados, en la PREROUTING cadena de la nat En la tabla utilizamos la marca de paquete para cambiar la dirección de destino del paquete a un backend u otro. Para este ejemplo, las direcciones IP 192.168.1.10 y 192.168.1.11 Son los servidores reales.

root@zevenet:~# iptables -L -t nat -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            mark match 0x20c /*  FARM_app_0_  */ to:192.168.1.10:443
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            mark match 0x20d /*  FARM_app_1_  */ to:192.168.1.11:443

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

El conntrack tabla gestiona la traducción de la dirección de destino y en la DTA En este modo, el paquete de retorno se gestiona mediante rutas, ya que el equilibrador de carga será la puerta de enlace predeterminada de los backends.

En el caso de los NATo SNAT como se conoce comúnmente, conntrack gestiona no solo la traducción de la dirección de destino, sino también la traducción de la dirección de origen. En este caso, la única diferencia con DTA es que el paquete respondido no es administrado por el sistema de enrutamiento sino por la tabla conntrack. Entonces podemos encontrar solo 2 reglas nuevas en el POSTROUTING Cadena de la tabla nat para realizar el MASQUERADING con la dirección IP virtual de la granja.

root@zevenet:~# iptables -L -t nat -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            mark match 0x20c /*  FARM_app_0_  */ to:192.168.1.10:443
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            mark match 0x20d /*  FARM_app_1_  */ to:192.168.1.11:443

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            mark match 0x20c /*  FARM_app_0_  */ to:192.168.101.250
SNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            mark match 0x20d /*  FARM_app_1_  */ to:192.168.101.250

¿Más dudas? Preguntar al lista de envío!

Comparte en:

Documentación bajo los términos de la Licencia de Documentación Libre de GNU.

¿Le resultó útil este artículo?

Artículos Relacionados