How to Set Up an Arma 3 Dedicated Server
A first Arma 3 server usually fails on something small: a Steam login SteamCMD will not accept, a server.cfg the server never reads, or a UDP port that never reaches the machine. Here is the order that takes you from an empty folder to a running mission your friends can join, whether you rent a panel or host it yourself.
Use the stable branch, one official mission and no mods for the first boot. That gives you a known baseline and makes every later problem narrower.
Arma 3 does not magically load a default server.cfg. If your launch line does not include -config=..., none of your server settings apply.
Keep SteamCMD separate from the Steam client, and the server separate from any local Arma 3 client install. That avoids file clashes and a known case where the server pulls in full client data.
The core incoming block is UDP 2302 to 2306, plus the server must answer ping. If friends can join on LAN but not from outside, look at router forwarding and real IPv4 first.
Choose rent or self-host, then follow one fixed order
For a first server, the safest approach is to treat the job as a pipeline rather than a pile of settings. Most failed first launches come from doing everything at once: mods, custom missions, port guessing and config edits without a clean baseline.
- Choose a rented panel or a self-hosted machine.
- Install the dedicated server package with SteamCMD as app
233780on a separate Steam account. - Keep the server in its own folder, separate from SteamCMD and separate from any local Arma 3 client.
- Create a server config file and point
-configat it. - Open UDP
2302to2306and allow ping. - Pick one official mission for the first test.
- Join from a client on the same branch, then use
#loginto become admin.
A rented panel usually handles the repetitive parts: SteamCMD updates, service start and stop, port assignment, and often a config editor. What it cannot skip is the logic of the server itself. You still need a mission, sensible passwords, the same branch on server and clients, and matching mods for every player who joins. If you want to compare panel-based options, the best Arma 3 server hosts page is the sensible place to start.
Self-hosting gives you full control, but it makes the network and operating system your problem. Official minimum hardware is a 2.4 GHz dual-core CPU, 2GB RAM and 32 GB HDD; recommended is a 3.5 GHz quad-core, 4GB RAM and a 32 GB SSD. Arma 3 server work is heavily concentrated on one or two threads, with one thread handling all AI, so faster core speed matters more than simply adding more cores. More cores help with the operating system, database tools or extras, but they do not fix a slow main simulation thread.
You also need a real IPv4 connection. Arma 3 dedicated does not support IPv6 or DS-Lite, so some home broadband lines are ruled out before you begin. If you only need a very small casual setup on the same PC, the Arma 3 Launcher can also host in server mode, but a separate dedicated install is far easier to repeat, update and troubleshoot.
Install on Windows with SteamCMD
SteamCMD needs a real Steam login, not an anonymous one. The usual recommendation is a separate Steam account with no purchases on it purely for the server, because SteamCMD caches the login on the machine and one account cannot be logged in from two places at once. That matters if the same account is also used to play the game on your client PC.
Keep these as separate folders: one for SteamCMD, one for the dedicated server, and one for any local Arma 3 client install. That separation stops file conflicts and makes updates cleaner. It also makes it obvious which folder you are backing up, launching and editing.
On the first run, Steam Guard normally sends a code by email. It is also normal for the script to need running more than once: one pass to authorise, one for SteamCMD to update itself, and another to actually download the server.
@echo off cd /d C:\SteamCMD steamcmd +login YOUR_SERVER_STEAM YOUR_PASSWORD +force_install_dir C:\Arma3Server +app_update 233780 validate +quit
Look at the flow below as the minimum working chain: install, point at config, open ports, then join and administer.
no game purchase needed
own folder
name, passwords, mission
-port, -profiles, -name
plus ping
pick the mission
If the Arma 3 client is installed on the same machine, there is a known issue where the server can load the full client data instead of the dedicated package. The workaround is simple: start the server with an empty -mod= parameter. On the same machine, it is also wise to start the server before opening the Steam client, because Steam port conflicts can stop the client connecting back to the local server.
Install on Linux without running as root
On Linux, create a dedicated non-root user and run the server under that account. That keeps the server files and logs contained, avoids root-owned leftovers, and limits the damage if a tool or script behaves badly.
useradd -m -s /bin/bash steam su - steam mkdir steamcmd cd steamcmd # download steamcmd_linux.tar.gz into this folder first tar -xvzf steamcmd_linux.tar.gz ./steamcmd.sh # now at the Steam> prompt: force_install_dir ./arma3/ login YOUR_SERVER_STEAM app_update 233780 validate exit # back in the shell: create the profile folders mkdir -p ~/.local/share/"Arma 3" mkdir -p ~/.local/share/"Arma 3 - Other Profiles"
A 64-bit Linux install may still need the usual 32-bit libraries for SteamCMD. If SteamCMD will not start or download correctly, that is one of the first things to check.
Profile handling is the main Linux quirk here: -profiles= is broken, so the profile is created automatically at ~/.local/share/Arma 3 - Other Profiles/server/server.Arma3Profile. That means two things. First, do not waste time wondering why your chosen profile folder stays empty. Second, remember that difficulty and related profile settings live there, not beside your launch script.
cd ~/steamcmd/arma3 ./arma3server_x64 -name=server -config=server.cfg
The process stays attached to the terminal, so it stops when your SSH session closes unless you launch it inside tmux or screen. To stop it cleanly, use Ctrl+C. If you add mods later, Linux expects -mod= paths to be relative and within or below the Arma 3 directory.
Know which files the server reads and creates
These are the files worth learning first. If you know what each one controls, you can usually tell within minutes whether a problem is config, mission, mod or launch-line related.
| You want to… | server.cfg | Profile | basic.cfg | Missions | keys |
|---|---|---|---|---|---|
| Rename the server or set passwords | Yes | ||||
| Set the mission rotation | Yes | Partly | |||
| Add your own mission | Yes | ||||
| Use a Custom difficulty | Partly | Yes | |||
| Tune bandwidth for a busy server | Yes | ||||
| Let signed mods pass signature checks | Partly | Yes |
| File or folder | What it controls | Where it lives |
|---|---|---|
server.cfg (name can be anything) | Server name, passwords, player cap, BattlEye, signatures, mission rotation and other core server rules | Anywhere you choose, as long as your launch line points to it with -config= |
server.Arma3Profile or <name>.Arma3Profile | Difficulty-related settings tied to the profile name | Windows: under the -profiles folder in Users\<name>\; Linux: ~/.local/share/Arma 3 - Other Profiles/server/ |
Arma3.cfg | Engine and bandwidth-related settings, including the basic network config | Created on first run in the profile area |
MPMissions\ | Mission .pbo files the server can load | Inside the server install folder |
arma3.rpt | Debug log for each start; the first place to look for parse errors, missing files and launch issues | Created at startup in the profile area |
keys\ | Public keys used for mod signature checks | Inside the server install folder |
The important rule is this: server.cfg does not have a magic default name. You can call it almost anything, but the server only reads the file named in -config=. If you leave -config out, no server config is loaded at all, which is why so many new owners think the server is “ignoring” their settings.
Write a first server.cfg that only does the essentials
Your first config should do as little as possible while still proving the server works. That means name, join password if you want one, admin password, sane anti-cheat defaults, a player cap and one known mission.
hostname = "Example Co-op Server";
password = "examplejoin";
passwordAdmin = "exampleadmin";
maxPlayers = 16;
persistent = 1;
BattlEye = 1;
verifySignatures = 2;
kickDuplicate = 1;
logFile = "server_console.log";
class Missions
{
class Mission1
{
template = "MP_CombatPatrol_01.Altis";
difficulty = "Regular";
};
}; hostnameis simply the browser name. If you omit it, the server falls back to the local machine name, which is usually less helpful.passwordcontrols who can join. Leave it empty for public access, or set one for a private group.passwordAdminis the password you use in chat with#login. Joining the server is separate from becoming admin inside it.maxPlayerscaps the server, but the real limit is the lower of this value and the mission’s slot count. If you set it higher than the mission supports, players still cannot exceed the mission slots. Headless clients also count as players.persistent = 1keeps the mission running when everyone leaves. The mission keeps simulating with nobody on, which is the point: groups that drop in and out do not lose progress every time the last player leaves. It only works for missions that use base or instant respawn, a choice the mission maker makes in the mission itself.BattlEye = 1andverifySignatures = 2are the right day-one defaults. The trade-off is deliberate: a player with the wrong or unsigned content gets blocked at the door instead of joining a broken session, and cheaters have a much harder time.kickDuplicate = 1stops duplicate identities connecting. That reduces confusion around ghosted sessions and duplicate admin presence.class Missionstells the server what it can run. The keywordclassmust be lowercase here, or you get a parsing error.templatealways takes the formmissionName.terrainName. For a mission you upload, that is the.pboname inMPMissions(for exampleMyMission.Altis.pbobecomesMyMission.Altis). Official missions that ship with the game use their class name instead and need no upload:MP_CombatPatrol_01.Altisis the COOP 12 Combat Patrol scenario, which makes a clean first test of the server and branch without anyone else’s scripting.
Use a launch line that leaves no doubt about what is loading
Readability matters. A good launch line tells you where the config is, where logs go, which profile name is in use and which port block the server owns.
"D:\Games\Arma3\A3Master\arma3server_x64.exe" "-profiles=D:\Games\Arma3\A3Master" -port=2302 -config=D:\Games\Arma3\A3Master\server.cfg -name=server -world=empty
-port=2302 sets the base port; the other Steam and BattlEye ports follow as offsets. -profiles= on Windows keeps logs and profile files in one predictable place. -config= is the critical switch that loads your server settings. -name=server picks the profile name, which decides where the .Arma3Profile is created.
-world=empty starts the server on an empty world, so it sits idle at the console until a mission is chosen instead of loading a terrain nobody is playing on. Players are not affected, because they always load into the mission’s own map.
Leave mods out until the vanilla server works. When you are ready, put client-and-server mods on -mod, server-only addons on -serverMod, and sort key files properly with the Arma 3 mods installation guide. On Linux, remember that mod paths must be relative and inside or below the Arma 3 folder tree.
Open the right ports and test the right network path
Arma 3 uses a small block of incoming UDP ports. Open them in the local firewall and, if the server is behind a router, forward them there as well. Opening only one side of that path is a common reason a server works on LAN but not for friends on the internet.
| Role (all UDP) | Offset | Server 1 | Server 2 |
|---|---|---|---|
| Game traffic and voice | +0 | 2302 | 2402 |
| Steam query | +1 | 2303 | 2403 |
| Steam port | +2 | 2304 | 2404 |
| VON (reserved, unused) | +3 | 2305 | 2405 |
| BattlEye | +4 | 2306 | 2406 |
| Port | Protocol | Role | Why it matters |
|---|---|---|---|
2302 | UDP | Game port | Main gameplay traffic, including VON traffic now that VON is part of the game port |
2303 | UDP | Steam query | Used for server querying and visibility |
2304 | UDP | Steam port | Companion Steam service traffic for the server |
2305 | UDP | VON reserved | Reserved, not currently used, but still keep the block intact for a standard setup |
2306 | UDP | BattlEye | Needed for BattlEye communication |
If BattlEye is enabled, the server also needs the related outgoing traffic on 2344 as TCP and UDP, and on 2345 as TCP. The server must also be pingable with ICMP echo reply. That is not a cosmetic detail: if the machine cannot answer ping, discovery and reachability checks can fail even when the UDP rules look right.
Avoid relying on upnp = 1 in server.cfg if you already control the firewall and router. On machines with active firewalls it can delay startup by 600 seconds, which looks like a hung server when it is really waiting on network automation you do not need.
Running more than one Arma 3 server on one machine is fine as long as you leave at least 100 ports between base values, such as 2302, 2402 and 2502, and give each server its own profile and config. That separation prevents log overlap, profile confusion and port collisions.
First launch, first join and first admin login
On first start you want two things: a console process that stays up, and an arma3.rpt log with no obvious config parse error. If the server opens and closes immediately, or the log shows mission or config syntax problems, fix that before worrying about the server browser.
Join from the in-game browser first, but if you do not see the server there, try direct connect. The browser can be wrong on the client side even when the server itself is available. Make sure the client branch matches the server branch: stable clients join stable servers, and development clients join development servers. For a first server, stable is the sensible choice.
Once connected, press / to open chat and enter #login followed by the admin password from passwordAdmin. Do not forget the #. After that, choose the mission from the mission list. If you already set a one-mission rotation, the server can also auto-select once someone is connected, but logging in and choosing it yourself proves that admin works properly.
If you want trusted people to log in without sharing the admin password, add their SteamID64 values to the config like this:
admins[] = { "STEAMID64_HERE" }; Only one logged-in admin can exist at a time without BattlEye RCon, so keep admin access intentional rather than casual. Once the server stays up, loads an official mission, and lets multiple friends join and rejoin cleanly, you have a working baseline. Only then is it worth adding user-made missions, large mod sets, headless clients or detailed bandwidth tuning in Arma3.cfg.
For updates, stop the server and run app_update 233780 validate again whenever Arma 3 is patched. Version mismatches are one of the most common reasons a server that worked yesterday suddenly refuses clients today.
When something goes wrong, check in this order
This flow is the fastest way to narrow first-day problems without changing ten things at once.
| Symptom | Likely cause | First fix |
|---|---|---|
| Server not in the browser | Client browser issue, missing query reachability, or the server is not fully listening yet | Try direct connect first, then check UDP 2302 to 2306 and ICMP echo reply |
| Friends cannot connect from outside, but LAN works | Router forwarding missing, local firewall blocking, or no real IPv4 because the line uses IPv6 or DS-Lite | Forward the UDP block to the server, allow it in the host firewall, and confirm the connection has real IPv4 |
| Version mismatch | Client and server are on different branches, or the server was not updated after a patch | Put everyone on the same branch and rerun app_update 233780 validate with the server stopped |
| Server ignores your settings | -config missing, wrong path, wrong file name, or on Linux you are looking in the wrong profile location | Add an explicit -config=, verify the path, and read the arma3.rpt for parse errors |
| Very long startup delay | upnp = 1 trying to work through an active firewall | Disable UPnP in the config and forward ports manually |
| Kicked for signatures after adding mods | Wrong keys, missing keys, or clients using a different mod set from the server | Check the Arma 3 mods installation guide and make sure keys and mod versions match |
| Browser shows around 2500 ms ping | A known issue when the Steam client on the server machine runs without administrator rights | Run Steam as administrator, then judge the real in-game connection before changing network settings |
| Server stops when SSH closes | The Linux process is attached to your terminal session | Run it inside tmux or screen, then detach safely |
First-launch checklist
| Step | Why it matters | What “done” looks like |
|---|---|---|
| Pick the branch | Stable and development are not compatible with each other | Server and every client are on the same branch, with stable as the normal first choice |
| Create a separate Steam account | SteamCMD needs a real login and should not compete with your play account | A dedicated server-only account can log in through SteamCMD and pass Steam Guard |
| Separate the folders | Stops file conflicts and the client-data issue on the same machine | SteamCMD, the dedicated server and the Arma 3 client each live in their own location |
Install app 233780 | This is the free dedicated server package | The install folder contains the server executable and creates logs on launch |
Create and point to server.cfg | Without -config, the server loads no server config at all | Your launch line contains a valid -config= path and the server name or password settings appear in game |
Open UDP 2302 to 2306 | Players, Steam query traffic and BattlEye need the full block | Friends outside your LAN can reach the server and ping works |
| Load one official mission | It removes mod and custom scripting variables from the first test | The mission starts from the rotation or the admin mission list without errors in arma3.rpt |
Join and use #login | Proves both player access and admin access | You can connect, choose the mission and administer the server in session |
Once every row above is true, you have a real baseline. The next steps are usually mods, signature keys, server-only addons, more detailed admin permissions, headless clients for AI-heavy missions, and careful bandwidth tuning in Arma3.cfg. Do those one at a time so you always know what changed.
A rented Arma 3 server handles installs, updates and the port block for you, and you still bring your own missions and mod set.
Compare the best Arma 3 server hostsArma 3 dedicated server FAQ
Do I need to own Arma 3 to run a dedicated server?
No. The dedicated server package is free and is installed through SteamCMD as app 233780. You still need a real Steam account to log in with SteamCMD, but that account does not need an Arma 3 purchase on it.
What ports does an Arma 3 dedicated server use?
The normal incoming block is UDP 2302 to 2306: game traffic, Steam query, Steam service traffic, a reserved VON offset and BattlEye. If BattlEye is enabled, related outgoing traffic also uses 2344 as TCP and UDP, plus 2345 as TCP. The server should also answer ICMP echo reply so it can be pinged.
Why is my server not loading my server.cfg?
Because Arma 3 does not load a default server config by file name alone. The file can be called almost anything, but your launch line must point to it with -config=. If that path is wrong, or missing, the server starts with no server config loaded.
Why can’t my friends see my Arma 3 server?
The usual causes are missing UDP forwarding, a local firewall rule, no real IPv4 on the internet connection, or simply the in-game browser misbehaving. Test direct connect before assuming the server is down, then verify the UDP block and ping response. If only local clients can connect, the problem is nearly always on the network edge rather than in the mission file.
How do I become admin on my Arma 3 server?
Join the server first, open chat with /, and type #login followed by the value from passwordAdmin. If you prefer not to share that password, you can list trusted SteamID64 values in admins[] so those users can log in directly. Without BattlEye RCon, only one logged-in admin can be active at a time.
More Arma 3 server guides
Compare hosts, add mods the right way, or set up the newer Enfusion game instead.
Arma 3 updates, Linux packages and rented host panels do change over time, so if your panel labels or startup fields differ slightly from this guide, follow your host’s current layout while keeping the same core order: install, config, ports, mission, join, admin.