Independent product studio · Swedenhello@karelialabs.com

Pterodactyl 2.0 extension Live

FastDL for Pterodactyl 2.0: fast file downloads for Source-engine game servers

When a player joins a Source-engine game server with custom maps or sounds, such as Counter-Strike, Team Fortress 2 or Garry's Mod, the game downloads them from the game server itself: slowly, and while others are playing. FastDL lets the game download them from your node's web server instead.

Available on Gumroad.

Requires
Pterodactyl Panel 2.0. Each node needs Docker (Wings already needs it) and an open port.
Tested with
Pterodactyl 2.0.0-beta.2 (PHP 8.4) and nginx 1.30 (official image): 179 browser, API and nginx checks and 6 unit tests (version 1.0.1)
Package
Official extension (.pteroext). No panel file is edited and Wings is not touched.
Price
$7.99, one panel
A walkthrough built from real screenshots on Pterodactyl Panel 2.0.0-beta.2. The video loads from YouTube only when you press play.

A customer switches it on for their server and copies one line into the server's configuration. You set each node up once.

What FastDL for Pterodactyl 2.0 does

A FastDL tab on every server

For owners, administrators and subusers with the new Manage FastDL permission: a switch, the game folder (csgo, cstrike, tf, garrysmod and so on) and the exact line to set, sv_downloadurl "http://node1.example.com:8081/<token>".

A tested nginx configuration per node

Made by the panel for that node. It serves only the game content a client downloads (maps, materials, models, sound, resource and particles, each also as .bz2), read only, and only for servers that have FastDL on.

Nothing else is served

cfg/server.cfg with the RCON password is a 404, and so are .. and %2e%2e tricks, hidden files, other servers' files and symbolic links.

Node set-up without guessing

One docker command runs nginx from the official image, with Wings' data directory mounted read only. nginx can read every server's files, the step that fails most often with FastDL add-ons, and it cannot change any of them.

Switch on and off without touching the node

The node's nginx asks the panel before it serves a file, and answers are kept for 30 seconds. Switching a server off, blocking it or switching a node off needs no nginx change.

Block a heavy user

Block a server that uses too much bandwidth, so its owner cannot switch FastDL on again. The download address holds a random token, not the server's UUID.

No floods through the node

Each player address may ask for 10 files a second and 300 at once, and nginx sends the panel none of the player's headers, so nobody can make a node ask the panel about made-up download addresses.

How it works

  1. Install. Copy fastdl.pteroext to the panel server and run php artisan p:extension:install fastdl.pteroext --enable, then chown -R www-data:www-data extensions public/assets/extensions (use your web user).
  2. Set a node up. Reload the panel and open Admin → FastDL. Save the configuration it shows on the node (/etc/fastdl/nginx.conf) and run the docker command shown with it.
  3. Switch it on. A customer opens the FastDL tab on their server, switches it on and sets the line it shows.

Screenshots

FastDL for Pterodactyl 2.0: the FastDL tab on a server with the sv_downloadurl line to set
The exact console line to set
FastDL for Pterodactyl 2.0: nodes and the servers that use FastDL
Nodes, and the servers that use FastDL
FastDL for Pterodactyl 2.0: the nginx configuration and the docker command the panel makes for a node
The nginx configuration and its docker command, for each node
FastDL for Pterodactyl 2.0: the game files that are served, read only
Only these game files are served, read only
FastDL for Pterodactyl 2.0: blocking a server that uses too much bandwidth
Block a server that uses too much bandwidth
FastDL for Pterodactyl 2.0: every switch in the server's activity log
Every switch in the activity log

Pricing

$7.99One-time purchase

One Pterodactyl panel installation; a test or staging copy is included. Updates within version 1.x. The source is readable.

Good to know

  • For Source-engine games only, whose clients download from a web address. It does not work for Minecraft.
  • nginx only: the configuration is not for Caddy or Apache. The download address is plain http.
  • Tested with a stand-in Wings and a stand-in server volume with Wings' owner and permissions. nginx runs in its own container with the data directory mounted read only, so the file permissions that cause most 403 and 404 errors with FastDL add-ons do not block it. This was not tested with the real Wings.
  • A real game client, https towards the panel with a real certificate, nginx versions other than 1.30, SELinux, load testing, mobile layouts and languages other than English are untested.
  • If the panel is down, nginx keeps using the answers it already has. A download it has no answer for fails, and the game client falls back to the game server's own slow download.

FAQ

Does it work with Caddy or Apache?

No. The configuration is for nginx.

Does it work for Minecraft?

No. FastDL is for Source-engine games, whose clients download from a web address.

Is it safe to serve game files from the node?

Only the whitelisted folders and file types of servers that have FastDL on are served, and nginx never follows symbolic links. Wings' data directory is mounted read only into nginx's container, so nginx cannot change a file. The tests send path tricks and links against a stand-in volume with an RCON password in it, and none returns a file.

What if the panel is down?

nginx keeps using the answers it already has until the panel answers again. A download it has no answer for fails, and game clients fall back to the game server's own download.

Related tools

More from Karelia Labs

Updated

FastDL for Pterodactyl 2.0Buy on Gumroad ($7.99) →