Skip to main content

Crate ferrotunnel

Crate ferrotunnel 

Source
Expand description

§FerroTunnel

A production-ready, secure reverse tunnel system in Rust.

FerroTunnel is the first embeddable Rust reverse tunnel, allowing you to integrate tunneling directly into your applications with a simple builder API.

§Features

  • 🔒 Secure - Token-based authentication
  • Fast - Built on Tokio for high-performance async I/O
  • 🔌 Embeddable - Use as a library in your own applications
  • 🛡️ Resilient - Automatic reconnection, heartbeat monitoring

§Quick Start: Embedded Client

use ferrotunnel::Client;

#[tokio::main]
async fn main() -> ferrotunnel::Result<()> {
    let mut client = Client::builder()
        .server_addr("tunnel.example.com:7835")
        .token("my-secret-token")
        .local_addr("127.0.0.1:8080")
        .build()?;

    let info = client.start().await?;
    println!("Connected! Session: {:?}", info.session_id);

    // Keep running until Ctrl+C
    tokio::signal::ctrl_c().await?;
    client.shutdown().await?;
    Ok(())
}

§Quick Start: Embedded Server

use ferrotunnel::Server;

#[tokio::main]
async fn main() -> ferrotunnel::Result<()> {
    let mut server = Server::builder()
        .bind("0.0.0.0:7835".parse().unwrap())
        .http_bind("0.0.0.0:8080".parse().unwrap())
        .token("my-secret-token")
        .build()?;

    server.start().await?;
    Ok(())
}

§Architecture

FerroTunnel consists of several crates:

  • ferrotunnel - Main library with builder API (this crate)
  • ferrotunnel-common - Shared types, errors, and utilities
  • ferrotunnel-protocol - Wire protocol definitions and codec
  • ferrotunnel-core - Core tunnel implementation
  • ferrotunnel-http - HTTP ingress and proxy

§Re-exports

This crate re-exports the most commonly used items from the subcrates for convenience.

Re-exports§

pub use client::Client;
pub use client::ClientBuilder;
pub use config::ClientConfig;
pub use config::ServerConfig;
pub use config::TunnelInfo;
pub use server::Server;
pub use server::ServerBuilder;
pub use ferrotunnel_common as common;
pub use ferrotunnel_core as core;
pub use ferrotunnel_http as http;
pub use ferrotunnel_protocol as protocol;

Modules§

client
Embeddable tunnel client with builder pattern.
config
Configuration types for FerroTunnel client and server.
prelude
Prelude module for convenient imports
server
Embeddable tunnel server with builder pattern.

Structs§

TunnelCodec
Tunnel protocol codec using length-delimited framing

Enums§

CloseReason
Stream close reasons
Frame
Wire protocol frame
HandshakeStatus
Handshake status codes
Protocol
Supported protocols
RegisterStatus
Registration status codes
StreamStatus
Stream status codes
TunnelError
Main error type for FerroTunnel operations

Type Aliases§

Result
Result type alias