Skip to content

Game Servers

4 Topics 4 Posts

This category can be followed from the open social web via the handle game-servers@forum.losdelring.net

Subcategories


  • 2 2
    2 Topics
    2 Posts
    A
    Sin Docker, en Bazzite el reto es que es un sistema inmutable (rpm-ostree) — no puedes hacer dnf install steamcmd directo en el sistema base. La forma limpia es usar Distrobox (que ya viste mencionado en el banner de bienvenida), que te da un contenedor Ubuntu completo donde SteamCMD funciona sin fricciones, pero el servidor corre igual de "nativo" que si estuviera instalado directo. 1. Crear el distrobox distrobox create --name palworld --image ubuntu:24.04 distrobox enter palworld Todo lo que sigue es dentro del distrobox (verás el prompt cambiar). 2. Instalar SteamCMD sudo dpkg --add-architecture i386 sudo apt update sudo apt install software-properties-common -y sudo add-apt-repository multiverse -y sudo apt update sudo apt install steamcmd -y Te va a pedir aceptar la licencia de Steam — acepta. 3. Descargar el servidor de Palworld mkdir -p ~/Palworld-Server ~/.steam/steamcmd/steamcmd.sh +force_install_dir ~/Palworld-Server +login anonymous +app_update 2394010 validate +quit Esto descarga varios GB, tarda un rato. 4. Primer arranque (genera los archivos de configuración) cd ~/Palworld-Server ./PalServer.sh Déjalo correr unos 30-60 segundos, luego páralo con Ctrl+C. Esto genera Pal/Saved/Config/LinuxServer/PalWorldSettings.ini. 5. Configurar el servidor nano Pal/Saved/Config/LinuxServer/PalWorldSettings.ini Busca la línea larga OptionSettings=(...) y ajusta lo que te interese, por ejemplo: ServerName="Los Del Ring Palworld" ServerDescription="" AdminPassword="cambia_esto" ServerPassword="" ServerPlayerMaxNum=8 PublicIP="" PublicPort=8211 RCONEnabled=True 6. Arrancar el servidor real ./PalServer.sh port=8211 players=8 -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS Esos flags (-useperfthreads, etc.) son los recomendados oficialmente para mejor rendimiento multi-hilo. 7. Salir del distrobox sin matar el servidor Si quieres que siga corriendo aunque cierres la terminal, usa screen o tmux dentro del distrobox antes de arrancar: screen -S palworld ./PalServer.sh port=8211 players=8 -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS Ctrl+A luego D para desconectarte de la sesión sin cerrar el servidor. Para volver a verla: distrobox enter palworld screen -r palworld 8. Firewall y port forwarding Igual que antes — en el host (no dentro del distrobox, las reglas de firewalld son del sistema): sudo firewall-cmd --add-port=8211/udp --permanent sudo firewall-cmd --reload El port forwarding del MikroTik que ya tienes de antes (Palworld Game UDP 8211) sirve igual, sin cambios.
  • 1 1
    1 Topics
    1 Posts
    A
    ¡Buenas noticias — Hytale es mucho más simple que Windrose. Ya salió en Early Access (enero 2026), tiene servidor dedicado oficial en Java nativo (no necesita Wine ni Docker con trucos raros), y corre nativo en Linux sin problemas. Además vi que ya tenías una regla vieja para "Hytale Server" puerto 5520 UDP en tu MikroTik — coincide justo con el puerto que usa oficialmente. Diferencias clave vs Windrose Es Java 25, no un binario Windows envuelto en contenedor. Usa QUIC sobre UDP exclusivamente — nada de TCP, así que el firewall es más simple. Puerto por defecto: 5520/UDP. Requiere autenticación de tu cuenta Hytale (device code, como Netflix/YouTube en un TV). 1. Instalar Java 25 En Bazzite lo más limpio es via brew (viene incluido): brew install openjdk@25 Verifica: java --version Debería mostrar algo como openjdk 25.0.1 ... LTS. 2. Crear carpeta y descargar el servidor La forma recomendada para producción es el Hytale Downloader CLI: mkdir -p ~/Hytale-Server cd ~/Hytale-Server curl -LO https://downloader.hytale.com/hytale-downloader.zip unzip hytale-downloader.zip chmod +x hytale-downloader ./hytale-downloader Esto te deja los archivos del servidor ya listos (jar, assets, scripts de arranque). 3. Autenticar el servidor Arranca el servidor y sigue el flujo de autenticación por dispositivo: ./start.sh Dentro de la consola del servidor: /auth login device Te va a mostrar algo así: Visit: https://accounts.hytale.com/device Enter code: ABCD-1234 Entras desde tu navegador (o celular), pones el código, y listo — el servidor queda autenticado permanentemente (guarda las credenciales en auth.enc/auth.key). ️ Límite: 500 servidores por licencia del juego — para un servidor privado normal no es problema. 4. Firewall (host Bazzite, no el router todavía) Bazzite usa firewalld: sudo firewall-cmd --add-port=5520/udp --permanent sudo firewall-cmd --reload 5. Port forwarding en el MikroTik Ya viste que tenías esta regla armada de antes (probablemente de un intento previo): ;;; Hytale Server chain=dstnat action=dst-nat to-addresses=192.168.88.254 to-ports=5520 protocol=udp dst-port=5520 Solo verifica que esté habilitada (sin bandera X) y que tenga in-interface=ether1. Si no lo tiene, corrígela: /ip firewall nat print Y necesitas la regla de filter para permitir el forward (igual que hicimos con Windrose): /ip firewall filter add chain=forward protocol=udp dst-port=5520 dst-address=192.168.88.254 action=accept place-before=0 comment="Allow Hytale UDP" Nota importante: Hytale usa QUIC, que maneja NAT traversal bastante bien — pero si tienes NAT simétrico (poco común en routers domésticos normales), podrías tener problemas. No debería ser tu caso con MikroTik. 6. Ajustar memoria/rendimiento (opcional) Crea jvm.options en la carpeta raíz (junto a start.sh cat > jvm.options << 'EOF' -Xms2G -Xmx4G -XX:+UseG1GC EOF 7. Arranque automático (systemd) A diferencia de Windrose, aquí no necesitas Podman ni --userns=keep-id — es Java corriendo directo. Podemos armarte un servicio systemd normal (usuario, sin root) cuando quieras.
  • 1 1
    1 Topics
    1 Posts
    A
    Cómo montar un servidor dedicado de Windrose en Linux (Bazzite + Podman) Guía paso a paso para levantar un servidor privado de Windrose usando la imagen Docker oficial (windroseserver/windroseserver) en un sistema Linux tipo Bazzite/Fedora Atomic con Podman rootless. Documentado a partir de una instalación real, incluyendo los errores que salieron y cómo se resolvieron. 0. Requisitos previos Linux con Podman (o Docker) instalado. Al menos ~6 GB libres (la imagen pesa varios GB por el payload del juego). Puerto 7777 TCP/UDP disponible. Acceso al router (para exponer el servidor a internet, opcional). Verifica qué tienes disponible: which podman docker En Bazzite, Podman viene de fábrica con un alias docker='podman', así que ambos comandos funcionan igual. 1. Preparar la carpeta del servidor mkdir -p ~/Windrose-Server/Saved cd ~/Windrose-Server 2. Primer arranque SIN configuración propia (para generar IDs válidos) Importante: no crear el ServerDescription.json a mano desde cero con campos vacíos (PersistentServerId, WorldIslandId, etc. en ""). Eso provoca un crash tipo: Fatal error: [R5DataKeeperForServerCoop.cpp:154] InitializeBLServer - Cannot init Coop NetServer Condition: 'ServerDescription.WorldIslandId.IsValid()' En su lugar, deja que el propio servidor genere el archivo la primera vez: podman run --user ue_user --name WindroseServer \ -p 7777:7777/tcp -p 7777:7777/udp \ -d \ -v ~/Windrose-Server/Saved:/home/ue_user/app/R5/Saved:Z \ docker.io/windroseserver/windroseserver:latest sleep 20 podman stop WindroseServer Copia el archivo generado a tu carpeta local: podman cp WindroseServer:/home/ue_user/app/R5/ServerDescription.json ~/Windrose-Server/ServerDescription.json Este archivo ya trae PersistentServerId real y otros valores válidos generados por el motor — no los toques. 3. Editar solo los campos que quieres personalizar # Nombre del servidor sed -i 's/"ServerName": *"[^"]*"/"ServerName": "TU_NOMBRE_AQUI"/' ServerDescription.json # Habilitar conexión directa por IP (necesario para Docker/Podman) sed -i 's/"UseDirectConnection": false/"UseDirectConnection": true/' ServerDescription.json sed -i 's/"DirectConnectionServerPort": -1/"DirectConnectionServerPort": 7777/' ServerDescription.json Campos relevantes en ServerDescription_Persistent: Campo Qué hace ServerName Nombre visible del servidor MaxPlayerCount Jugadores máximos IsPasswordProtected / Password Contraseña de acceso UseDirectConnection true = conexión por IP directa. false = conexión por código de invitación (relay P2P vía Epic Online Services) DirectConnectionServerPort Puerto a usar (7777 por defecto) InviteCode Código de invitación — solo funciona si UseDirectConnection está en false ️ UseDirectConnection y el código de invitación son mutuamente excluyentes. No puedes usar ambos al mismo tiempo. Con true, el invite code queda inútil aunque tenga un valor válido. Para hosting dedicado con IP fija, true (Direct IP) es lo recomendado: menos latencia, no depende del relay de Epic/AWS. 4. Borrar el contenedor de prueba y lanzar el definitivo Clave: usar --userns=keep-id en Podman rootless. Sin esto, el UID ue_user (1000) dentro del contenedor no mapea al UID real del host, y el servidor no puede reescribir ServerDescription.json cuando genera el mundo — causa el mismo crash del paso 2 pero después de crear el mundo: open('.../ServerDescription.json', ...) failed: errno=13 (Permission denied) Cannot save ServerDescription file. Comando final: podman rm -f WindroseServer podman run --user ue_user --userns=keep-id --name WindroseServer \ -p 7777:7777/tcp -p 7777:7777/udp \ -d \ -v ~/Windrose-Server/Saved:/home/ue_user/app/R5/Saved:Z \ -v ~/Windrose-Server/ServerDescription.json:/home/ue_user/app/R5/ServerDescription.json:Z \ docker.io/windroseserver/windroseserver:latest El flag :Z en los volúmenes es necesario en sistemas con SELinux (Fedora/Bazzite) para evitar errores de permisos. 5. Verificar que está corriendo bien podman logs -f WindroseServer Busca estas líneas como señal de éxito: IpNetDriver listening on port 7777 Bringing World .../GenlandiaMulty up for play Server. Change state LoadedIslandData => WaitingForFirstAccount Para ver logs sin quedarte pegado en tiempo real: podman logs --tail 100 WindroseServer Guardar log completo a archivo: podman logs WindroseServer > ~/Windrose-Server/server.log 6. Ver nombre, contraseña e invite code guardados grep -E '"ServerName"|"Password"|"IsPasswordProtected"|"InviteCode"' ~/Windrose-Server/ServerDescription.json 7. Cómo conectan tus amigos En la misma red local: IP_LOCAL_DEL_HOST:7777 (consíguela con ip addr show | grep 'inet ' | grep -v 127.0.0.1) Remotos (por internet): necesitan la IP pública del host, más el port forwarding hecho en el router (ver sección 8). curl ifconfig.me En el juego: Play → Connect to Server → Direct IP tab → pegan IP:7777. 8. Port forwarding en router MikroTik (RouterOS) Reemplaza ether1 por tu interfaz WAN y 192.168.88.254 por la IP local del host (idealmente fijada por DHCP lease estático). Fijar la IP del host (opcional pero recomendado): /ip dhcp-server lease print /ip dhcp-server lease make-static <número_de_la_entrada> Reglas NAT (port forward), TCP y UDP: /ip firewall nat add chain=dstnat protocol=tcp dst-port=7777 in-interface=ether1 action=dst-nat to-addresses=192.168.88.254 to-ports=7777 comment="Windrose TCP" /ip firewall nat add chain=dstnat protocol=udp dst-port=7777 in-interface=ether1 action=dst-nat to-addresses=192.168.88.254 to-ports=7777 comment="Windrose UDP" Reglas de firewall filter (deben quedar antes de cualquier drop general en la cadena forward): /ip firewall filter add chain=forward protocol=tcp dst-port=7777 dst-address=192.168.88.254 action=accept place-before=0 comment="Allow Windrose TCP" /ip firewall filter add chain=forward protocol=udp dst-port=7777 dst-address=192.168.88.254 action=accept place-before=0 comment="Allow Windrose UDP" Verificar: /ip firewall nat print /ip firewall filter print Revisar CGNAT (paso crítico): compara la IP de tu interfaz WAN... /ip address print ...contra la que te da curl ifconfig.me desde el host, o whatismyip.com. Si son diferentes, hay CGNAT/doble NAT de por medio y el forwarding no funcionará desde afuera sin pasos extra (pedir IP pública al ISP, o usar una alternativa tipo VPN/túnel). Resumen de comandos útiles # Ver contenedores corriendo podman ps # Ver logs en vivo podman logs -f WindroseServer # Reiniciar el servidor (tras editar ServerDescription.json) podman rm -f WindroseServer podman run --user ue_user --userns=keep-id --name WindroseServer \ -p 7777:7777/tcp -p 7777:7777/udp -d \ -v ~/Windrose-Server/Saved:/home/ue_user/app/R5/Saved:Z \ -v ~/Windrose-Server/ServerDescription.json:/home/ue_user/app/R5/ServerDescription.json:Z \ docker.io/windroseserver/windroseserver:latest # Parar / iniciar sin borrar podman stop WindroseServer podman start WindroseServer Notas finales La imagen oficial (windroseserver/windroseserver) corre el binario nativo Linux del motor (no requiere Wine). Actualizar el servidor: podman pull docker.io/windroseserver/windroseserver:latest y volver a lanzar el contenedor (los datos del mundo persisten en Saved/ porque está montado como volumen). Pendiente para el futuro: configurar arranque automático con Quadlet (systemd nativo de Fedora Atomic/Bazzite) para que el servidor levante solo al encender la máquina.