Rust Field guide

Rust+ cannot connect: companion port and registration

Configure the dedicated companion TCP port 28082, listenip and advertised public IP for reliable Rust+ mobile app pairing.

Rust+ cannot connect: companion port and registration

When a Rust server runs smoothly and players can build bases, but the Rust+ mobile app fails to register the server or stalls on connection, the issue almost always stems from companion port isolation. Rust+ relies on dedicated networking and protocols entirely distinct from standard game traffic.

This guide targets self-hosted Linux dedicated server administrators. As of October 27, 2026, the default companion TCP port is 28082, while player traffic flows over UDP ports 28015 and 28016.

How Rust+ communication works#

The Rust+ companion service relies on a two-stage communication model:

  1. In-game pairing request: A player opens the Esc menu → Rust+ and clicks "Pair with Server". The dedicated server creates an authorization token and dispatches a push notification through Facepunch's secure cloud gateway (FCM for Android or APNs for iOS) to the user's mobile device.
  2. Direct TCP connection: The mobile device receives the push notification containing server connection details, opens the Rust+ app, and initiates a direct incoming TCP connection to the server's app.port.

If players see the in-game prompt "Notification sent" but their phone never connects or remains stuck in an infinite loading loop, the push notification arrived successfully, but incoming TCP traffic to your server is blocked by a firewall, router NAT, or container boundary.

Configuring server launch parameters#

Verify four essential Rust+ startup parameters in your startup script or command line:

ParameterPurposeExample
+app.portCompanion service TCP port28082
+app.listenipNetwork interface to bind0.0.0.0
+app.publicipAdvertised external IP for clients198.51.100.10
+app.notificationsEnable notification deliverytrue

When +app.publicip is omitted, Rust attempts automatic IP detection. Behind NAT or inside a Docker container, this often advertises an internal private IP (such as 172.17.0.2 or 192.168.1.50). As a result, phones outside the local network cannot reach the companion listener.

Example startup command configuration:

bash
./RustDedicated -batchmode \
  +server.port 28015 \
  +server.queryport 28016 \
  +app.port 28082 \
  +app.listenip 0.0.0.0 \
  +app.publicip "198.51.100.10" \
  +app.notifications true

Replace 198.51.100.10 with your VPS's actual public IPv4 address. If using a dynamic address, update this value dynamically before starting the service.

Rust+ separates cloud push pairing from the direct smartphone TCP connection.

Checking open ports and firewall rules#

Standard Rust game ports operate over UDP, which frequently causes administrators to open port 28082 as UDP by mistake. The companion requires TCP.

Inspect active listeners on your Linux host with ss:

bash
sudo ss -tulpn | grep -E '28015|28016|28082'

Verify that 28015 and 28016 show udp, whereas 28082 shows tcp bound to 0.0.0.0:28082 or :::28082.

If the port is listening, allow incoming TCP traffic in UFW:

bash
sudo ufw allow 28082/tcp comment 'Rust Plus Companion'
sudo ufw status | grep 28082

When hosting inside Docker, ensure the port mapping explicitly designates TCP:

bash
docker run -d \
  -p 28015:28015/udp \
  -p 28016:28016/udp \
  -p 28082:28082/tcp \
  --name rust-server rust-image

Testing external port reachability#

After opening firewall rules, test whether the companion port is reachable from an external machine using nc or curl:

bash
nc -zv -w 5 198.51.100.10 28082

A response of Connection to 198.51.100.10 28082 port [tcp/*] succeeded! confirms the network path is open for mobile app connections.

If you manage your own game infrastructure using Nexardo, verify port mappings and advertised addresses in your deployment templates: control panels cannot bypass provider-level network routing rules.

Sources#