- Implementación de una red privada virtual cifrada para conectar servidores SFTP sin exponer puertos al internet público.
- Gestión de identidades y permisos mediante ACLs para controlar exactamente quién accede a los archivos y desde qué dispositivo.
- Sincronización de datos entre nodos remotos y servidores self-hosted utilizando direcciones IP estables y MagicDNS.
Acceder desde Internet a un servidor de archivos doméstico puede resultar complicado cuando la conexión utiliza CGNAT, el operador bloquea las conexiones entrantes o simplemente no queremos abrir puertos en el router. Una dirección IP pública dinámica no impide por sí sola el acceso remoto, pero obliga a utilizar DNS dinámico y a configurar correctamente el cortafuegos y la redirección de puertos.
Una alternativa consiste en combinar SFTPGo con Tailscale. Tailscale crea una red privada cifrada entre los dispositivos autorizados, mientras que SFTPGo se encarga de gestionar los usuarios, las carpetas y las transferencias de archivos. De esta forma, podemos acceder al servidor sin publicar el servicio SFTP directamente en Internet.
Cómo funciona SFTPGo con Tailscale

Tailscale utiliza WireGuard para conectar los equipos de una misma red privada, denominada tailnet. Cada dispositivo recibe una dirección estable dentro del rango 100.64.0.0/10, que puede mantenerse aunque cambie la conexión física o la dirección IP asignada por el operador.
Cuando dos dispositivos pueden comunicarse directamente, Tailscale establece la conexión entre ellos. Si la configuración de NAT o del cortafuegos lo impide, puede recurrir a un servidor de retransmisión. En ambos casos, el tráfico continúa cifrado de extremo a extremo entre los dispositivos, aunque una conexión retransmitida puede ofrecer menos velocidad.
SFTPGo añade una segunda capa de control. Tailscale determina qué dispositivos pueden alcanzar el servidor, pero SFTPGo sigue exigiendo un usuario válido y una contraseña o clave SSH. Por tanto, pertenecer a la tailnet no concede automáticamente acceso a los archivos.
Instala Tailscale en el servidor y en los clientes

Instala Tailscale en el equipo donde se ejecuta SFTPGo y autentícalo siguiendo las instrucciones correspondientes a su sistema operativo. En un servidor Linux, después de instalar el paquete oficial, normalmente podrás iniciar la vinculación mediante:
sudo tailscale up
Para consultar la dirección IPv4 asignada al servidor, utiliza:
tailscale ip -4
También puedes activar MagicDNS desde el panel de administración de Tailscale. Esta función permite conectarse utilizando el nombre del equipo en lugar de memorizar su dirección IP. Dentro de la misma tailnet puede bastar con un nombre como servidor-archivos; los usuarios externos con los que compartas el dispositivo pueden necesitar su nombre completo terminado en .ts.net.
Los ordenadores y móviles desde los que quieras conectarte también deben ejecutar Tailscale. No es necesario utilizar la misma cuenta en todos ellos: puedes invitar a otros usuarios o compartir únicamente el servidor con un colaborador externo.
Configura SFTPGo para escuchar en la red privada
En la imagen oficial de Docker, SFTPGo utiliza de forma predeterminada el puerto 2022 para las conexiones SFTP y el puerto 8080 para la interfaz de administración. No debes asumir que el servicio estará disponible en el puerto 22.
Si utilizas Docker, Coolify u otra plataforma de contenedores, comprueba qué interfaces exponen los puertos publicados. Una asignación como 2022:2022 puede escuchar en todas las interfaces del servidor. Para limitarla a Tailscale, puedes vincular el puerto a la dirección privada del servidor cuando la plataforma lo permita:
ports:
- "100.101.102.103:2022:2022"
Sustituye la dirección del ejemplo por la IP real mostrada por tailscale ip -4. Si no puedes realizar esta vinculación, utiliza el cortafuegos del servidor para permitir el puerto 2022 únicamente desde la interfaz de Tailscale. La interfaz de administración tampoco debería quedar expuesta públicamente.
Si ejecutas SFTPGo en Docker, conserva los directorios /srv/sftpgo y /var/lib/sftpgo mediante volúmenes persistentes. La imagen oficial utiliza el UID y GID 1000 de forma predeterminada, por lo que los directorios montados desde el host deben permitir la escritura a ese usuario.
Crea usuarios y limita las carpetas compartidas
Crea una cuenta diferente de SFTPGo para cada persona que necesite acceder. Esto permite revocar un usuario sin afectar a los demás y consultar por separado su actividad.
Asigna a cada cuenta una carpeta de inicio limitada y únicamente los permisos necesarios. Si el usuario solo debe descargar archivos, no le concedas permiso para subirlos, eliminarlos o cambiarles el nombre. Para accesos habituales, es preferible utilizar autenticación mediante clave pública SSH en lugar de depender exclusivamente de una contraseña.
Tailscale y SFTPGo cumplen funciones complementarias. Aunque una política de Tailscale restrinja el acceso al puerto correcto, sigue siendo necesario configurar adecuadamente los usuarios, las claves y los permisos dentro de SFTPGo.
Comparte el servidor sin abrir toda la tailnet

