Escrito por: Waldir Montoya, Systems Engineer NOLA VMware®
Siempre que realizo una presentación sobre virtualización de redes y seguridad recibo esta pregunta, debido a que tradicionalmente se ha requerido hardware especial para entregar desempeño en tareas como reenvío de paquetes y cifrado. Aquí expongo la respuesta un poco más detallada y con las referencias apropiadas para que puedan consultar a profundidad.
Hoy en día existen varios tipos de redes y estructuras de seguridad según los requerimientos empresariales y los modelos económicos propios de cada industria, representando en algunas procesos estratégicos de negocio y en otras simplemente procesos de apoyo. En cualquier instancia, es válido afirmar que operar soluciones que entregan conectividad y seguridad resulta bastante exigente en cuanto a tiempo y recursos económicos, usualmente por los procesos y controles de cambio asociados a la entrega de servicios, haciéndolas altamente atractivas para un modelo virtualizado que entregue los mismos beneficios que obtenemos cuando virtualizamos el cómputo. Entre estos beneficios podemos enumerar:
- Capacidad de mover segmentos de red dinámicamente, incluso entre centros de datos para recuperación de aplicaciones.
- Extender segmentos de red entre centros de datos sin tener los problemas inherentes a la operación de Ethernet como lo son: Flooding para descubrir la ubicación de las direcciones MAC y Broadcast por resoluciones de ARP que identifican la dirección MAC de un host a partir de su dirección IP. (Usualmente se le atribuyen los problemas de conectividad en extensiones capa 2 a Spanning-tree, pero es importante recordar que el mismo no genera loops de conectividad, sino que los evita).
- Aprovisionar políticas de seguridad que se mantengan actualizadas sin intervención manual.
- Aprovisionar aplicaciones con sus requerimientos de conectividad y seguridad.
- Reducción de tiempos fuera de las ventanas de mantenimiento, ya que se pueden mover los componentes dinámicamente sin perder las sesiones, incluso en escenarios donde la red mantiene tablas con el estado de las mismas, por ejemplo en traslaciones de NAT o sesiones persistentes en escenarios de balanceo de carga.
- Adquisición de componentes de red bajo a petición, evitando el exceso de aprovisionamiento al momento de compra de soluciones.
- Compra de componentes unitarios para servicios de red o seguridad, ya que el modelo de alta disponibilidad es entregado por la plataforma de virtualización y no por la implementación de varios componentes del mismo tipo.
- Implementar esquemas de diagnóstico mediante generación de paquetes con características determinadas, lo que permite encontrar la ubicación exacta de inconvenientes.
- Modelos locales de inserción y encadenamiento de servicios (Service insertion y Service chaining) en cada host, en donde se estén ejecutando las aplicaciones o máquinas virtuales, sin la necesidad de reenviar el tráfico de red a un punto de control específico. Un servicio puede hacer referencia a balanceadores de carga, cortafuegos, IPSs o a cualquier elemento de red o seguridad que tradicionalmente ha tenido que estar en medio de la comunicación entre hosts, para garantizar que los mismos procesen el tráfico.
¿Cuándo se usan ASICs (Application Specific Integrated Circuits), FPGAs (Field Programmable Gate Arrays) o hardware personalizado?
Cuando un dispositivo de red hace reenvío de paquetes a altas velocidades, hay un tiempo entre paquete y paquete para tomar una decisión. El tiempo que toma este proceso está directamente relacionado con la cantidad de campos en las cabeceras que se deben evaluar.
Cada reenvío requiere como mínimo leer el ethertype del frame, qué determina el protocolo de capa superior, hoy en día IPv4 o IPv6, evaluar la dirección IP de destino, la tabla de enrutamiento e incluso realizar otras operaciones de inspección más detallada. Cada lectura de este tipo implica múltiples accesos a la memoria donde reside el paquete, convirtiéndola en el elemento que limita el desempeño o la tasa de transmisión. Es por estas limitantes que se implementan los ASICs, con funciones como pipelining y operaciones paralelas, para llegar a superar los retos impuestos por las leyes de la física.
Tareas computacionalmente complejas como operaciones con números primos y aritmética modular, relacionadas con criptografía, también requieren asistencia de hardware para lograr desempeño adecuado, esto aplica particularmente en mecanismos de cifrado asimétrico como RSA usados ampliamente en infraestructuras de clave pública.
Estas son algunas de las razones por las cuales los dispositivos de alto nivel como los enrutadores de gran escala, o ciertos elementos que usan ciertos tipos de cifrado, requieren de implementaciones específicas asistidas por hardware (ASICs y FPGAs).
¿Qué podemos implementar en software?
Primero es necesario aclarar que las implementaciones de servicios de red y seguridad basadas en software usan el hardware para alcanzar un alto desempeño, la diferencia radica en que el hardware que se usa está basado en silicio comercial (Procesadores x86 Intel, AMD y fabricantes de otros componentes como tarjetas de red).
Combinando arquitecturas de software y silicio comercial podemos tener varias optimizaciones:
AES: El mecanismo de cifrado AES ha sido optimizado en hardware, ya que los procesadores standard x86 han ido evolucionando e implementando instrucciones como generación de claves, cifrado y manipulación de matrices lo que permite hacer la descarga (offload) del procesamiento al hardware.
TCP offload: Algunos fabricantes de NICs (Network Interface Cards) o tarjetas de red, entregan la capacidad de realizar la segmentación de grandes paquetes haciendo uso de hardware, tarea que usualmente es realizada por el stack de TCP/IP del sistema operativo y que hace uso considerable de la CPU.
Librerías de procesamiento de paquetes: DPDK y 6WIND son ejemplos y entregan la posibilidad de recibir y enviar paquetes con un número mínimo de ciclos de CPU, usualmente para aplicaciones que corren en Userland (Espacio del usuario).
Un sistema operativo divide la memoria virtual en espacio de kernel y espacio de usuario con el fin de entregar seguridad, evitando que fallas de aplicaciones afecten el núcleo o kernel del sistema operativo, al igual que separación entre procesos. Un virtual appliance (máquina virtual con funciones de servicios de red o seguridad) corre en espacio del usuario, al igual que otros agentes de comunicación con el hypervisor. Esto varía particularmente en cada implementación y según las API que entrega el hypervisor. La implementación particular de un host ESXi puede verse aquí.
Implementaciones basadas en kernel: Algunas implementaciones de funciones de red y seguridad se ejecutan directamente en espacio de kernel, lo cual indica que están altamente integradas con el hypervisor, entregando altos niveles de seguridad y desempeño.
Arquitecturas de sistemas: Existen diferentes modelos de implementación de la tecnología para obtener escalabilidad. Un sistema puede escalar vertical u horizontalmente. Cuando hablamos de escalabilidad vertical hacemos referencia al aumento de las capacidades de hardware de un mismo elemento, esto se traduce en más CPU, memoria, discos etc. Cuando hablamos de escalabilidad horizontal, hacemos referencia a la replicación de un sistema para que el procesamiento sea distribuido por cada uno de los componentes duplicados.
Poniendo el concepto de escalabilidad en perspectiva, asumamos que queremos transportar 200 personas entre dos sitios mediante un avión de tamaño tal, que puedan viajar todas las personas de una sola vez (Escalabilidad vertical), otra forma sería enviando varios aviones pequeños en un solo ciclo(Escalabilidad horizontal). Ambos esquemas de escalabilidad presentan sus ventajas y desventajas y que varían dependiendo del entorno. Escalar de forma vertical tiene sus límites y complicaciones, entre estas está la necesidad de asistencia de hardware en la medida en que aumenta el procesamiento, y la horizontal tiene complicaciones importantes, ya que implementar sistemas computacionales distribuidos posee retos como la distribución de estado, mantener consistencia, evitar la fragmentación y garantizar la disponibilidad de la información.
Multihilo: Hoy en día los procesadores poseen varios cores (núcleos) internamente independientes, que facilitan la optimización a nivel de software mediante la creación de múltiples threads (hilos) en la aplicación, de tal forma que paralelamente se puedan ejecutar múltiples funciones en un único ciclo de reloj de CPU.
Un host ESXi utiliza características de este tipo como RSS (Receive Side Scaling), lo que le permite recibir tráfico del mundo físico distribuyendo el procesamiento en múltiples COREs, sin disminuir el desempeño o tasa de recepción.
Es por esto que para sacar provecho de un procesador con múltiples núcleos, es importante que la arquitectura de software pueda implementar modelos de paralelismo para obtener el uso de todos los recursos disponibles.
Acceso directo al hardware desde el espacio de usuario: Existen tecnologías como SR-IOV y Direct Path donde las máquinas virtuales pueden acceder directamente al hardware sin pasar por la administración de las solicitudes de E/S (Entrada y Salida) que entrega el hypervisor.
Cada vez tenemos un ecosistema mas rico de herramientas que entregan el desempeño adecuado en soluciones de red y seguridad basadas en software, teniendo en cuenta que toda la industria se está volcando a este concepto por la cantidad de beneficios que se obtienen. En una publicación subsecuente discutiremos SDN, NFV, microsegmentación, esquemas de seguridad distribuida, aislamiento de aplicaciones y otros conceptos relacionados con estos nuevos modelos de entrega de servicios que se habilitan mediante el uso de abstracciones en software.
Puede que también le interese: Laboratorios Prácticos VMware Hands-on Labs con Waldir Montoya