Ejecución de HIP VPLS en un NanoPI R2S
Introducción En nuestro artículo anterior, demostramos un prototipo funcional del servicio privado virtual basado en la identidad del host, o HIP-VPLS. En ese entonces usábamos el framework Mininet. Aquí mostramos cómo se implementa este sistema en hardware real. Usaremos NanoPi R2S como plataforma para HIP-VPLS. simplemente un recordatorio Los servicios de LAN privada virtual (VPLS) proporcionan un medio para establecer comunicaciones de capa 2 en una red IP existente. VPLS se puede construir utilizando diferentes enfoques. Sin embargo, al crear una solución VPLS con calidad de producción, es necesario tener una idea clara de cómo se abordan aspectos como la seguridad, la movilidad y los problemas de L2. El protocolo de identidad de host (HIP) se desarrolló originalmente para dividir el papel dual de las direcciones IP. En otras palabras, HIP es una solución de capa 3.5 que se encuentra entre las capas de IP y transporte. HIP utiliza hashes de claves públicas como identificadores. Estos identificadores, o etiquetas de identidad de host (HIT), están expuestos a la capa de transporte y nunca cambian (en realidad, podrían cambiar si, por ejemplo, el administrador del sistema decide rotar los pares de claves RSA o ECDSA, pero eso rara vez sucederá). Por otro lado, HIP usa direcciones IP enrutables (pueden ser tanto IPv4 como IPv6) como localizadores y se usan para transportar los paquetes HIP e IPSec entre los puntos finales. Para identificarse entre sí e intercambiar claves secretas, HIP se basa en un protocolo de enlace de 4 vías (también conocido como HIP Base Exchange o HIP BEX para abreviar). Durante el BEX, los pares negocian un conjunto de algoritmos criptográficos para usar, identificarse entre sí (dado que los HIT son permanentes y están vinculados a claves públicas, HIP puede usar un firewall simple basado en HIT para filtrar conexiones no confiables), intercambiar las claves (HIP puede usar Diffie-Hellman y algoritmos Diffie-Hellman de curva elíptica) e incluso protegerse contra ataques de denegación de servicio usando acertijos aritméticos (estos se basan en funciones hash criptográficas y la capacidad de los pares). para hacerlo). encontrar colisiones en funciones hash; la complejidad de una solución está regulada por un respondedor en HIP BEX). HIP también es compatible con la movilidad y utiliza un procedimiento de protocolo de enlace separado en el que el par notifica a su homólogo los cambios en el localizador (leyendo la dirección IP utilizada para fines de enrutamiento). Hardware En nuestra implementación, usamos la siguiente configuración. Para los conmutadores HIP, utilizamos la plataforma informática NanoPI R2S. Utilizamos conmutadores SNR de 8 puertos para conectar 3 NanoPI R2S, imitando la superposición de IP en la configuración. NanoPI R2S tiene dos interfaces: una se enfrenta a la red LAN y la otra se enfrenta a la red WAN. NanoPI R2S tiene las siguientes características: Tiene 1 GB de memoria, CPU de cuatro núcleos, tarjeta SD de 32 GB. Utilizamos conmutadores SNR para cablear los enrutadores (cada conmutador tenía 8 puertos de 1 Gbps y dos ranuras de factor de forma pequeño (SFP). La configuración del laboratorio de prueba se muestra en la siguiente figura:
Implementación del sistema Para implementar el sistema, preparamos una imagen de Linux FriendlyWRT y la volcamos en tarjetas SD. Luego implementamos las tarjetas en NanoPI R2S y ejecutamos los siguientes comandos: $ git clone https://github.com/strangebit-io/hip-vpls-hw Luego ejecutamos los siguientes comandos en cada enrutador: #!/bin/bash cd hip-vpls-hw echo «Actualizando el sistema» opkg update echo «Instalando bibliotecas» opkg install nano opkg install rsync opkg install python3 opkg install python3-pip op kg install python3-netifaces pip3 install pycryptodome opkg install python3-netifaces echo «Preparar directorios» mkdir /opt/hip-vpls/ cd .. echo «Copiar archivos» rsync -rv hiplib switchd.py switchfabric.py /opt/hip-vpls/ echo «Copiar archivo de servicio» cd start cp hip-vpls /etc/ init.d/ chmod + x /et c/init.d/hip-vpls /etc/init.d/hip-vpls enable /etc/init.d/hip-vpls start Tuvimos que establecer una opción de configuración interesante relacionada con el modo promiscuo de la tarjeta ethernet (de lo contrario, el socket sin procesar no seleccionaría los marcos de unidifusión). Así que cambiamos la configuración de la interfaz de la siguiente manera: config interface ‘loopback’ option device ‘lo’ option proto ‘static’ option ipaddr ‘127.0.0.1’ option netmask ‘255.0.0.0’ config globals ‘globals’ option ula_prefix ‘fd00:ab:cd::/48’ config device option name ‘eth0’ option macaddr ‘3e:25:61:9 4:f3:36’ interfaz de configuración ‘wan’ opción dispositivo ‘eth0’ opción proto ‘estática’ opción ipaddr ‘1.1.1.4’ opción máscara de red ‘255.255.255.248’ opción de dispositivo de configuración nombre ‘eth1’ opción macaddr ‘3e:25:61:94:f3:37’ opción promisc ‘1’ interfaz de configuración ‘LAN’ opción dispositivo ‘eth1’ We también reconfiguró las reglas del firewall para permitir que todo el tráfico de la red pase a través del enrutador. Luego generamos HIT para cada conmutador HIP, configuramos archivos de hosts y reglas de firewall (configuración descrita anteriormente aquí). Evaluación experimental En general, el sistema implementado se veía así:
Usando la herramienta IPERF, medimos el rendimiento entre PC3 y Server0. Los resultados no fueron tan fascinantes: obtuvimos un rendimiento de 1,5 Mbps en enlaces de 1 Gb/s. Continuaremos mejorando el rendimiento de HIP-VPLS; actualmente estamos tratando de compilar el código fuente en código C.