Slirp (a veces escrito con mayúscula SLiRP ) es un programa de software que emula una conexión PPP , SLIP o CSLIP a Internet mediante una cuenta de shell basada en texto . Su propósito original se volvió en gran medida obsoleto a medida que las conexiones PPP de acceso telefónico dedicadas y el acceso a Internet de banda ancha se volvieron ampliamente disponibles y económicos. Luego encontró un uso adicional en la conexión de dispositivos móviles, como PDA , a través de sus puertos serie . Otro caso de uso significativo es la perforación de firewall/ reenvío de puertos . [1] [2] Un uso típico de Slirp crea una conexión de red de propósito general sobre una sesión SSH en la que el reenvío de puertos está restringido. Otro caso de uso es crear conectividad externa para contenedores sin privilegios.
Las cuentas de shell normalmente sólo permiten el uso de líneas de comandos o software basado en texto , pero al iniciar sesión en una cuenta de shell y ejecutar Slirp en el servidor remoto, un usuario puede transformar su cuenta de shell en una conexión de red SLIP/PPP de propósito general, lo que le permite ejecutar cualquier aplicación basada en TCP/IP (incluido el software GUI estándar como el anteriormente popular Netscape Navigator ) en su computadora. Esto fue especialmente útil en la década de 1990 porque las cuentas de shell simples eran menos costosas y/o estaban más ampliamente disponibles que las cuentas SLIP/PPP completas. [3]
A mediados de los años 90, numerosas universidades ofrecieron cuentas de shell de acceso telefónico (a sus profesores, personal y estudiantes). Estas conexiones de sólo línea de comandos se volvieron más versátiles con SLIP/PPP, lo que permitió el uso de aplicaciones arbitrarias basadas en TCP/IP. Se publicaron en línea muchas guías para usar conexiones de acceso telefónico universitarias con Slirp. El uso de software de emulación TCP/IP como Slirp y su competidor comercial TIA fue prohibido por algunos proveedores de cuentas de shell, que creían que sus usuarios violaban sus términos de servicio o consumían demasiado ancho de banda . [4] [5]
Slirp también es útil para conectar PDA y otros dispositivos móviles a Internet: al conectar un dispositivo de este tipo a una computadora que ejecute Slirp, a través de un cable serial o USB , el dispositivo móvil puede conectarse a Internet. [6]
A diferencia de una verdadera conexión SLIP/PPP, proporcionada por un servidor dedicado, una conexión Slirp no obedece estrictamente el principio de conectividad de extremo a extremo previsto por el conjunto de protocolos de Internet . El extremo remoto de la conexión, que se ejecuta en la cuenta shell, no puede asignar una nueva dirección IP y enrutar el tráfico hacia ella. [7] Por lo tanto, la computadora local no puede aceptar conexiones entrantes arbitrarias, aunque Slirp puede usar el reenvío de puertos para aceptar el tráfico entrante para puertos específicos .
Esta limitación es similar a la de la traducción de direcciones de red . Puede proporcionar una mayor seguridad como efecto secundario , también puede aplicar políticas y actuar como un cortafuegos entre la computadora local e Internet. [7]
Slirp es un software libre licenciado bajo una licencia BSD de 4 cláusulas modificada, similar a la BSD, por su autor original. Después de que el autor original dejara de mantenerlo, Kelly Price se hizo cargo del mantenimiento. [8] No hubo lanzamientos de Kelly Price después de 2006. Los mantenedores de Debian se han hecho cargo de algunas tareas de mantenimiento, como modificar Slirp para que funcione correctamente en computadoras de 64 bits . [9] En 2019, [10] slirp4netns utilizó un repositorio Slirp mantenido de manera más activa para proporcionar conectividad de red para contenedores y máquinas virtuales sin privilegios y sin root.
A pesar de estar en gran parte obsoleto, Slirp tuvo una gran influencia en las pilas de redes utilizadas en máquinas virtuales y otros entornos virtualizados. La práctica establecida para conectar las máquinas virtuales a la pila de red del host era utilizar varios mecanismos de inyección de paquetes . Los sockets sin formato , que son uno de esos mecanismos, se utilizaron originalmente para ese propósito y, debido a muchos problemas y limitaciones, luego se reemplazaron con el dispositivo TAP .
La inyección de paquetes es una operación privilegiada que puede introducir una amenaza a la seguridad , algo que la introducción del dispositivo TAP resolvió solo parcialmente. La implementación de NAT derivada de Slirp trajo una solución a este problema de larga data. Se descubrió que Slirp tiene la implementación completa de NAPT como un código de espacio de usuario independiente , mientras que otros motores NAT generalmente están integrados en una pila de protocolos de red y/o no cooperan con el sistema operativo host cuando hacen PAT (usan sus propios rangos de puertos y requieren inyección de paquetes). El proyecto QEMU ha adoptado las partes de código apropiadas del paquete Slirp y obtuvo el permiso de sus autores originales para volver a licenciarlo bajo la licencia BSD de 3 cláusulas. [11] Tal cambio de licencia permitió que muchos otros proyectos FOSS adoptaran las partes de Slirp proporcionadas por QEMU, lo que no era (y todavía no es) posible con la base de código Slirp original debido a los problemas de compatibilidad de licencias. Algunos de los adoptantes notables son los proyectos VDE y VirtualBox .