IndiFTPd ¿ReactOS como servidor FTP?

Hace un tiempo pusimos a ReactOS a dar sus primeros pasos en el tema de servidores Web, en el que le fue relativamente bien, al menos en el campo de pruebas, pero en la práctica el HTTP es apenas uno (aunque el mas importante) de los tantos servicios que necesitan, por obligación, ser soportados por el sistema, todo esto para poder considerar a ReactOS como una opción real a las variantes Unix y a la línea Windows Server de Microsoft que acaparan el mercado hoy en día.

Como bien dijimos, el HTTP necesita ser complementado con otros servicios de uso muy extendido en el entorno comercial, uno de ellos es el FTP, que va tan de la mano con el primero que prácticamente se ha vuelto imprescindible.

Y bien, así como Windows Server posee su propio software dedicado para tal propósito, existen alternativas de código abierto que logran los mismos resultados y obviamente proveen la misma robustez y estabilidad, una de ellas es el FileZilla Server, y que se ha convertido en todo un referente en su ramo.

Lastimosamente el FileZilla Server aún no logra funcionar en ReactOS, hay muchos fallos por corregir y probablemente ello demore un tiempo, pero como afortunadamente el mundo del open source es muy variado, nos pusimos en la búsqueda de otro software similar que logre funcionar.

Y es así como dimos con el IndiFTPd, un servidor minúsculo y sencillo, que funciona únicamente sobre la consola de comandos, no se puede instalar como servicio y su configuración es algo primitiva, pero lo importante es que funciona perfectamente sobre ReactOS y cumple con su cometido, lo cual para nosotros es suficiente como para darle el visto bueno y comenzar a investigar más sobre él.

El IndiFTPd es un software algo antiguo (data del 2003) que fue liberado bajo la licencia GPLv2 por Avissar Software, creadora a su vez de un programa similar llamado DFTPd que es mucho mas completo, y aunque también es gratuito, no es de código abierto.

La descripción del IndiFTPd es muy clara, se trata de un servidor FTP “stand alone” (es decir, que no requiere instalación) que consiste en un solo archivo ejecutable que pesa apenas 556 kb, y ha sido diseñado para situaciones en las que se requiere montar rápidamente un servidor FTP sin necesidad de configuraciones complejas, simplemente ejecute y úselo.

Sin embargo el IndiFTPd va más allá, también provee un modo de configuración avanzada si lo que quieres es tenerlo trabajando por un largo periodo de tiempo, con soporte a usuarios, registros de actividad, conexiones encriptadas con SSL y algunas otras características más.

Pero como conocemos a nuestros lectores, vamos a dejar a un lado tanta teoría aburrida y mejor comencemos con lo bueno, verlo funcionando. Para el efecto a continuación les mostraremos un tutorial completo con el fin de que lo prueben en casa.

De la teoría a la práctica, probando el IndiFTPd en ReactOS

Ya nos explayamos demasiado sobre las bondades técnicas del IndiFTPd y cómo su compatibilidad con ReactOS puede influir en el propio futuro del sistema operativo, al hacerlo de a poco ingresar en un campo donde las variantes Unix y Microsoft son los amplios dominadores.

Para ponerlo a prueba en ReactOS, hicimos uso de una máquina virtual QEMU montada sobre una máquina anfitrión con Windows XP, instalamos la última revisión disponible al momento de editar este artículo (59794), lo colocamos en C:\ y lo pusimos a correr.

Es obvio que eso no tiene mucho de interesante, así que para hacerlo más realista, preparamos un escenario de uso real donde el servidor FTP es accedido externamente desde otra máquina, el cómo lo logramos, es explicado a continuación:

Normalmente al configurar la tarjeta de red en nuestras máquinas virtuales, tanto en QEMU como en VirtualBox, lo que hacemos en realidad es crear una NAT local entre la máquina virtual y la máquina Host, dicha NAT funciona íntegramente en el software de virtualización, que actúa como un enrutador de tráfico, lo cual permite montar toda una red en la máquina virtual bajo cualquier circunstancia, incluso si la máquina Host no tiene conexión a Internet.

Sabiendo lo anterior procedimos a instalar el FileZilla Client en Windows mientras que en QEMU establecimos una redirección del puerto TCP 2100 de la máquina Host hacia el puerto TCP 21 en la máquina virtual y nos intentamos conectar a ReactOS con el hostname localhost, puerto 2100, el usuario por defecto anonymous y la contraseña en blanco. Inicialmente la conexión se dio sin problemas pero había un inconveniente: no podíamos listar directorios, ni enviar o descargar archivos, el IndiFTPd simplemente respondía con un error 425.

Investigamos sobre el error 425 y nos dimos cuenta de que una sesión FTP tiene dos modos de operación: Activo y Pasivo, éste último depende de puertos extras en el servidor, cabe recordar que FileZilla usa el modo Pasivo por defecto, y para que funcione correctamente era necesario liberar un rango de puertos en la máquina virtual, a más de configurar el IndiFTPd para que use ese mismo rango de puertos para enviar y recibir información.

Todo ese enredo nos pareció algo innecesario en nuestro ambiente de pruebas, de modo que la solución más rápida que encontramos fue cambiar a modo Activo (en la que los puertos extra los presta el cliente) y presentarnos con la IP privada de nuestra máquina Host en la NAT (que además es la puerta de acceso predeterminado) la cual es 10.0.2.2.

Eso hizo que el FileZilla comience a listar mágicamente los archivos contenidos en el disco duro virtual, y podamos compartir archivos con ReactOS, a más de realizar otras tareas como crear carpetas, eliminar ficheros, etc., todo remotamente.

El resultado fue magnífico, nos llenó de emoción ver que todo haya funcionado de maravilla, sin Bugs notorios y a buena velocidad, claramente es una prueba más de que vamos por buen camino.