Saltar al contenido
← Guía

Instalar el servidor

Tu VPS, con HTTPS automático o detrás del nginx que ya tienes.

Antes de empezar

  • DNS: un registro A de tunnels.midominio.com y otro de *.tunnels.midominio.com a la IP del VPS.
  • Puertos: el TCP 443 libre (lo coge LnkStart) y el 80 libre o en un proxy que le pase sus nombres. setup mira qué hay antes de tocar nada y dice qué camino toca.
  • Opcional, más rápido: UDP 443 abierto en el cortafuegos, para QUIC.
  • Recomendado: un registro NS de _acme-challenge.tunnels.midominio.com hacia lnk.tunnels.midominio.com, y el puerto 53 (UDP y TCP) abierto. Así hay un solo certificado para todos los nombres.

Qué hay ya en el VPS decide el camino. setup lo mira antes de tocar nada y te lo dice:

TipoQué hay en el VPSQué hace setupSigue en
ANada en el 80 ni en el 443Se queda los dos. HTTPS automáticoInstalación normal
Bnginx, Traefik, Caddy o Apache con webs en el 443Para sin tocar nada, dice qué sitios hay y los dos caminosDetrás de un proxy que ya tienes
CAlgo sólo en el 80: la bienvenida de nginx, apps en otros puertosSe queda el 443 y te da el bloque para que ese proxy le pase el 80. HTTPS automáticoInstalación normal
DSin systemd: un contenedor, WSLPara y te lleva a la instalación a manoSin systemd, o a mano

Instalación normal: HTTPS automático

En el VPS

curl -fsSL https://lnkstart.com/install.sh | sudo sh -s -- server tunnels.midominio.com tu@correo.com

Comprueba la máquina, los puertos y el DNS; escribe /etc/lnkstart/server.toml; registra la licencia gratuita a ese correo; crea un usuario del sistema propio, instala el servicio systemd y lo arranca; comprueba que lnk.tunnels.midominio.com llega de verdad a este servidor, y termina imprimiendo la línea de tu primera máquina. Al acabar, bien o mal, envía un aviso anónimo con el paso al que llegó y cómo terminó (ni dominio, ni correo, ni IP; ver «Qué se envía»).

El certificado de cada web lo pide el propio servidor a Let's Encrypt al publicarla, y lo renueva solo. No hay que ejecutar certbot. Los servicios TCP y UDP van por su puerto y no llevan certificado.

Con un registro más en tu DNS, _acme-challenge.tunnels.midominio.com de tipo NS hacia lnk.tunnels.midominio.com, y el puerto 53 abierto (UDP y TCP), el servidor pide un único certificado comodín para *.tunnels.midominio.com: un nombre nuevo tiene HTTPS al instante. Ese registro sólo deja al servidor contestar la comprobación de Let's Encrypt; no guarda ninguna clave de tu proveedor de DNS. Sin él, cada nombre lleva el suyo. sudo lnkstart server dice cuál de los dos tienes.

Todo certificado queda anotado en registros públicos (Certificate Transparency) que cualquiera puede consultar, por ejemplo en crt.sh: la lista de nombres de tu dominio no es secreta, y los robots que la leen visitan un nombre nuevo a los pocos minutos. Si publicas para clientes, usa nombres que no los delaten (c1, demo-3) en vez de su nombre, y protege desde el primer momento lo que no deba verse («Proteger el acceso»). Con el comodín (el registro de _acme-challenge) o uno propio («Certificado propio»), no sale ningún nombre: sólo *.tunnels.midominio.com.

Los agentes entran por lnk.tunnels.midominio.com, que es sólo del servidor; ningún servicio puede llamarse lnk. Todo lo demás es tuyo: tunnels.midominio.com para tu web, y app.tunnels.midominio.com, api.tunnels.midominio.com o lo que publiques.

En el VPS

sudo systemctl status lnkstart-server
sudo journalctl -u lnkstart-server -f

Estado y registro de lo que pasa.

En un VPS nuevo, sin entrar en él

Al crear el VPS, la mayoría de proveedores dejan pegar un «user data» o «cloud-init» que se ejecuta en el primer arranque (Hetzner, DigitalOcean, Vultr o Scaleway lo llaman así). Pega esto con tu dominio y tu correo, crea el VPS y pon los dos registros A con su IP: el servidor espera hasta una hora a que el DNS apunte a él, y se instala solo.

