How it works
The installer is hosted publicly on GitHub but is gated by a one-time IPT-SD-XXXXXX-XXXXXX-XXXXXX install code issued from this panel. The flow is:
- You generate a code from /slowdns. The code is valid for 5 minutes and single-use.
- The installer performs a precheck using the code plus machine identity (
/etc/machine-idand the SSH host fingerprint). The code stays inissuedstate and the server returns a signed 15-minute precheck token. - You enter the public hostname, delegated tunnel domain, and public IP only after the code is accepted.
- The installer then activates the install. This is the step that binds the chosen hostname and public IP, marks the code as
consumed, and returns a signed 10-minute install token. - Once all services are live and verified, the installer confirms the activation and permanently consumes the install token.
- If anything fails before confirmation, the installer calls release so the code can be restored and retried.
Install command
bash <(curl -4fsSL https://raw.githubusercontent.com/stellawills/slowdns/main/install.sh)
The installer requires root. Run it on an Ubuntu 20.04 / 22.04 / 24.04 VPS. It installs python3, curl, unzip, openssh-server, and builds the dnstt server and client from source if prebuilt binaries are not provided.
Step-by-step
- Open /slowdns in this panel and click Generate Code. Copy the
IPT-SD-...value. The code expires in 5 minutes, so do this only when you are ready to install. - SSH into your VPS as root.
- Run the install command above.
- If the session is interactive over SSH and
screenis available, the installer re-launches itself insidescreen -S slowdns-installso it can survive a dropped connection. - When prompted, paste the install code. The installer validates it immediately and will let you retry before asking for anything else if the code is invalid, used, expired, or blocked.
- Enter the public hostname — the
Arecord host that points to this VPS (for exampledns.example.com). - Enter the delegated tunnel domain — the subdomain whose
NSrecord points to the public hostname (for exampleslowdns.example.com). The installer suggests a default based on the hostname. - Confirm or enter the VPS public IPv4. The installer auto-detects it; press Enter to accept.
- The installer builds dnstt, generates SSH host keys, writes systemd units, and starts services.
- On success you will see Activation confirmed and the install code in the summary line.
Expected terminal output
A healthy install looks like this end to end:
============================================================
SlowDNS Install Code
============================================================
Generate code at: https://license.internetshub.com/slowdns
This code is single-use and expires quickly.
Enter install code: IPT-SD-XXXXXX-XXXXXX-XXXXXX
Validating install code...
Install code accepted. Continue with the SlowDNS host prompts.
SlowDNS public hostname (A record host) [ns1.example.com]:
SlowDNS delegated tunnel domain [slowdns.example.com]:
Public IPv4 for this VPS [1.2.3.4]:
Preparing SlowDNS files...
Starting SlowDNS services...
Confirming activation...
Activation confirmed.
============================================================
SlowDNS installed successfully
============================================================
Installed at: /opt/slowdns
API status: systemctl status slowdns-api
dnstt status: systemctl status slowdns-dnstt
Menu: slowdns-menu
Install code: IPT-SD-XXXXXX-XXXXXX-XXXXXX activated via https://license.internetshub.com Resuming after network issues
If the installer re-launches itself in screen, you can safely reconnect and reattach with:
screen -r slowdns-install
If the VPS build is especially slow, precheck buys you time: the code itself expires in 5 minutes, but once precheck succeeds the installer has a separate 15-minute token to reach the final activation step.
Unattended / scripted install
Pass configuration as environment variables to skip all interactive prompts:
SLOWDNS_INSTALL_CODE="IPT-SD-XXXXXX-XXXXXX-XXXXXX" \
SLOWDNS_HOSTNAME="ns1.example.com" \
SLOWDNS_TUNNEL_DOMAIN="slowdns.example.com" \
SLOWDNS_PUBLIC_IP="1.2.3.4" \
bash <(curl -4fsSL https://raw.githubusercontent.com/stellawills/slowdns/main/install.sh)
See Environment Variables for the full list.
After install
Once the installer finishes:
- Run
slowdns-menuto manage SSH accounts, view runtime info, and check service status. - Verify DNS propagation with
dig +short A ns1.example.comanddig +short NS slowdns.example.com. - The API is available locally at
http://127.0.0.1:8091/api/v2/healthz. - Activation metadata is stored at
/opt/slowdns/config/license.json.
Common failure cases
| Error message | Cause and fix |
|---|---|
| Install code already used | The code was consumed by an earlier run. Generate a new code from /slowdns. |
| Install code expired | More than 5 minutes passed between generating and using the code. Generate a fresh one and run the installer immediately. |
| Install code exceeded max activation attempts | The same code was activated and released too many times. Generate a new code. |
| Too many requests | Rate limit hit. Wait before trying again. See Rate Limits. |
| Install token has expired | The install took more than 10 minutes (usually when building dnstt from source on a very slow VPS). Retry; consider providing prebuilt binaries via DNSTT_SERVER_URL / DNSTT_CLIENT_URL. |
| Could not reach the license server | The VPS cannot reach the license server over HTTPS. Check outbound connectivity: curl -4v https://license.internetshub.com/api/v2/healthz |