TailConsole
TailConsole
Daemon
—
Backend State
—
Node Hostname
—
SOCKS5 Address
—
Tunnel proxy
Proxy Hosts
Reverse proxy routes through your tailnet. Adding a host auto-creates the subdomain.
Domains
Your registered domains. Subdomains are auto-created when adding proxy hosts.
Documentation

Getting Started

TailConsole is a reverse proxy manager that routes public domains to private services through Tailscale's userspace networking. It runs on shared hosting without root access.

How it works

Internet → Your Domain → PHP Proxy → SOCKS5 Tunnel → Tailscale Network → Your Service (100.x.x.x:port)

Setup Guide

1. Add a Domain

Go to the Domains tab and add your base domain (e.g. with.dpdns.org). Make sure the domain's DNS A record points to this server's IP. A wildcard * record is recommended so all subdomains resolve automatically.

2. Create a Proxy Host

Go to Proxy Hosts → Add Proxy Host:

  • Enter a subdomain prefix (e.g. grafana)
  • Select your domain from the dropdown
  • Enter the Tailscale IP of your backend (e.g. 100.100.4.4)
  • Enter the port (e.g. 3000)
  • Choose http or https

The system creates the subdomain in Hostinger and adds the proxy route. Your service is now accessible at grafana.with.dpdns.org.

3. Tailscale (Admin only)

The Dashboard tab shows Tailscale status. Admins can start/stop the daemon and connect to the tailnet using an auth key from https://login.tailscale.com/admin/settings/keys.

User Roles

RoleCan do
OwnerEverything — manage users, Tailscale, all domains/routes, settings
AdminManage Tailscale controls, own domains and routes
UserManage own domains and routes only
ViewerRead-only access to dashboard

Security

  • All passwords are bcrypt-hashed
  • Sessions expire after 7 days
  • Each user only sees their own domains and routes
  • Internal files (lib/, data/) are blocked by .htaccess
  • The SQLite database is stored in a directory with 700 permissions
  • API tokens and secrets never leave the server

Architecture

┌─────────────────────────────────────────────┐
│  Shared Hosting (CageFS, no root)           │
│                                             │
│  tailscaled (userspace mode)                │
│    └── SOCKS5 proxy on 127.0.0.1:41055     │
│                                             │
│  PHP Front Controller (index.php)           │
│    ├── Routes::match(host, uri)             │
│    ├── If match → Proxy via cURL + SOCKS5   │
│    └── If no match → Show control panel UI  │
│                                             │
│  SQLite DB (users, routes, domains, sessions)│
│  Hostinger API (subdomain creation)         │
└─────────────────────────────────────────────┘

Tailscale Installation

cd /tmp
curl -fsSL -o ts.tgz https://pkgs.tailscale.com/stable/tailscale_1.98.4_amd64.tgz
tar -xzf ts.tgz
cp tailscale_1.98.4_amd64/tailscale ~/.local/bin/
cp tailscale_1.98.4_amd64/tailscaled ~/.local/bin/
chmod +x ~/.local/bin/tailscale ~/.local/bin/tailscaled
rm -rf ts.tgz tailscale_1.98.4_amd64/

Configuration

Edit config.php:

// Paths (adjust HOME to your hosting user)
define('TS_HOME', '/home/youruser');
define('TS_BIN', TS_HOME . '/.local/bin/tailscale');
define('TS_DAEMON', TS_HOME . '/.local/bin/tailscaled');

// SOCKS5 proxy ports (must be >2000 on shared hosting)
define('TS_SOCKS5_PORT', 41055);

// Hostinger API (for auto-subdomain creation)
define('HOSTINGER_API_TOKEN', 'your-token');
define('HOSTINGER_ORDER_ID', 123456789);

// Database
define('DB_PATH', __DIR__ . '/data/console.db');

Persistence

Add a cron job (via hPanel → Cron Jobs) to keep the daemon alive:

*/5 * * * * /home/youruser/tailscale/bin/watchdog.sh >/dev/null 2>&1

Default Credentials

Username: admin / Password: changeme — change immediately after first login.

Built by Amit
Add Proxy Host
Result: —
http
https
Connect to Tailscale
Leave empty to use stored credentials.
Add User
Admin
Full control over Tailscale and all routes
User
Manage own proxy hosts only
Viewer
Read-only dashboard access
Add Domain
Enter the full domain. It will be created via the Hostinger API.