RE:NODE

Guides11 min read

Rust dedicated server setup: install and ports

Install RustDedicated with SteamCMD, write a startup line that works, open the right ports and get through the first boot and map generation without surprises.

0 readers

A Rust dedicated server is the free RustDedicated program (Steam app 258550), installed with SteamCMD and configured almost entirely by the +convar value pairs on its launch line. It needs one UDP port for players, a query port for the server browser, a TCP port for RCON, 8-16 GB of memory depending on map size and population, and a fast CPU core. The first start generates the map, which takes minutes and is the most memory-hungry moment of the server's life. Everything below is the detail behind those sentences, in the order you will need it.

What RustDedicated is and how hosting it works#

Facepunch ships the server as a separate Steam app with no graphics and no menus. It runs on Windows (RustDedicated.exe) and Linux (RustDedicated), and both are first-class: most community and hosted servers run the Linux build. There is no Steam game-server token to request, unlike CS2 or Unturned - a Rust server registers with the Steam master list on its own.

Three ideas explain nearly everything about how a Rust server is put together:

  • The identity folder. +server.identity "main" names a folder under server/. The map, the save, the player databases and the config files all live there. Change the identity and the server starts a brand-new world in a new folder, without deleting the old one.
  • Convars on the command line. Settings are console variables (server.hostname, server.worldsize, decay.scale). You set them on the launch line with a + in front, in server/<identity>/cfg/server.cfg without one, or live in the console. Some only make sense at startup - the port, the identity, the map - and belong on the launch line.
  • The monthly update. On the first Thursday of each month Facepunch ships a client and server update together. Until you update, players cannot join, and the old map will not load. That cadence shapes everything from how you install to how you mod. The calendar is covered in the monthly force wipe schedule.

The server browser has three tabs that matter to you. Official servers are Facepunch's own. Community is for servers that play like vanilla. Modded is for anything that changes gameplay - gather rates, kits, stack sizes. Where you are listed is partly your choice and partly decided by what you install; gather rates and kits on a modded server explains the rules.

Requirements and resource usage#

Rust is one of the heaviest mainstream survival games to host. Memory scales with world size and with what players build, and both grow through a wipe cycle. Size for the last day before a wipe, not the first.

SetupWorld sizeRAMCPU
Friends, under 10 players2000-30006-8 GB2 fast cores
Small community, 20-503000-35008-12 GB2-3 fast cores
Busy community, 75-1253500-425012-16 GB3-4 fast cores
Large modded, 150+4250-450016-24 GB4+ fast cores
  • CPU: the simulation runs mostly on one main thread, so clock speed and per-core performance decide how many players and entities the server can carry. Extra cores help with networking, saving and plugin compilation, not with the main loop. CPU vs RAM for game servers is the longer argument.
  • Disk: the install is roughly 10 GB and grows over the years. Each wipe's save files are tens to a few hundred MB, plus backups. Plan 25-40 GB to be comfortable with Oxide or Carbon, logs and a couple of retained saves.
  • Network: modest per player, but Rust reacts badly to packet loss. A server in central Europe serves the continent well; players on other continents will feel the distance whatever you do.

The figures are approximate because two servers of the same size can differ by gigabytes depending on how much players build. Server performance and entity count covers what actually drives the numbers, and the planned how much RAM a Rust server needs goes deeper on sizing.

Installing with SteamCMD#

On a machine you manage, SteamCMD installs and updates the server. Anonymous login works; you do not need a Steam account that owns Rust.

bash
$ mkdir -p /home/rust/server$ steamcmd +force_install_dir /home/rust/server +login anonymous \    +app_update 258550 validate +quit

The order of arguments matters: +force_install_dir must come before +login, or current SteamCMD builds warn and may install to the wrong place. validate checks every file against the manifest. It is slow, but it is the only reliable fix for a partial update and the right default on wipe day. SteamCMD explained covers the tool itself in depth.

Facepunch publishes a staging branch alongside the release build. It is the next month's update, early, and it is where you test plugins before the force wipe:

bash
$ steamcmd +force_install_dir /home/rust/staging +login anonymous \    +app_update 258550 -beta staging validate +quit

