Setting up the Rust Nexus System for Multi-Server Travel
The Rust Nexus system is Facepunch's official framework for linking multiple dedicated server instances into a single persistent world cluster. Players can purchase a ferry ticket at a Ferry Terminal monument and physically travel — with their full inventory — to an adjacent server zone. This transforms a standard single-map 200-player server into a scalable multi-island continent with distinct zones for each biome, economy, or game mode.
🛳️ How Nexus Travel Works
Players interact with a Ferry Terminal NPC to buy a ticket to a linked zone. Upon boarding, the origin server serializes the player's inventory and transfers it to the destination server via the Nexus API. The player appears on the destination server at the linked terminal.
🔑 Nexus API Tokens
Each server in the cluster must be registered with a shared Nexus token — a secret key that authenticates inter-server communication and prevents rogue servers from injecting player data into your cluster.
Requirements
- Minimum 2 Rust dedicated server instances (each on its own process, can be same machine or different machines)
- Each server must run the same Rust build version — protocol mismatches prevent cluster handshakes
- Servers must be network-reachable from each other (firewall must allow TCP on the Nexus port between instances)
- Each server map must include the Ferry Terminal monument (it appears on procedural maps 3000+ in size, or can be forced via
server.levelurlwith a custom map)
Step 1: Generate the Nexus Token
All servers in a cluster share one token. Generate a random secure string (minimum 32 characters) and store it somewhere safe — all server configs will use it:
# Linux — generate a secure token:
openssl rand -hex 32
# Example output: a3f8c2e1d9b7a4f6e2c8d0b5a1f3e9c7d4b8a2e6c0d5b9a3f7e1c4d8b2a6e0c9
Step 2: Configure Each Server
Add the following Nexus variables to each server's startup command line or server.cfg:
Origin Server (Zone A — e.g., "Forest Island"):
# server.cfg for Zone A
server.identity "zone_a"
server.port 28015
server.queryport 28016
# Nexus configuration:
server.nexus.enabled true
server.nexus.token "a3f8c2e1d9b7a4f6e2c8d0b5a1f3e9c7d4b8a2e6c0d5b9a3f7e1c4d8b2a6e0c9"
server.nexus.id "zone_a"
server.nexus.endpoint "https://zone-a.yourserver.com:28080"
# Register the linked zones (comma-separated nexus IDs):
server.nexus.zones "zone_b,zone_c"
Destination Server (Zone B — e.g., "Arctic Island"):
# server.cfg for Zone B
server.identity "zone_b"
server.port 28115
server.queryport 28116
# Same token, different ID and endpoint:
server.nexus.enabled true
server.nexus.token "a3f8c2e1d9b7a4f6e2c8d0b5a1f3e9c7d4b8a2e6c0d5b9a3f7e1c4d8b2a6e0c9"
server.nexus.id "zone_b"
server.nexus.endpoint "https://zone-b.yourserver.com:28180"
server.nexus.zones "zone_a,zone_c"
Step 3: Open Nexus Network Ports
Each server exposes a Nexus API port (default 28080, adjustable per instance). This port must be open between your servers:
# On each server — allow Nexus API traffic:
sudo ufw allow 28080/tcp # Zone A Nexus port
sudo ufw allow 28180/tcp # Zone B Nexus port
# If on different machines, also allow outbound:
sudo ufw allow out 28080/tcp
sudo ufw allow out 28180/tcp
Step 4: Verify the Cluster Handshake
On startup both servers will attempt to handshake. Check each server's console for:
[Nexus] Connected to zone: zone_b (endpoint: https://zone-b.yourserver.com:28180)
[Nexus] Cluster ready. 2 zone(s) online.
If you see [Nexus] Handshake failed — token mismatch, the tokens between servers are not identical. Copy-paste the token carefully — trailing spaces or newlines break the match.
Step 5: Test Player Transfer
- Connect to Zone A and locate the Ferry Terminal monument
- Interact with the Ferry NPC — available destinations should list Zone B
- Purchase a ticket (costs Scrap — amount configurable via
server.nexus.ferryCost) - Board the ferry and wait for the travel sequence (~30 seconds)
- Verify you appear on Zone B with your inventory intact
Player Inventory Serialization Troubleshooting
- Player arrives with empty inventory: The destination server rejected the transfer payload — check that both servers are on identical Rust versions. Run
+app_update 258550 validateon both - Player duplicated on both servers: A timeout during transfer left the player's session open on Zone A. Kick the ghost via RCON:
kick [SteamID] "duplicate session" - Ferry destination grayed out: Zone B is offline or the Nexus handshake failed — check Zone B's console for error messages
- Scrap cost not applying: Verify
server.nexus.ferryCostis set on the origin server — this is not synced cluster-wide
Advanced: Dedicated Nexus Hub Server
For large clusters (5+ zones), consider a lightweight Nexus hub server — a Rust instance with no playable map that acts purely as a routing layer for cluster authentication and zone-to-zone messaging. This reduces direct peer-to-peer connections between zones and centralises cluster management.
Same-Machine Clusters: You can run multiple Nexus zones on one machine by assigning different ports to each instance. Ensure your machine has at least 8 GB RAM per active zone — Rust's memory footprint multiplies linearly with the number of running instances.
Professional Hosting
Running a Nexus cluster is significantly easier with infrastructure designed for it. Host your Rust server cluster with Supercraft — our multi-instance dashboard manages Nexus tokens, inter-zone firewall rules, and coordinated wipe cycles across all your zones from one control panel.