Si el destinatario pertenece a tu organización o familia, puedes incorporarlo a la tailnet con los permisos correspondientes. Para una colaboración puntual, resulta más prudente utilizar la función de compartir un dispositivo. El destinatario podrá alcanzar el servidor compartido, pero no obtendrá acceso automático al resto de los equipos.
También puedes crear una política que permita a los usuarios externos compartidos conectarse únicamente al puerto 2022 del servidor. Un fragmento de ejemplo sería:
"grants": [
{
"src": ["autogroup:shared"],
"dst": ["100.101.102.103"],
"ip": ["tcp:2022"]
}
]
Debes sustituir la dirección del ejemplo por la IP de Tailscale del servidor e integrar la regla correctamente en el archivo de políticas existente. Antes de guardar los cambios, revisa que no exista otra regla más amplia que permita alcanzar servicios adicionales.
Cuando termine la colaboración, elimina la invitación o el dispositivo compartido y desactiva también la cuenta correspondiente en SFTPGo.
Cómo conectarte desde un cliente SFTP

Abre un cliente compatible, como FileZilla, WinSCP o Cyberduck, y utiliza estos datos:
- Protocolo: SFTP.
- Servidor: IP de Tailscale o nombre de MagicDNS.
- Puerto: 2022, salvo que lo hayas cambiado.
- Usuario: cuenta creada en SFTPGo.
- Autenticación: contraseña o clave privada SSH.
La primera conexión puede mostrar la huella de la clave del servidor. Comprueba que coincide con la huella configurada en SFTPGo antes de aceptarla, especialmente si vas a transferir información importante.
Qué revisar si la conexión no funciona
Ejecuta tailscale status para comprobar que ambos dispositivos están conectados y utiliza tailscale ping servidor-archivos para verificar que pueden comunicarse. El resultado también puede indicar si la conexión es directa o se está realizando mediante un relé.
Si Tailscale funciona pero el cliente SFTP no conecta, comprueba que el contenedor está iniciado, que el puerto 2022 está publicado en la interfaz correcta y que ninguna regla del cortafuegos lo bloquea. Revisa también el nombre de usuario, la clave SSH y los registros de SFTPGo.
No configures manualmente 100.100.100.100 como servidor DNS global solo para solucionar un fallo de MagicDNS. Primero comprueba que MagicDNS está habilitado, que el dispositivo acepta la configuración DNS de Tailscale y que estás utilizando el nombre completo cuando accedes a una máquina compartida.
Tampoco debes confundir SFTPGo con Tailscale SSH. Esta última función proporciona acceso a la consola de determinados servidores Linux y puede gestionar el puerto 22 dentro de la tailnet. Mantener SFTPGo en su puerto 2022 predeterminado evita conflictos entre ambos servicios.
La combinación de SFTPGo y Tailscale permite acceder a archivos privados sin depender de una IP pública fija ni abrir el servidor SFTP a toda Internet. Aun así, la seguridad final depende de limitar los puertos publicados, aplicar políticas de acceso, utilizar cuentas individuales y mantener actualizados tanto SFTPGo como Tailscale.
Soy un apasionado de la tecnología que ha convertido sus intereses «frikis» en profesión. Llevo más de 10 años de mi vida utilizando tecnología de vanguardia y trasteando todo tipo de programas por pura curiosidad. Ahora me he especializado en tecnología de ordenador y videojuegos. Esto es por que desde hace más de 5 años que trabajo redactando para varias webs en materia de tecnología y videojuegos, creando artículos que buscan darte la información que necesitas con un lenguaje entendible por todos.
Si tienes cualquier pregunta, mis conocimientos van desde todo lo relacionado con el sistema operativo Windows así como Android para móviles. Y es que mi compromiso es contigo, siempre estoy dispuesto a dedicarte unos minutos y ayudarte a resolver cualquier duda que tengas en este mundo de internet.