Gaming Azure

Unvanquished Dedicated Server on Ubuntu 24.04 on Azure User Guide

| Product: Unvanquished Server on Ubuntu 24.04 LTS on Azure

Overview

Unvanquished is a free and open source game that fuses first-person-shooter combat with real-time-strategy base building, played between an alien and a human team. This cloudimg image runs the headless dedicated server (daemonded, part of the Daemon engine) — the program that hosts the game world that players join from the separate Unvanquished client. It is not the graphical game client and it has no web interface; you administer it from the command line and over the game's remote console (rcon), and players connect over the game port.

The image installs the stock upstream Unvanquished 0.56.2 server and the full game assets, unmodified, verified against the upstream SHA-512 checksum. Every cloudimg customisation is external configuration only. On first boot the VM generates a unique remote-console (rcon) password, writes the server configuration, and starts the server automatically hosting the plat23 map. Backed by 24/7 cloudimg support.

What is included:

  • Unvanquished 0.56.2 dedicated server (daemonded) plus the full game assets (maps and paks)
  • An unvanquished.service systemd unit that starts the server on boot, running as an unprivileged unvanquished user
  • A unique rcon (remote console) admin password generated on first boot — no default password ships in the image
  • The game protocol on 27960/udp for players; no web or unauthenticated admin surface
  • A small unvanquished-query helper for status and rcon from the command line
  • 24/7 cloudimg support

The engine and game code are licensed GPLv3 and the game media is licensed CC-BY-SA 2.5; corresponding source is linked at the end of this guide.

Prerequisites

An active Azure subscription, an SSH key pair, and a VNet + subnet in the target region. Standard_B2s (2 vCPU / 4 GiB RAM) is sufficient for a dedicated server; the server idles at well under 1 GiB. NSG inbound rules:

  • 22/tcp from your management network (SSH administration)
  • 27960/udp from your players (the Unvanquished game port)

There is no web or metrics port to open — administration is over SSH and rcon only.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Unvanquished Server by cloudimg, and select Create. On Basics pick your subscription, resource group, region and size (Standard_B2s recommended); under Administrator account choose SSH public key and paste your key; under Inbound port rules allow SSH (22). After deployment, add an inbound rule for 27960/udp so players can connect.

Step 2 - Deploy from the Azure CLI

az vm create \
  --resource-group <your-rg> \
  --name unvanquished \
  --image <marketplace-image-urn> \
  --size Standard_B2s \
  --admin-username azureuser \
  --ssh-key-values ~/.ssh/id_ed25519.pub \
  --vnet-name <your-vnet> --subnet <your-subnet> \
  --public-ip-sku Standard

# open the Unvanquished game port (UDP 27960) to your players
az vm open-port --resource-group <your-rg> --name unvanquished --port 27960 --priority 1010

Step 3 - Connect to your VM

ssh azureuser@<vm-public-ip>

Step 4 - Confirm the server is running

The server starts automatically on first boot, hosting the plat23 map. Confirm the service is active, running as the unprivileged unvanquished user, and bound to the game port:

systemctl is-active unvanquished
ps -o user=,comm= -C daemonded
sudo ss -ulnp | grep 27960

You should see the service active, daemonded owned by the unvanquished account, and a UDP listener on 0.0.0.0:27960:

The Unvanquished dedicated server active under systemd, running as the unprivileged unvanquished user, bound to UDP 27960 with the plat23 map loaded

Step 5 - Check the server is live with a status query

The bundled unvanquished-query helper sends the game's connectionless getinfo query and prints the reply. This needs no password and proves the server is serving the protocol, which map it is running, and how many player slots it has:

unvanquished-query getinfo

The infoResponse reports mapname\plat23, the protocol and engine version, and the player slots:

A connectionless getinfo query returning an infoResponse advertising the running map plat23, the protocol and the player slots

Step 6 - Administer the server over rcon

The server's remote console (rcon) is protected by a password that is unique to this VM and was generated on first boot. Read it from the root-only credentials file:

sudo grep '^RCON_PASSWORD=' /root/unvanquished-credentials.txt

Run an admin command with the unvanquished-query rcon helper (it reads the password from that file for you). The status command returns the live server console, and rcon-check proves the correct password works while a wrong one is rejected:

sudo unvanquished-query rcon status

Remote console administration with the per-VM password: the status command returns the live server console, while a wrong password is rejected

Any server console command can be run this way, for example to change the map:

sudo unvanquished-query rcon "map station15"

Step 7 - Connect players

Players install the Unvanquished client from unvanquished.net/download, open the console (the ~ key) and connect to your VM:

connect <vm-public-ip>:27960

Make sure the 27960/udp inbound NSG rule is in place. The server hosts plat23 by default and advertises to the Unvanquished master server list so players can also find it in the in-game server browser.

Step 8 - Secure by default

There is no shared secret in the image. The rcon password is generated per-VM on first boot and stored only in the root-only credentials file (0600 root:root) and the server config (0640 root:unvanquished); with no password set, rcon is disabled, so the shipped image has no default rcon password. The server runs as an unprivileged unvanquished user and exposes only the game protocol on UDP 27960 — there is no web or metrics interface.

sudo stat -c '%a %U:%G  %n' /root/unvanquished-credentials.txt /var/lib/unvanquished/config/server.cfg
ls -l /var/lib/cloudimg/unvanquished-firstboot.done

Secure by default: the per-VM RCON password lives only in the root-only credentials file and the server config, both generated on first boot

Step 9 - Customise the server

Edit the server configuration to change the map, server name, player limit, or to require a join password, then restart the service:

sudo nano /var/lib/unvanquished/config/server.cfg

# common settings:
#   set sv_hostname "My Unvanquished Server"
#   set sv_maxclients 24
#   seta g_password "join-password"     # empty = public
#   +map <mapname>                       # change the default map in the unit's ExecStart

sudo systemctl restart unvanquished

The game join is public by default (empty g_password) as is normal for a dedicated game server; set g_password to require a join password. Base maps shipped with the image include plat23, station15, parpax, chasm, forlorn, perseus and more.

Licensing and source

The Daemon engine and game code are licensed under the GNU GPL version 3; the game media (assets, maps, sounds) is licensed under Creative Commons Attribution-ShareAlike 2.5. This image ships the stock upstream server and assets unmodified. Corresponding source:

Support

Every cloudimg image is backed by 24/7 support and ships fully patched with unattended security updates enabled. If you need help, contact cloudimg support.