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:
- 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.
- 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:
| Parameter | Purpose | Example |
|---|---|---|
+app.port | Companion service TCP port | 28082 |
+app.listenip | Network interface to bind | 0.0.0.0 |
+app.publicip | Advertised external IP for clients | 198.51.100.10 |
+app.notifications | Enable notification delivery | true |
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:
./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.
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:
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:
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:
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:
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.




