CHAN.RUN
You have software running on a cloud server — an AI agent, a crawler, an automation tool — that needs to interact with the web. But websites see a datacenter IP address and treat it like a bot. Captchas, blocks, rate limits, geo-restrictions.
Meanwhile, you have devices with perfectly normal internet connections — your phone on LTE, your laptop on home WiFi, a Raspberry Pi at a friend's place. These are the IPs that websites trust, because millions of regular people use them every day.
Restunnel lets your cloud server route traffic through your own personal devices. Your server's requests exit through your phone's mobile connection or your home broadband. The website on the other end sees a normal residential IP, not a datacenter.
Restunnel uses a star topology. Each hub sits at the center with exit nodes connecting inbound. Hubs are independent — they don't know about each other.
Server A (Hetzner) Server B (AWS)
┌────────────────────────┐ ┌────────────────────────┐
│ Your Software │ │ Your Crawler │
│ │ │ │ │ │
│ ▼ │ │ ▼ │
│ Restunnel Hub A │ │ Restunnel Hub B │
│ socks5://localhost:1080│ │ socks5://localhost:1080│
└───────┬────────────────┘ └──────────┬─────────────┘
│ │
│ Encrypted tunnels │
│ (exit nodes connect out) │
│ │
┌────┴─────────────────────────────────┴────┐
│ │
▼ ▼
📱 Phone (LTE) 💻 Laptop (Home WiFi)
Connected to: Hub A + Hub B Connected to: Hub AA single binary that runs on your server alongside your software. It has three responsibilities:
Tunnel endpoint (:9000) — Listens for incoming connections from exit nodes. Uses a Noise protocol handshake that silently drops unauthenticated connections. Maintains persistent encrypted tunnels with keepalive. Multiplexes many TCP streams over a single tunnel per exit node.
Local proxy (:1080 SOCKS5, :1081 HTTP CONNECT) — Binds to localhost only. Any software on the server can use it as a standard proxy. Routes requests through connected exit nodes. Supports named node selection.
Dashboard (:8080) — Binds to localhost only, accessed via SSH tunnel. Shows connected exit nodes. Manage nodes and generate QR codes for pairing.
Apps running on your personal devices. They connect outbound to hubs — they never listen on any port. Zero inbound attack surface.
| Platform | Form Factor |
|---|---|
| Android | Background app with persistent notification |
| macOS | Menu bar app, runs at login |
| Linux | CLI binary, systemd service |
| iOS | App (planned) |
| Windows | System tray app (planned) |
How an HTTPS request flows through the system:
Your Software Hub Phone (Exit Node)
│ │ │
│ SOCKS5 CONNECT │ │
│ example.com:443 │ │
│─────────────────────►│ │
│ │ CONNECT example.com:443 │
│ │──────────────────────────►│
│ │ │
│ │ │ TCP connect
│ │ │ to example.com
│ │ │
│ │ CONNECT_OK │
│ │◄──────────────────────────│
│ SOCKS5 OK │ │
│◄─────────────────────│ │
│ │ │
│ TLS ClientHello │ DATA │
│─────────────────────►│──────────────────────────►│──► example.com
│ │ │
│ │ DATA │
│◄─────────────────────│◄──────────────────────────│◄── example.com
│ TLS ServerHello │ │Nobody sees plaintext. The hub and exit node relay encrypted TLS bytes. The target website sees the phone's residential IP making a normal HTTPS connection.
Setup is a one-time QR code scan:
After enrollment, the token is burned. The exit node authenticates via its cryptographic keypair on every reconnection. No passwords, no bearer tokens on the wire.
Restunnel is designed for users who will install it and forget about it. Every default is the safe option.
127.0.0.1. No config option to expose them without an explicit override.For the full security model, see Security.