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.
| Item | Per the official docs |
|---|---|
| Operating system | Windows and Linux; no support for hosting on macOS |
| Install | SteamCMD: login anonymous, then app_update 1110390 |
| Several servers on one computer | Only possible with a SteamCMD install |
| Ports | Two consecutive: first for server list queries, second for game traffic; 27015 and 27016 by default |
| Internet listing | A GSLT made for Unturned's app ID 304930 |
| Saving | No built-in autosave; Save while running, Shutdown to save and close |
| Restarts | Once 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.
| Method | What it needs | Address after a restart | Internet list |
|---|---|---|---|
| Server Code | Nothing | New code each launch unless a GSLT is set | Not by itself |
| Fake IP | Use_FakeIP true in Config.txt | Changes after every restart | Yes, with a GSLT |
| Public IP, ports open | UDP 27015 and 27016 reachable | Unchanged | Yes, 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
- Accept the Steam licence prompt that the
steamcmdpackage shows during install. - Wait for
Loading level: 100%in the console. The first launch generates the server folderServers/MyServer. - Type
Shutdownto save and close, then edit the files in the next section. - 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.txtin the server folder holds difficulty and advanced options, includingLogin_Tokenunder the Browser section andUse_FakeIP. Empty values mean the default. Servers created before 3.25.8.0 have aConfig.jsonthat is converted at startup.WorkshopDownloadConfig.jsontakes Workshop File IDs in itsFile_IDslist. 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 runtimeAdmincommand, orAdminlist.dat. An admin can run commands from in-game chat with an@or/prefix;Helplists 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 600onCommands.datandConfig.txtas 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
Serversfolder 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
.batlauncher, 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.