Install staging into a separate directory. Release clients cannot join a staging server and vice versa, so it is a test bench, not a second public server.

The startup line, parameter by parameter#

This is a complete launch line for a Linux server. Windows is identical apart from the executable name and the line continuation characters.

start.sh
#!/bin/bashcd /home/rust/serverexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/RustDedicated_Data/Plugins/x86_64./RustDedicated -batchmode -nographics -logfile - \  +server.identity "main" \  +server.port 28015 \  +server.queryport 28017 \  +rcon.port 28016 +rcon.web 1 +rcon.password "change-me-long-random" \  +app.port 28082 \  +server.level "Procedural Map" \  +server.seed 1234567 \  +server.worldsize 3500 \  +server.maxplayers 75 \  +server.hostname "Longship | EU | Biweekly" \  +server.description "Vanilla. Wipes every other Thursday. Discord in the URL." \  +server.url "https://example.com" \  +server.saveinterval 300
ParameterWhat it does
-batchmode -nographicsUnity flags: no window, no renderer
-logfile -Write the log to standard output instead of a file
+server.identityNames the folder under server/ that holds this world
+server.portThe game port players connect to, UDP
+server.queryportThe port the Steam browser queries, UDP
+rcon.port, +rcon.web, +rcon.passwordRemote console over WebSocket
+app.portThe Rust+ companion app port, TCP
+server.levelProcedural Map, Barren, or a fixed map such as HapisIsland
+server.seed, +server.worldsizeWhich procedural map, and how big
+server.maxplayersSlots; extra players wait in the queue
+server.hostnameThe name in the browser - the most-read text you own
+server.saveintervalSeconds between world saves

A few rules save hours. Quote any value with spaces in it. Do not put a + in front of lines in server.cfg - that syntax is only for the launch line. And keep the map-defining convars (level, seed, worldsize) on the launch line, so that what you see in your script is what generated the map. server.cfg and convars covers everything that belongs in the config file instead.

If you leave out +server.seed, the server picks one and keeps using it for that save. If you change the seed or size later, the server generates a new map - it does not convert the old one.

Ports and firewall#

PortProtocolPurpose
28015UDPGame traffic, set by server.port
28017UDPSteam query for the browser, set by server.queryport
28016TCPRCON, a WebSocket when rcon.web 1
28082TCPRust+ companion app, set by app.port

The numbers above are conventions, not law. What matters is that every port is different and reachable with the right protocol. The usual mistakes are opening the game port as TCP only, letting the query port collide with RCON, and forgetting the query port entirely - the server then works by direct connect and never appears in the browser.

By default the Rust+ port is derived from the game port (28015 plus 67 gives the familiar 28082), so if you move the game port, set app.port explicitly to a port you actually have. An unreachable app port does no harm beyond the companion app failing to pair, which players will notice and report as "Rust+ is broken". RCON is the port worth thinking hardest about, because it is a password-protected admin interface on the open internet. Rust RCON and WebRCON is the full treatment and game server ports explained covers the background on query ports.

Players connect from the F1 console with client.connect 203.0.113.10:28015, or through the browser once the server is listed. Listing usually takes a few minutes after startup; direct connect works immediately.

First boot and map generation#

The first start is not representative. The server downloads nothing further, but it has to generate the whole procedural map: terrain, topology, monuments, roads, rivers, then spawn populations of resources and animals. On a 3500 map that takes a few minutes on a fast CPU; on a 4500 map it can take much longer, with long stretches where the log does not obviously move.

What you will see, roughly in order:

  1. Asset and prefab bundles loading.
  2. Map generation messages, then the map file being written as proceduralmap.<size>.<seed>.<version>.map.
  3. Spawn populations filling.
  4. The server registering with Steam, and a line saying server startup is complete.

Only after the last step is it worth trying to connect. Starting the client early produces timeouts that look like a network problem.

Two things go wrong here more than anywhere else. The first is memory: generation briefly needs more than the finished map does, so a server that is fine in play can be killed during the first boot. If the first start dies and the second, with a smaller worldsize, succeeds, that was the cause. The second is disk: generation writes the map and the first save, so a nearly full disk fails here before it fails anywhere else.

