Use case · Game server

Unturned dedicated server on bare metal: install, ports, GSLT, config

An Unturned dedicated server is Smartly Dressed Games' U3DS app, installed with SteamCMD as app 1110390 and run on Windows or Linux; the docs state there is no support for hosting on macOS. Players reach it on two consecutive UDP ports, 27015 and 27016 by default, and it needs a Game Server Login Token to appear in the Internet server list. Below: the Linux install, the three files that hold the settings, and how to keep saves, the token and the join password safe on a machine of your own.

See the machines

What U3DS asks of the host

Smartly Dressed Games documents the operating systems, the install method, the ports and the maintenance rules. It does not publish CPU, memory or disk figures. The table is what the official pages state.

ItemPer the official docs
Operating systemWindows and Linux; no support for hosting on macOS
InstallSteamCMD: login anonymous, then app_update 1110390
Several servers on one computerOnly possible with a SteamCMD install
PortsTwo consecutive: first for server list queries, second for game traffic; 27015 and 27016 by default
Internet listingA GSLT made for Unturned's app ID 304930
SavingNo built-in autosave; Save while running, Shutdown to save and close
RestartsOnce every 24 hours recommended

With no official sizing figure, size from what you run: the map, MaxPlayers, Workshop content and any plugin framework. Start one instance, watch the process under a full evening of players, and only then stack a second instance on the same box.

Why a whole machine suits it

Per SDG's SteamCMD page, more than one simultaneous server per computer needs the SteamCMD install, and each instance takes its own pair of ports. On a dedicated server the full core count and all of RAM serve those U3DS processes, with no neighbour on the host. You get root, so the firewall, the service user and the restart loop are yours to set.

Each machine includes one public IPv4 and an unmetered port: 1 Gbps on most lines, 500 Mbps on the rest, with no transfer allowance and no overage line. A fixed address matters for Unturned in particular. With the two UDP ports open on a public IP, players join by IP or by a domain name you point at it, and Steam's Favorites and History lists keep working. Rack servers and blades also carry an out-of-band controller (iLO, iDRAC or a Supermicro BMC) for a browser console when SSH is gone.

The machines are in New York, Miami, San Francisco, Amsterdam and Bucharest, on our own network, AS19624. Ping each city's test IP from where your players are on the server locations page, then pick the build on the game server hosting page. A racked machine is live about 30 minutes after the order is approved; a build to order takes 4-24 hours.

Ports and the three ways in

U3DS starts as a LAN server, joinable only through Steam invites or its 17-digit Server Code. For an Internet server SDG says to add a GSLT and then configure either Fake IP or port forwarding; configuring both is not necessary.

MethodWhat it needsAddress after a restartInternet list
Server CodeNothingNew code each launch unless a GSLT is setNot by itself
Fake IPUse_FakeIP true in Config.txtChanges after every restartYes, with a GSLT
Public IP, ports openUDP 27015 and 27016 reachableUnchangedYes, with a GSLT

On a home network the third method means router port forwarding. On a dedicated server with its own public IPv4 there is no router in the way, so in our view the clean choice is to open the two ports in the host firewall and leave Fake IP off. The Port command sets the first port and the server uses that value plus one. SDG recommends 27015 for the first instance, 27017 for the second and 27019 for the third. Each extra pair needs its own firewall rule, for example sudo ufw allow 27017:27018/udp.

Installing on Ubuntu

Valve's SteamCMD wiki calls running it as the root user a security risk and creates a dedicated steam account for it. The firewall goes up before the server first listens. Ubuntu is a one-click install on our Linux dedicated servers.

# as your own sudo user
sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd screen
sudo useradd -m -s /bin/bash steam
sudo ufw allow OpenSSH
sudo ufw allow 27015:27016/udp
sudo ufw enable

# as the steam user
sudo -iu steam
/usr/games/steamcmd +force_install_dir /home/steam/U3DS +login anonymous +app_update 1110390 validate +quit
cd ~/U3DS
screen -S unturned
./ServerHelper.sh +InternetServer/MyServer
  1. Accept the Steam licence prompt that the steamcmd package shows during install.
  2. Wait for Loading level: 100% in the console. The first launch generates the server folder Servers/MyServer.
  3. Type Shutdown to save and close, then edit the files in the next section.
  4. Start it again in the same screen session; detach with Ctrl+A then D, reattach with screen -r unturned.

Commands.dat, Config.txt and the Workshop list

Most settings cannot change while the server runs, so stop it before editing. Server/Commands.dat holds startup commands, one per line, and lines starting with // are comments.