user data (cloud-init)

#cloud-config
runcmd:
  - curl -fsSL https://lnkstart.com/install.sh | LNKSTART_WAIT_DNS=60 sh -s -- server tunnels.midominio.com tu@correo.com

En el VPS, al terminar

sudo grep 'join LD1' /var/log/cloud-init-output.log

La línea de tu primera máquina queda en el registro del primer arranque, que sólo leen los administradores del VPS. Si pasó la hora sin que el DNS apuntara, ese mismo registro dice qué falló: se arregla y se repite la instalación normal.

Detrás de un proxy que ya tienes

Tipo B: si el 443 ya es de nginx, Traefik o Caddy con tus webs, LnkStart se pone detrás. Hay dos formas, y la primera conserva el HTTPS automático.

Sin descifrar: el proxy mira el nombre que pide cada visitante y, si es de tunnels.midominio.com, le pasa la conexión cifrada tal cual, con la IP del visitante en una cabecera PROXY. LnkStart sigue pidiendo y renovando sus certificados, y lo demás sigue yendo a tus sitios.

En el VPS

curl -fsSL https://lnkstart.com/install.sh | sudo sh -s -- server tunnels.midominio.com tu@correo.com --sni-proxy

Al terminar imprime la configuración del proxy que tengas en marcha, ya con tus nombres, y qué sitios tuyos tienen que dejar el 443. Pégala, recarga el proxy y pulsa Enter: setup reinicia LnkStart para que pida sus certificados y comprueba que llega. Sin nadie delante (cloud-init), reinícialo tú con sudo systemctl restart lnkstart-server.

ProxyQué necesita
nginxEl módulo stream (en Debian y Ubuntu, libnginx-mod-stream). Tus sitios HTTPS dejan el 443 y pasan a 127.0.0.1:8443.
TraefikLa versión 3.5.2 o posterior. En Docker, la dirección del anfitrión en lugar de 127.0.0.1.
CaddyCompilado con el módulo layer4 (xcaddy build --with github.com/mholt/caddy-l4).
Nginx Proxy ManagerNo reparte por nombre sin descifrar: usa la segunda forma.

Con nginx, el bloque stream se queda con el 443: cada listen 443 de tus sitios pasa a 127.0.0.1:8443. Si queda uno, nginx no arranca, y al recargar sigue con lo de antes sin avisar: nginx -t no lo ve (el motivo queda en /var/log/nginx/error.log). Compruébalo con sudo lnkstart server, que dice si lnk.<dominio> llega a LnkStart. Y certbot --nginx vuelve a escribir listen 443 ssl cada vez que pone el certificado de un sitio: después, pásalo otra vez a 127.0.0.1:8443.

El puerto local de LnkStart sólo contesta con la cabecera PROXY delante: sin ella no se sabe de quién es la conexión. Para probarlo a mano, curl --haproxy-protocol.

Descifrando en el proxy: si tu proxy no puede repartir sin descifrar, LnkStart escucha en HTTP en un puerto local y el proxy le pasa el tráfico. El certificado pasa a ser cosa tuya (el comodín necesita DNS-01, o un certificado por nombre).

En el VPS

curl -fsSL https://lnkstart.com/install.sh | sudo sh -s -- server tunnels.midominio.com tu@correo.com --behind-proxy 127.0.0.1:20002

Al terminar imprime el bloque de nginx que hay que pegar, ya con tus nombres.

El bloque incluye la cabecera Upgrade: sin ella, los agentes no pueden conectarse por WebSocket y los WebSockets de tus apps tampoco funcionan.

Certificado propio

Con un comodín que ya compraste o que emites por DNS-01, LnkStart puede quedarse con el 443 y usar tu certificado. Se edita la configuración y se reinicia.

/etc/lnkstart/server.toml

[tls]
mode = "manual"
cert = "/etc/ssl/midominio/fullchain.pem"
key = "/etc/ssl/midominio/privkey.pem"

En el VPS

sudo systemctl restart lnkstart-server

Consola en el navegador

