Menu
 

Setting up the Rust Nexus System for Multi-Server Travel

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.levelurl with 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

  1. Connect to Zone A and locate the Ferry Terminal monument
  2. Interact with the Ferry NPC — available destinations should list Zone B
  3. Purchase a ticket (costs Scrap — amount configurable via server.nexus.ferryCost)
  4. Board the ferry and wait for the travel sequence (~30 seconds)
  5. 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 validate on 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.ferryCost is 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.

Top