// Servers/MyServer/Server/Commands.dat
Name Example Unturned Server
Map PEI
MaxPlayers 24
Port 27015
Perspective Both
Owner YourSteamID64
Password ChangeMe-LongRandomString
GSLT YourTokenFromSteam
// PvE
  • Config.txt in the server folder holds difficulty and advanced options, including Login_Token under the Browser section and Use_FakeIP. Empty values mean the default. Servers created before 3.25.8.0 have a Config.json that is converted at startup.
  • WorkshopDownloadConfig.json takes Workshop File IDs in its File_IDs list. The server installs and updates them at startup, and players download them as they connect. Curated maps come only through the Workshop.
  • Admins are set with Owner, the runtime Admin command, or Adminlist.dat. An admin can run commands from in-game chat with an @ or / prefix; Help lists them all.

The token and the password are secrets

The GSLT is created at steamcommunity.com/dev/managegameservers while signed in to your Steam account, using app ID 304930 and a memo naming the server. SDG lets you set it either as Login_Token in Config.txt or with the GSLT command in Commands.dat or on the command line. Use one of the files. A token or password passed on the command line shows in ps output to every user on the box and lands in shell history.

  • After the first launch, run chmod 600 on Commands.dat and Config.txt as the steam user, so the GSLT and the join password stay readable by that account alone.
  • Keep both out of any repository, ticket, screenshot or shared config dump.
  • Backups of the Servers folder carry the same secrets: store them with the same permissions.

Saves, updates and the daily restart

U3DS has no built-in autosave, so a crash loses everything since the last Save. SDG recommends restarting every 24 hours citing single-precision floating point time in much of its legacy code. Config.txt can schedule that: turn on Enable_Scheduled_Shutdown, give a local Scheduled_Shutdown_Time, and list chat warnings in Scheduled_Shutdown_Warnings. Enable_Update_Shutdown stops the server when a game update is out, and by default the server also shuts down after a timer when its Workshop map changes. Each of those exits needs something to bring it back. SDG's own Linux example is a loop that updates and relaunches; this version uses the install path above. Note that every exit, a crash included, sends the loop through the update step before the relaunch.

#!/usr/bin/env bash
# /home/steam/run-unturned.sh: update, run, relaunch after every exit (crashes too)
while true; do
  /usr/games/steamcmd +force_install_dir /home/steam/U3DS +login anonymous +app_update 1110390 validate +quit
  cd /home/steam/U3DS || exit 1
  ./ServerHelper.sh +InternetServer/MyServer
  echo "Server exited; relaunching in 60 s, Ctrl+C to stop"
  sleep 60
done

Start it inside screen as the steam user with bash /home/steam/run-unturned.sh. For a backup, type Save in the console first, then copy the Servers folder off the machine; the world on disk is then the one just written.

When this is the wrong place

  • A private world for you and a few friends, played now and then: SDG's simple setup launches U3DS on your own PC through Steam and joins by Server Code, no ports opened.
  • A Mac you already own: hosting on macOS is not supported.
  • The X-Gene ARM cartridge: it boots only Ubuntu 16.04 and 18.04, and SDG's docs describe no ARM build of U3DS, so in our reading it belongs on an x86 line.
  • Windows is supported by U3DS through the .bat launcher, but on our machines Windows is licensed per core on top of the machine. The Linux images carry no licence line.

Internet servers must also follow SDG's Server Hosting Rules. For example, a server may not sell access to vanilla premium content such as Gold Upgrade benefits or Stockpile cosmetics. If something breaks on the machine itself, support answers by phone, chat and ticket around the clock.

Questions

Can U3DS run on a Linux server?

Yes. SDG's docs say servers can be hosted on Windows and Linux, and they give a Linux launch command, ./ServerHelper.sh +InternetServer/MyServer, run from the U3DS folder. Hosting on macOS is not supported.

Which ports does an Unturned server use?

Two consecutive UDP ports: the first answers server list queries and the second carries game traffic. The defaults are 27015 and 27016. Set the first with the Port command; a second instance on the same machine should start at 27017, with 27017-27018/udp opened in the firewall.

Is a Game Server Login Token required?

For an Internet server, yes. Lacking one, SDG treats the server as anonymous, and the Internet list omits it. A GSLT also keeps the Server Code the same across launches. Create one at Steam's Manage Game Servers page, entering app ID 304930.

How many Unturned servers fit on one machine?

SDG publishes no per-server CPU or memory figure, so measure one instance under load before adding more. Several instances need the SteamCMD install, a separate ServerID each, and their own port pair: 27015, 27017, 27019 and so on, each pair allowed through ufw.

Why did the world roll back after a crash?

U3DS has no built-in autosave. Only the Save command or a clean Shutdown writes the world to disk. A scheduled daily shutdown in Config.txt, plus a loop that relaunches the server, limits how much a crash can take.

How do I add a Workshop map?

Put the map's File ID, from its Steam Workshop URL, in the File_IDs list of WorkshopDownloadConfig.json. Then set Map in Commands.dat to that map's name. The server downloads the map and its dependencies at startup, and players get them as they connect.

Put U3DS on a machine of its own

Root on a single-tenant server, a public IPv4 for both UDP ports, unmetered traffic, five locations on AS19624.

See the machines

Related on Server Room

Other use cases