The Organic Overlay Network. > Host websites directly from your machine. Bust through NATs. Reclaim the internet.
Roselink is a decentralized overlay network that allows anyone to host a hidden service (website, API, file server) from their local computer without port forwarding, static IPs, or cloud VPS rentals. It uses a custom SOCKS5 client, Reverse Tunneling, and a Gossip-based Relay Mesh to route traffic securely.
- π« No Port Forwarding: Uses reverse TCP tunneling. Works behind strict corporate firewalls, CGNAT, and mobile networks.
- π Cryptographic Identity: Domains (e.g.,
freedom.rose) are tied to Ed25519 keypairs generated on your machine. You own the domain, not a registrar. - β‘ Multiplexed Transport: Built on
yamux, allowing thousands of concurrent streams (CSS, Images, API calls) over a single TCP connection. - π§ Dynamic DNS Mapping: The client intelligently maps custom TLDs (
.rose) to virtual IPs (240.0.0.x), allowing standard browsers to access the network without plugins. - πΈοΈ Relay Mesh: Powered by
hashicorp/serf. Relays gossip routing tables, ensuring traffic finds your node no matter which entry point a user connects to.
- The Service (You): Your machine dials out to a Relay. It performs a cryptographic handshake and holds a connection open.
- The Relay (The Mesh): Public servers that accept these connections. They gossip with other relays to track where domains are located.
- The Client (The Visitor): A local SOCKS5 proxy. It intercepts browser traffic for
.rosedomains and tunnels it through the mesh to the Service.
- Go 1.21+ (if building from source)
- A local web server to expose (e.g., Python
http.server, Nginx, or a Node app) on port8000.
# Clone the repository
git clone https://github.com/yourusername/roselink
cd roselink
# Build the binary
go build -o roselinkHost a website running on your local machine (default targets localhost:8000).
First Run (Registration): You must claim a domain. This generates a keypair locally and registers it with the public mesh.
./roselink -mode service -domain my-site.roseOutput:
πΉ Generating new identity for: my-site.rose
[Service] Registering 'my-site.rose' with Relay...
β
Registration successful! Identity saved.
[Service] β
Online
Subsequent Runs:
Just run the service mode. It will load your service.key automatically.
./roselink -mode serviceTo view .rose sites, run the client. This starts a SOCKS5 proxy on your machine.
./roselink -mode clientConfigure your Browser (Firefox Recommended):
- Go to Settings > Network Settings.
- Select Manual proxy configuration.
- SOCKS Host:
127.0.0.1| Port:1080| Version: v5. - IMPORTANT: Check the box [x] Proxy DNS when using SOCKS v5.
- Navigate to
http://my-site.rose.
(Alternatively, use Curl):
curl -v --socks5-hostname 127.0.0.1:1080 http://my-site.roseWant to help the network? Run a relay node on a public server.
# Start the seed node
./roselink -mode relay -public-ip <YOUR_PUBLIC_IP> -cport 7946
# Start a second node (joining the first)
./roselink -mode relay -public-ip <YOUR_IP> -cport 7946 -join <SEED_IP>- Port 9001 (TCP): Control Plane (Service Registration/Auth)
- Port 9002 (TCP): Data Plane (Traffic Tunneling)
- Port 7946 (TCP/UDP): Cluster Gossip
Standard browsers don't know how to resolve .rose.
- The Roselink Client acts as a SOCKS5 proxy.
- When it sees a request for
blog.rose, it assigns it a fake IP from the reserved range (e.g.,240.0.0.5). - It tells the browser "The IP is 240.0.0.5".
- The browser sends traffic to that IP.
- The Client intercepts it, looks up the mapping, and tunnels the request to the Relay Mesh asking for
blog.rose.
We use a Gossip Protocol.
- Service connects to Relay A.
- Relay A broadcasts to the cluster: "I have
blog.rose". - Client connects to Relay B.
- Relay B checks its in-memory route table, sees the route points to Relay A.
- Relay B tunnels the traffic over the backend to Relay A, which pushes it down the reverse tunnel to the Service.
- Core Networking: Reverse tunnels, SOCKS5, Multiplexing.
- Identity: Ed25519 Keypairs & Challenge/Response Auth.
- Clustering: Multi-node relay communication via Serf.
- Binary Protocol: Replace newline-delimited JSON with Protobufs for wire efficiency.
- End-to-End Encryption: Wrap inner traffic in TLS so Relays cannot see data.
- Web Registrar: HTTP API for easier domain claiming and key management.
- Infrastructure TLDs: Implement
.thorn(Storage) and.vine(Mesh) namespaces.