Later starts load the existing .map and .sav files and are much quicker. The save is written every server.saveinterval seconds and on a clean shutdown with the quit command.

Making yourself admin and the first hour#

Grant yourself owner status from the server console with your SteamID64, then write it to disk:

code
ownerid 76561198012345678 "YourName" "server owner"server.writecfg

Reconnect after granting it; auth level is applied when you join. Without server.writecfg the grant lives only in memory and vanishes on the next restart, which is the classic "my admin disappeared" report. The full list of commands is in Rust admin commands.

Worth doing in the first hour:

  1. Set server.description, server.url and a header image so the server info panel is not blank.
  2. Decide your wipe cadence and put it in the hostname.
  3. Decide whether you are vanilla or modded. If modded, install Oxide (uMod) or Carbon before you open the doors, not after.
  4. Take a backup of the identity folder once the world has generated, so you have a clean starting point.

Running it on a panel or your own machine#

On your own Linux box, run the start script under systemd or inside tmux or screen so it survives your SSH session, and wrap it in a loop or a restart policy so a crash brings it back. On Windows, a .bat file with a goto loop does the same job. Either way you own the update process: stop, SteamCMD, start.

On a Pterodactyl-based panel the launch line is assembled for you from the Startup tab's variables (hostname, world size, seed, ports), and the update typically happens on start. Many Rust eggs drive the panel console through WebRCON rather than standard input, so read the egg's notes before turning rcon.web off.

RE:NODE's panel is built on Pterodactyl and Wings. Ports are added and removed on the Network tab, game variables and environment variables live on the Startup tab, and the Schedules tab runs a cron expression with ordered tasks such as a backup followed by a restart. Rust is not in the current game catalogue, so if you want to run it yourself on hardware we manage, the VDS line is the honest option: a whole machine with 8, 16 or 24 GB of memory where you install RustDedicated exactly as above.

Troubleshooting first-start problems#

The server exits immediately on Linux. Check the library path line and that RustDedicated is executable. Run it from the install directory, not from elsewhere.

It starts but never shows in the browser. The query port is closed, wrong protocol, or the same number as another port. Test with direct connect first - if that works, it is the query port.

Players get "Connection attempt failed". The game port is not reachable over UDP, or players are using the RCON or query port in the connect command.

"Disconnected: Wrong connection protocol". Server and client builds differ. After a monthly update, run SteamCMD with validate and restart; if you are on staging, switch back to release.

The first start is killed with no error. Memory during map generation. Reduce server.worldsize or give it more memory, then try again.

A new map appeared after a restart. The seed, world size or identity changed, or the update changed the save version. The .map file name tells you which seed and size the server last generated.

FAQ#

How much does it cost to run a Rust server?

The software is free; you pay for the machine. Rust needs more memory than most games - 8 GB is a realistic floor for a public server and 12-16 GB is normal for a busy one - so it sits at the upper end of game server pricing. How much a game server costs compares the options.

Can I run a Rust server on Windows?

Yes, the Windows build is fully supported and some admin tools are Windows-only. Linux is more common for hosting because it uses less memory for the operating system and automates more easily.

Do I need to own Rust to host a server?

No. SteamCMD downloads app 258550 with anonymous login. You need to own the game to join, not to host.

How many players can a Rust server hold?

server.maxplayers has no small hard ceiling; the real limit is CPU and memory. A well-sized server handles 100-200 players, but most community servers are healthier at 50-100 with a world size to match.

What is the difference between server.port and server.queryport?

server.port carries game traffic. server.queryport answers the Steam browser's questions about name, map and player count. They must be different ports, and both are UDP.

Why does my Rust server use more memory every day?

Players build, and every wall, box and deployable is an entity the server keeps in memory. Usage climbs through a wipe cycle and resets when you wipe the map.


Comments

Completely anonymous: no account, no email, no cookie. We store the name you type, the text and the time - nothing else. Links are limited and markup is not rendered.

0/2000