Skip to content

spt-nat

NAT traversal library -- STUN, TURN, UPnP, NAT-PMP, hole punching, and relay management

Overview

spt-nat provides a comprehensive NAT traversal toolkit for establishing peer-to-peer connections across network address translators. It orchestrates multiple traversal strategies (STUN, TURN, UPnP, NAT-PMP, UDP hole punching) through a unified NatTraversalManager that automatically detects NAT type and selects the best strategy. This is the connectivity foundation for spt-p2p.

Key Features

  • STUN client/server -- NAT type detection and external address discovery
  • TURN client/server -- relay allocation for symmetric NAT fallback
  • UPnP -- automatic port mapping via UPnP gateway discovery
  • NAT-PMP -- port mapping via NAT-PMP/PCP protocol
  • Hole punching -- coordinated UDP hole punching with configurable timeout
  • Relay management -- connection relay with configurable pool limits

Dependencies

No internal SPT crate dependencies. Uses tokio for async I/O, dashmap for concurrent port mapping storage, and parking_lot for low-contention locks.

Usage

rust
use spt_nat::{NatTraversalManager, NatTraversalConfig};

let config = NatTraversalConfig::default();
let manager = NatTraversalManager::new(config);
// manager.initialize().await?; // runs detection + gateway discovery

API Reference

Core Types

TypeDescription
NatTraversalManagerMain orchestrator for all traversal strategies
NatTraversalConfigConfiguration for enabled strategies and timeouts
StunClientSTUN binding request client
StunServerSTUN server implementation
TurnClientTURN relay allocation client
TurnServerTURN server implementation
TurnAllocationActive TURN relay allocation
UpnpManagerUPnP IGD port mapping manager
NatPmpClientNAT-PMP/PCP client
HolePunchCoordinatorCoordinated UDP hole punching
RelayManagerConnection relay pool manager
NatInfoDetected NAT type and external address
NatTypeNAT classification enum
NatErrorCrate error type

Released under the MIT License.