Use case · Game server

Assetto Corsa dedicated server: acServer on a Linux machine

An Assetto Corsa dedicated server is acServer, the program Kunos ships inside the server folder of the game install: you pack the content with acServerManager on a PC that has the game, copy the folder to the host, and open UDP 9600, TCP 9600 and the lobby port 8081. Kunos's 1.3.1 changelog says the game now includes the correct Linux acServer, so the host does not have to run Windows.

See the game servers

What acServer is and where it comes from

acServer is Kunos's own multiplayer server for the original Assetto Corsa. It is not a separate download from a vendor site: it sits in steamapps\common\assettocorsa\server inside your Steam library, beside acServerManager.exe, the tool that writes its configuration and packs track and car data for it. Kunos's changelogs describe it as a Go program (version 1.3 moved it to Go 1.5), and the 1.3.1 changelog says the game now includes the correct Linux acServer.

Valve's dedicated server list also names an Assetto Corsa Dedicated Server under SteamCMD app ID 302550, marked as not available through anonymous login. Kunos's manual describes the other route, which this page follows: pack on the PC that has the game, then upload the whole server folder to the remote machine.

This page covers the original Assetto Corsa. Assetto Corsa Competizione has a different server with its own configuration files and handbook; none of the settings below carry over to it.

Ports and the lobby

Three settings in server_cfg.ini decide what the firewall must pass. The values are Kunos's defaults from the manual's sample file; change them and the rules change with them.

SettingDefaultProtocolWhat the manual says
UDP_PORT9600UDPGame traffic. Open it on the server's firewall.
TCP_PORT9600TCPGame connection. Open it on the server's firewall.
HTTP_PORT8081TCP and UDPLobby port. The manual says to open it for both protocols.
REGISTER_TO_LOBBY1n/aLeave it as shipped; the manual says it must not be touched.

With REGISTER_TO_LOBBY=1 the server announces itself to the Kunos lobby, which is how it appears in the in-game list. Port forwarding is a home-router problem. On a rented machine with its own public IPv4 address there is no router of yours in the path, so the host firewall is the gate that decides.

Sizing: bandwidth before cores

Kunos publishes no CPU or memory figure for acServer. What the manual does warn about is the connection: a server on a link with low upload bandwidth should not be run with 24 slots, and acServerManager shows an approximate bandwidth figure for a given configuration. Read that estimate for your slot count before you pick the machine.

  • MAX_CLIENTS is capped by the track: it must not exceed the number of pits.
  • CLIENT_SEND_INTERVAL_HZ is the server's packet rate (the sample uses 15; 10 Hz is about 100 ms). Higher rates mean better multiplayer quality and more bandwidth; Kunos warns that very high values can cause connection problems.
  • NUM_THREADS appears in the manual's sample as 4, with the comment "default is 2"; the manual does not explain it further.
  • Every additional server you run on the same host adds its own traffic on its own ports.

The port on every dedicated server of ours is unmetered, at 1 Gbps on most lines and 500 Mbps on the others, so upload is not the constraint the manual is warning home hosts about. Latency still is: host it in whichever city sits nearest the drivers.

Packing the content on the game PC

Content must match between server and clients, or drivers are kicked for a car or track mismatch. Kunos's manual says to repeat these steps every time Steam updates Assetto Corsa:

  1. Open the game folder (Steam, Assetto Corsa, Properties, Local Files, Browse).
  2. Run server\acServerManager.exe, build the session (track, cars, sessions, weather) and save it.
  3. Click Update Server Content. Without a window, acServerManager.exe /pack /nomsg does the same.
  4. Before uploading over a running server, back up cfg/server_cfg.ini, cfg/entry_list.ini and blacklist.txt, then merge any new settings the fresh files carry into your own.
  5. Upload the entire server folder.

Installing it on Ubuntu

Give acServer an unprivileged account of its own, and enable ufw with SSH allowed before the server ever starts. Then copy the packed folder up from the Windows PC with its built-in scp (adjust the Steam path if your library lives elsewhere). In the installs we have seen, the Linux build is a file named acServer, with no extension, in the server folder; Kunos does not document the name, so check with ls -l after uploading and adjust the paths below if yours differs.

# on the server
sudo useradd -m -s /usr/sbin/nologin acserver
sudo ufw allow OpenSSH
sudo ufw allow 9600/udp
sudo ufw allow 9600/tcp
sudo ufw allow 8081/tcp
sudo ufw allow 8081/udp
sudo ufw enable

# on the Windows PC, PowerShell
scp -r "C:\Program Files (x86)\Steam\steamapps\common\assettocorsa\server" you@your-server:acserver-upload

# back on the server, as you
sudo mv ~/acserver-upload /home/acserver/server
sudo chown -R acserver:acserver /home/acserver/server
sudo chmod 640 /home/acserver/server/cfg/server_cfg.ini
sudo chmod 750 /home/acserver/server/acServer

The upload lands in your own home directory, not in /tmp, because the config file holds both passwords; the chmod 640 then closes it to other users. A copy made from Windows may arrive without the execute bit, which the last line restores. This block is for the first upload only; later uploads follow the update steps below.

A systemd unit instead of acServer.bat

On Windows, the manual recommends acServer.bat, which writes each run's log to a timestamped file so the session data (client GUIDs and the rest) survives for support. On Linux, systemd does the same job: it starts acServer from its folder, which is where the cfg paths resolve, and keeps the output in the journal.

# /etc/systemd/system/acserver.service
[Unit]
Description=Assetto Corsa dedicated server
Wants=network-online.target
After=network-online.target