Tu servidor trae una consola web: desde ella añades, apruebas y retiras máquinas, proteges servicios con contraseña o token, cambias dominios, puertos y licencia, y ves quién hizo cada cambio. Vive en tu servidor, así que nada de lo que enseña nos llega, y no se entra con tu cuenta de lnkstart.com: tiene sus propios administradores. setup te pregunta si la enciendes; si no, se enciende con un comando.

En el VPS

sudo lnkstart server admin enable

El servidor en marcha la enciende solo en unos segundos, sin reiniciar, y te da un enlace de un solo uso que vale 10 minutos. Con él creas tu usuario: contraseña y el código de una app de autenticación del móvil. Desde ahí entras con ellos; a otros administradores (hasta 3) los invitas desde la consola, y cada uno pone su contraseña y su app. El enlace sigue sirviendo si pierdes el móvil.

Para que la consola sólo exista desde tus redes, añade --allow con ellas. Otro enlace más tarde: sudo lnkstart server admin link. Apagarla: sudo lnkstart server admin disable.

En el VPS

sudo lnkstart server admin enable --allow 203.0.113.7/32

Avisos: en «Ajustes → Avisos» pones un webhook (Slack, Discord, Mattermost, n8n…), un bot de Telegram o tu propio servidor de correo, y el servidor te avisa él mismo cuando una máquina o la app de un servicio siguen caídas unos minutos, cuando un certificado va a caducar o falla, y cuando la licencia está por caducar. Una vez al caer y otra al volver; también cuando una máquina nueva espera tu aprobación y cuando se instala solo un arreglo forzado. Con un botón para mandar una prueba. Sale de tu servidor hacia donde tú digas, nunca hacia nosotros.

Sin systemd, o a mano

En el VPS

sudo lnkstart server init --domain tunnels.midominio.com
sudo lnkstart server register --email tu@correo.com
sudo lnkstart server run

init escribe la configuración, register pide la licencia y run arranca el servidor en primer plano.

En el VPS

lnkstart service systemd --server -- server run

Imprime la unidad de systemd por si la quieres instalar tú.

Puertos del cortafuegos

PuertoPara qué¿Obligatorio?
TCP 443Visitantes y agentesSí
TCP 80Certificados de Let's Encrypt y redirección a HTTPSSí en modo automático
UDP 443QUIC: conexión más rápida de los agentesNo, pero se nota
UDP y TCP 53El certificado comodín (el registro de _acme-challenge)No: sin él, un certificado por nombre
Rango TCPServicios TCP públicos (SSH, bases de datos…)Sólo si los usas
Rango UDPServicios UDP públicos (VoIP, juegos…)Sólo si los usas

Copia y mudanza a otro VPS

Si el VPS se muere, lo rehaces en otro en unos minutos. Guarda de vez en cuando una copia (un fichero cifrado con tu contraseña: máquinas, servicios, certificados, licencia, consola y avisos) y tenla fuera del servidor:

En el VPS

sudo lnkstart server backup

En el VPS nuevo, instala lnkstart (sólo el binario), copia allí el fichero y restáuralo; después, el setup de siempre, que se queda con esa configuración y su licencia. Cambia el DNS de tu dominio al VPS nuevo y tus máquinas se reconectan solas, con su mismo código.

En el VPS nuevo

sudo lnkstart server restore lnkstart-backup.lnkbak
sudo lnkstart server setup tunnels.midominio.com tu@correo.com

Quitarlo del servidor

En el VPS

sudo systemctl disable --now lnkstart-server lnkstart-update.timer
sudo rm /etc/systemd/system/lnkstart-server.service /etc/systemd/system/lnkstart-update.*
sudo systemctl daemon-reload
sudo rm -r /etc/lnkstart /var/lib/lnkstart
sudo userdel lnkstart
sudo rm /usr/local/bin/lnkstart

Para el servidor y quita el servicio, el temporizador de los arreglos forzados, la configuración, los datos, su usuario del sistema y el binario.

En /var/lib/lnkstart están la licencia, las máquinas unidas, la protección de cada servicio y los certificados. Si vas a instalarlo en otro VPS con el mismo dominio, haz antes una copia (sudo lnkstart server backup, en «Copia y mudanza a otro VPS»): con ella, tus máquinas vuelven a entrar sin unirlas otra vez.

La licencia se queda en tu cuenta como un servidor que ya no da señales; no hay que hacer nada más. Los registros DNS de tunnels.midominio.com los quitas tú en tu proveedor.