[Service]
User=acserver
WorkingDirectory=/home/acserver/server
ExecStart=/home/acserver/server/acServer
Restart=on-failure
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

After sudo systemctl daemon-reload, the command sudo systemctl enable --now acserver starts acServer and enables it at boot; read the start-up messages with journalctl -u acserver -f. Kunos's advice to watch the server's own messages for errors applies here: a car in entry_list.ini that is not in CARS, more than one track in pickup mode, or a booking session added in pickup mode stops the server with an error.

After each game update, repack on the game PC, upload the folder to ~/acserver-upload as before, then on the server:

  1. Stop the unit: sudo systemctl stop acserver.
  2. Set your three files aside: sudo mkdir -p /root/ac-keep && sudo cp -a /home/acserver/server/cfg/server_cfg.ini /home/acserver/server/cfg/entry_list.ini /home/acserver/server/blacklist.txt /root/ac-keep/.
  3. Copy the new upload over the old folder rather than moving it (a second mv would nest the new folder inside the old one): sudo cp -r ~/acserver-upload/. /home/acserver/server/.
  4. Put your files back: sudo cp -a /root/ac-keep/server_cfg.ini /root/ac-keep/entry_list.ini /home/acserver/server/cfg/ and sudo cp -a /root/ac-keep/blacklist.txt /home/acserver/server/, then compare them with the fresh copies (sudo diff /home/acserver/server/cfg/server_cfg.ini ~/acserver-upload/cfg/server_cfg.ini, and the same for entry_list.ini) and add any new settings to yours. If you changed the event in acServerManager on purpose for this upload, skip the restore and keep the uploaded files.
  5. Run the chown and both chmod lines from the install block again.
  6. Start it: sudo systemctl start acserver.
  7. Once it runs, delete the upload: rm -rf ~/acserver-upload.

server_cfg.ini, entry_list.ini and the admin password

Two files define the session. server_cfg.ini names the server, the cars (CARS, folder names separated by semicolons), the track (TRACK plus CONFIG_TRACK for a layout), the sessions and the weather. entry_list.ini lists the grid: in pickup mode it needs at least as many [CAR_n] sections as MAX_CLIENTS, and each MODEL must be one of the allowed cars. Keep PICKUP_MODE_ENABLED=1: the manual says booking mode is not fully supported.

Administration runs through the in-game chat, and the manual makes ADMIN_PASSWORD mandatory. A driver who joins with that password is recognised as admin straight away; anyone can also type /admin plus the password. With it come /kick, /kick_id, /ban_id, /ballast, /restrictor, /next_session and /restart_session.

  • Treat ADMIN_PASSWORD as a secret, like a root password. The manual's sample value is kunos; never leave it.
  • Keep it out of screenshots, shared presets and public repositories; the join PASSWORD is a separate secret.
  • If it leaks, set a new one and restart the service so acServer reads the new file.
  • BLACKLIST_MODE=2 kicks a player and writes their Steam GUID to blacklist.txt; back that file up with the configs.
  • LOCKED_ENTRY_LIST=1 lets in only the GUIDs listed in entry_list.ini, with no join password needed.

Which of our machines fit

Our game server hosting on bare metal puts acServer on a whole physical machine: HPE enterprise hardware, root access, the operating system you choose, and technical support around the clock by phone, email and live chat. Choose from New York, Miami, San Francisco, Amsterdam and Bucharest; the data centre page compares the five so you can pick the one closest to your league.

Each dedicated server comes with an unmetered port and one IPv4 address. A Linux dedicated server is the natural host for the native acServer build, and a whole machine leaves room for several lobbies side by side. Kunos's manual requires different ports (UDP, TCP and HTTP) for each instance, and advises its own executable or its own copy of the server folder; on Linux, separate folders with one unit each is the simple way to follow both.

When a dedicated machine is the wrong call

A few friends racing once a week can run acServer on the game PC itself; the manual's own warning about low upload bandwidth is the limit to watch. A rented machine earns its place when the lobby must stay up while nobody is at the host's desk, when drivers are spread across regions, or when you run several servers at once. Keep one thing in mind whichever you choose: the packing step needs Windows and a copy of the game, so somebody in your group still runs acServerManager after every update.

Questions

Which ports does an Assetto Corsa server need?

With Kunos's defaults: UDP 9600, TCP 9600 and the lobby port 8081, which the manual says to open for both TCP and UDP. If you change UDP_PORT, TCP_PORT or HTTP_PORT in server_cfg.ini, open the new values instead.

Does acServer run natively on Linux?

Yes. Kunos's version 1.3.1 changelog says the game now includes the correct Linux acServer, so no compatibility layer is needed. In the installs we have seen it is a file named acServer in the server folder; confirm with ls -l after uploading. Configuration and content packing are still done with acServerManager on Windows.

Why are drivers kicked for a car or track mismatch?

The server's content no longer matches the players' game, usually after a Steam update. Run Update Server Content in acServerManager on the game PC and upload the server folder again, keeping your three configuration files.

Can one machine run several Assetto Corsa servers?

Yes. The manual requires each instance to use different ports (UDP, TCP and HTTP), and advises a separate executable or a separate copy of the server folder for each. On Linux, give each copy its own systemd unit and its own firewall rules.

What happens if ADMIN_PASSWORD is left empty?

Kunos's version 1.0 notes say an empty admin password disables the admin commands, and the current manual calls the setting mandatory. Set a long, unique value and keep it as private as the server's root login.

A host for the grid

Pick the city nearest your drivers, install Ubuntu, upload the packed server folder and start the unit.

See the game servers

Related on Server Room

Other use cases