COWMODSКаталог модов

TunnelMC

Expose any server port to the internet via ngrok, cloudflared & playit tunnels — no extra port allocations needed.

Автор: spider27428412обновлён 30 авг. 2026 г.
УправлениеТехнологииУтилиты

Описание

TunnelMC 🌐

Expose any local port to the internet via ngrok, cloudflared, or playit.gg — no port allocations needed. Includes a full browser-based management dashboard.

TunnelMC is a Bukkit/Spigot/Paper plugin that automatically downloads and manages ngrok, cloudflared, and/or playit.gg, creates tunnels for any local port, and broadcasts the public URL to console and online OPs the moment the tunnel is ready.


🆕 What's New in 1.5.0: Reliability & Security Fixes

A maintenance release from a systematic audit, plus one addition to keep pace with an ngrok change:

  • Added: ngrok tunnels can now use a reserved/static domain. ngrok moved domain selection to their own dashboard ("Choose your URL") — pick one there, drop it into the new hostname field, and it's passed along with --url. Leave it blank for a random domain each start, same as before.
  • Fixed: editing a tunnel could silently wipe its saved authtoken/cfToken. The edit form correctly never sends secrets back to the browser, but saving an unrelated change (like toggling auto-start) was overwriting the stored token with blank — breaking the tunnel on its next start. Blank secret fields on save now keep the existing value; only an actual new value overwrites it.
  • Fixed: a tunnel name containing an apostrophe broke every action button on that tunnel's card. Start/Stop/Restart/Delete/Copy buttons are now correctly escaped for names, URLs, and IDs containing ', ", or \.
  • Fixed: renaming a tunnel to an existing tunnel's name silently orphaned the old one. The old tunnel's process kept running with nothing left tracking it, and it disappeared from config.yml entirely. Renaming to a name already in use is now rejected instead.
  • Fixed: clicking Stop immediately after Start could leave an untracked tunnel process running, and later resurrect it as "running" in the dashboard even though you'd explicitly stopped it. A start/stop race no longer lets a launch that lost the race adopt its process.
  • Fixed: playit.gg's "Try Again" button could hand back a dead claim session for up to ~11 minutes after a rejected or cancelled link attempt, instead of issuing a fresh code.
  • Fixed: an unsanitized tunnel name could write ngrok's per-tunnel config file outside the intended directory. Tunnel names are now restricted to letters, numbers, _, and -.
  • Fixed: editing any tunnel could silently wipe a saved ngrok reserved domain back to blank, since the persistence path rebuilt every tunnel's entry from scratch on every save.
  • Fixed: a malformed dashboard API request could return an empty, unexplained server error with nothing in the log. Bad requests now get a clear JSON error and the real cause is logged server-side.
  • Improved: error logging for playit/ngrok/cloudflared download and connection failures now always includes the exception type (and throw site when there's no message), instead of sometimes printing a bare "null".

✨ Features

🌐 Three Tunnel Providers — ngrok, cloudflared, and playit.gg, configurable per tunnel. Mix them freely.

📡 UDP + Static Addresses (playit.gg) — the only provider here with a stable UDP address, built for Bedrock/Geyser. TCP-only and combined TCP+UDP tunnels are also available (require playit premium).

🔑 Multiple ngrok Accounts — Each ngrok tunnel has its own authtoken (required for v3). Run different accounts simultaneously.

🚀 Zero-Setup Quick Tunnels — Cloudflared quick tunnels work out of the box with no account.

📌 Custom Domains — Cloudflared named tunnels give you persistent custom hostnames via Cloudflare Zero Trust.

🖥️ Web Dashboard — Full management UI. Create/edit/delete tunnels live, download binaries, change settings — all from a browser.

⚡ Auto-Download — Detects OS and CPU arch, downloads the right binary on first use. Cached forever after.

🔔 Instant URL Broadcast — URL goes to console and all online OPs the moment the tunnel is ready.

🎮 Full Command Support — /tunnel with tab completion for everything.

🔁 Auto-Restart & Crash Loop Protection — Tunnels restart after failure. Stops retrying if it fails too many times in a short window.

🩺 Health Checks — ngrok tunnels get API-level checks; cloudflared tunnels get process-alive checks.

🐋 Pterodactyl Compatible — Tunnels are outbound connections, so no extra port allocations are ever needed.


📥 Installation

  1. Drop TunnelMC.jar into plugins/
  2. Start the server — TunnelMC generates config and auto-exposes the dashboard via cloudflared if no tunnels are configured
  3. Open the printed URL in your browser
  4. Configure tunnels from the dashboard, or edit config.yml and run /tunnel reload

⚙️ Configuration

auto-start: false
default-region: "us"       # fallback region for ngrok tunnels
notify-ops: true
auto-restart: true
restart-delay-seconds: 10
max-restarts: 5
crash-window-seconds: 60
health-check-interval-seconds: 30

dashboard:
  enabled: true
  port: 8090
  bind-address: "127.0.0.1"
  password: "changeme"
  auto-expose-on-first-run: true

tunnels:
  # Cloudflared quick tunnel — no account, random URL, HTTP only
  - name: "dashboard"
    port: 8090
    provider: "cloudflared"
    auto-start: true

  # ngrok HTTP tunnel with its own account token
  - name: "noderunner"
    port: 8080
    provider: "ngrok"
    protocol: "http"
    region: "us"
    authtoken: "your-ngrok-token-here"

  # ngrok TCP tunnel from a different account
  - name: "gameserver"
    port: 25565
    provider: "ngrok"
    protocol: "tcp"
    region: "eu"
    authtoken: "another-account-token"

  # ngrok tunnel with a reserved/static domain (picked from ngrok's dashboard)
  - name: "stable-mc"
    port: 25565
    provider: "ngrok"
    protocol: "tcp"
    authtoken: "your-ngrok-token-here"
    hostname: "your-reserved-domain.ngrok-free.dev"

  # Cloudflared named tunnel — persistent custom domain
  - name: "mc"
    port: 25565
    provider: "cloudflared"
    token: "your-cloudflare-zero-trust-token"
    hostname: "mc.yourdomain.com"

  # playit.gg — link an account from the dashboard first (Settings tab); Bedrock is UDP-only
  - name: "bedrock"
    port: 19132
    provider: "playit"
    playit-type: "minecraft-bedrock"
    auto-start: true

🎮 Commands & Permissions

Permission: tunnelmc.admin (default: OP)

CommandDescription
/tunnel start [name]Start all or a specific tunnel
/tunnel stop [name]Stop all or a specific tunnel
/tunnel restart [name]Restart all or a specific tunnel
/tunnel url [name]Show public URL(s)
/tunnel statusShow all tunnel status
/tunnel download ngrokDownload ngrok binary
/tunnel download cloudflaredDownload cloudflared binary
/tunnel download playitDownload playit binary
/tunnel playit claimPrint a link to link a playit.gg account
/tunnel playit statusShow playit.gg link status
/tunnel playit unlinkUnlink playit.gg and stop its tunnels
/tunnel dashboardShow dashboard port info
/tunnel reloadReload config and restart tunnels

📋 Provider Comparison

ngrokCloudflared QuickCloudflared Namedplayit.gg
Account required✅ free❌ none✅ free✅ free
HTTP tunnels✅✅✅✅ (via TCP)
TCP tunnels✅❌✅✅ (Java preset free; custom TCP-only needs premium)
UDP tunnels❌❌❌✅ (free — Bedrock preset and custom UDP)
Persistent URLpaid only❌✅✅
Multiple accounts✅ per-tunnel———
macOS build✅✅✅⚠️ TunnelMC-built

⚠️ Free Plan Notes

ngrok free: one active tunnel at a time, random URL on each restart, bandwidth limits. Authtoken is required for all ngrok v3 tunnels. Per-tunnel authtokens let you use multiple free accounts to work around the one-tunnel limit.

Cloudflared quick tunnels: HTTP only, random *.trycloudflare.com URL, no bandwidth limits.

Cloudflared named tunnels: require a Cloudflare account (free), any protocol, persistent custom domain.


🐋 Pterodactyl

No extra port allocations needed — tunnels are outbound connections only. The dashboard also binds locally and doesn't need an allocated port.

Slow download? TunnelMC will warn after 30 seconds with manual install steps. Place the binary at plugins/TunnelMC/ngrok/ngrok, plugins/TunnelMC/cloudflared/cloudflared, or plugins/TunnelMC/playit/playitd and restart.


📊 Compatibility

PlatformsBukkit, Spigot, Paper, Purpur
Minecraft1.21.x – 26.2.x
Java25+ (compiled with Java 25)
OSLinux, macOS, Windows
Archx64, ARM64

⚠️ macOS + playit.gg: ngrok and cloudflared ship official macOS builds and work normally. playit.gg does not — the dashboard's Settings tab offers a TunnelMC-compiled build (SHA-256 verified) or self-build instructions.


🔗 Related

NodeRunner — Run a Node.js Discord bot inside your Minecraft server.

PyRunner — Run a Python Discord bot inside your Minecraft server.

TunnelMC pairs perfectly with both — a cloudflared quick tunnel to port 8080 makes their dashboards publicly accessible with zero port allocation.


Developed by Spider~~~~

Последние версии

Все версии →
release

TunnelMC 1.5.0

1.5.0
30 авг. 2026 г.412Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, paper, purpur, spigot
Скачать
Что нового
## 🆕 What's New in 1.5.0: Reliability & Security Fixes A maintenance release from a systematic audit, plus one addition to keep pace with an ngrok change: - **Added: ngrok tunnels can now use a reserved/static domain.** ngrok moved domain selection to their own dashboard ("Choose your URL") — pick one there, drop it into the new `hostname` field, and it's passed along with `--url`. Leave it blank for a random domain each start, same as before. - **Fixed: editing a tunnel could silently wipe its saved authtoken/cfToken.** The edit form correctly never sends secrets back to the browser, but saving an unrelated change (like toggling auto-start) was overwriting the stored token with blank — breaking the tunnel on its next start. Blank secret fields on save now keep the existing value; only an actual new value overwrites it. - **Fixed: a tunnel name containing an apostrophe broke every action button on that tunnel's card.** Start/Stop/Restart/Delete/Copy buttons are now correctly escaped for names, URLs, and IDs containing `'`, `"`, or `\`. - **Fixed: renaming a tunnel to an existing tunnel's name silently orphaned the old one.** The old tunnel's process kept running with nothing left tracking it, and it disappeared from `config.yml` entirely. Renaming to a name already in use is now rejected instead. - **Fixed: clicking Stop immediately after Start could leave an untracked tunnel process running,** and later resurrect it as "running" in the dashboard even though you'd explicitly stopped it. A start/stop race no longer lets a launch that lost the race adopt its process. - **Fixed: playit.gg's "Try Again" button could hand back a dead claim session** for up to ~11 minutes after a rejected or cancelled link attempt, instead of issuing a fresh code. - **Fixed: an unsanitized tunnel name could write ngrok's per-tunnel config file outside the intended directory.** Tunnel names are now restricted to letters, numbers, `_`, and `-`. - **Fixed: editing any tunnel could silently wipe a saved ngrok reserved domain back to blank,** since the persistence path rebuilt every tunnel's entry from scratch on every save. - **Fixed: a malformed dashboard API request could return an empty, unexplained server error** with nothing in the log. Bad requests now get a clear JSON error and the real cause is logged server-side. - **Improved: error logging** for playit/ngrok/cloudflared download and connection failures now always includes the exception type (and throw site when there's no message), instead of sometimes printing a bare "null".
release

TunnelMC 1.4.0

1.4.0
11 авг. 2026 г.122Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, paper, purpur, spigot
Скачать
Что нового
## 🆕 What's New in 1.4.0: playit.gg Support **A static address, right protocol per tunnel.** playit.gg is the pick for Bedrock/Geyser — TCP for Java Edition, UDP for Bedrock (Bedrock/RakNet is UDP-only), both with an address that survives restarts. Neither ngrok's free tier nor cloudflared quick tunnels can do that, and the official playit.gg plugin doesn't support UDP either. Combined TCP+UDP and TCP-only custom tunnels are also available (require playit premium); UDP-only and the two Minecraft presets work on the free tier. **No token to paste.** Link an account from the dashboard's Settings tab — click **Link**, open the generated claim link, approve it in your browser, and the dashboard flips to linked automatically. **One shared agent.** playit's model is one agent per machine (accounts have a limited agent quota), so TunnelMC runs a single `playitd` process shared by every playit tunnel you add. Every claim provisions a fresh agent identity — there's no API to target an existing one — so Unlink deletes this server's tunnels from your playit.gg account before clearing the secret, and a re-link recreates them fresh with new addresses. That keeps tunnels from piling up on your account; the one thing that still needs manual cleanup is the old agent record itself at playit.gg/account/agents, since playit has no API to delete an agent at all. **Clean up leftovers without leaving the dashboard.** A "Check for Other Tunnels" button in Settings finds any tunnel on your playit agent that TunnelMC isn't tracking and lets you delete it in place. Deleting a tunnel from the Tunnels tab deletes it on playit's side too. **macOS:** playit.gg publishes no official Mac binary. The dashboard offers a TunnelMC-compiled build (SHA-256 verified) or self-build instructions — ngrok and cloudflared are unaffected and work normally on macOS.
release

TunnelMC 1.3.0

1.3.0
14 мая 2026 г.207Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, paper, purpur, spigot
Скачать
Что нового
## 🆕 What's New in 1.3.0 ### Java 25 & Build Modernization - **Upgraded to Java 25** — compiled with Java 25 bytecode for the latest JVM performance and language features. - **Gradle 9.5.1** — build system upgraded from Gradle 8.x to 9.5.1 for native Java 25 support. - **Virtual thread executor** — the dashboard HTTP server now uses `newVirtualThreadPerTaskExecutor()` for non-blocking I/O scaling on Java 25. - **`plugin.yml` api-version** updated from `1.13` to `1.21` to match the target platform and suppress Paper deprecation warnings. ### Security Hardening - **CSRF protection** — all mutating API endpoints now require an `X-TM-Request` header. - **Brute-force login protection** — lockout after 5 failed attempts with 500ms delay per failure. - **Timing-safe password comparison** — login now uses `MessageDigest.isEqual()` to prevent timing attacks. - **CSP headers** — Content-Security-Policy added to all dashboard responses to mitigate XSS risks. - **Session sweep** — expired sessions and stale lockout entries are automatically cleaned up hourly. ### Stability - **`volatile` singleton** — static plugin instance is now `volatile` and nulled on disable to prevent classloader leaks during reloads. - **Config bounds checking** — all numeric config getters now clamp to valid ranges via `Math.max`. - **Default password warning** — a prominent console warning at startup if the dashboard password is still `"changeme"`. ### Compatibility - **Minecraft 1.21.x – 26.2.x** — compiled against Paper 1.21.1 API, which is forward-compatible with all Paper versions through 26.2.x. Existing configs remain fully compatible — no config changes required.
release

TunnelMC 1.2.0

1.2.0
13 апр. 2026 г.44Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Скачать
Что нового
## 🆕 What's New in 1.2.0 ### Cloudflared Support Every tunnel now has its own `provider` field. Choose `ngrok` or `cloudflared` per tunnel, or mix them in the same config. **Cloudflared quick tunnels** — zero account setup, random `*.trycloudflare.com` URL, HTTP only. Great for dashboards and web services. **Cloudflared named tunnels** — paste a Cloudflare Zero Trust token and your custom hostname. Persistent URL, any protocol you've configured in Cloudflare. ### Multiple ngrok Accounts Each ngrok tunnel now has its own `authtoken` field (required for ngrok v3). Authtokens are passed as a CLI flag instead of writing to the global ngrok config, so you can run tunnels from completely different ngrok accounts at the same time. ### Per-Tunnel Region Each ngrok tunnel can set its own `region`, overriding the global default. ### Web Dashboard A full browser-based management dashboard on port `8090` (local only). From it you can: - View all tunnels — status, URL, uptime, restarts - Start / stop / restart tunnels individually - **Create, edit, and delete tunnels live** — no server restart needed - Download ngrok and cloudflared binaries with one click - Edit all global settings ### Auto-Expose on First Run If no tunnels are configured, TunnelMC automatically downloads cloudflared and creates a quick tunnel to the dashboard on first startup so you can access it from anywhere right away. ### Per-Tunnel Auto-Start Each tunnel has its own `auto-start` field. Set it to `true` to start a tunnel on server boot even when global auto-start is off. The default `dashboard` tunnel ships with `auto-start: true`.
release

TunnelMC 1.1.0

1.1.0
31 мар. 2026 г.20Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Скачать
Что нового
## 🆕 What's new in 1.1.0 ### Auto-Restart & Crash Loop Protection Tunnels now restart automatically if the ngrok process exits unexpectedly. Crash loop protection kicks in if a tunnel fails too many times within a configurable time window, stopping the retry cycle to prevent runaway restarts. Both the restart delay and failure threshold are fully configurable. ### Health Checks TunnelMC now periodically verifies each tunnel is still alive by querying ngrok's local API. If a tunnel silently dies without crashing, the health check catches it and triggers an automatic restart. The check interval is configurable, or can be disabled entirely. ### `/tunnel download` Command You can now trigger the ngrok binary download manually at any time from in-game or console with `/tunnel download`. Useful if the initial download failed or you want to re-fetch the binary without restarting your server. ### NodeRunner & PyRunner Integration If [NodeRunner](https://modrinth.com/plugin/noderunner) or [PyRunner](https://modrinth.com/plugin/pyrunner) is installed and one of your configured tunnel ports matches their dashboard port, TunnelMC will print a helpful suggestion in console. This is purely informational — these bot runners are never auto-started by TunnelMC. --- ### Config changes Four new options have been added to `config.yml`: ```yaml auto-restart: true restart-delay-seconds: 10 max-restarts: 5 crash-window-seconds: 60 health-check-interval-seconds: 30 integrations: noderunner-suggestion: true pyrunner-suggestion: true ``` Existing configs remain fully compatible — all new keys will use their defaults if not present.
release

TunnelMC 1.0.0

1.0.0
29 мар. 2026 г.35Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Скачать
Что нового
# TunnelMC 🌐 > **Expose any port on your Minecraft server to the internet via ngrok tunnels — no extra port allocations needed.** TunnelMC is a Bukkit/Spigot/Paper plugin that automatically downloads and manages ngrok as a child process, creates tunnels for any local port, and broadcasts the public URL to console and online OPs the moment the tunnel is ready. Perfect for exposing web dashboards (like [NodeRunner](https://modrinth.com/plugin/noderunner)'s WebUI) when you don't have a spare port allocation on shared or Pterodactyl hosting. --- ## ✨ Features ### ⚡ Zero-Touch ngrok Setup No ngrok installed? No problem. TunnelMC automatically detects your OS and CPU architecture and downloads the correct ngrok v3 binary on first launch. Downloaded once, cached forever. ### 🔌 HTTP & TCP Protocol Support Use `http` protocol for web dashboards and APIs — gets you a public `https://` URL instantly. Use `tcp` for game servers, SSH, databases, or any other TCP traffic — gets you a `tcp://` address. Note: UDP is not supported by ngrok. ### 🔀 Multiple Tunnels Define as many tunnels as you need in config, each with its own name, port, and protocol. Each tunnel runs as an independent ngrok process. ### 🔔 Instant URL Broadcast The public ngrok URL is printed to console and sent to all online OPs the moment the tunnel comes online — no need to dig through logs. ### 🎮 Full In-Game Control Start, stop, restart, and check tunnel status from in-game or the console via `/tunnel`. Tab completion included. ### 🐋 Pterodactyl Compatible Fully tested on Pterodactyl panels. No extra port allocation needed — that's the whole point. If your host throttles the ngrok download, TunnelMC will warn you after 30 seconds with manual install instructions. ### ⚙️ Auto-Start Optionally start all tunnels automatically on server boot with a configurable startup delay. --- ## 📥 Installation 1. Drop `TunnelMC.jar` into your `plugins/` folder 2. Start the server once to generate the config 3. Sign up free at [ngrok.com](https://ngrok.com) and copy your authtoken from the [dashboard](https://dashboard.ngrok.com/get-started/your-authtoken) 4. Paste your authtoken into `plugins/TunnelMC/config.yml` 5. Restart or run `/tunnel start` --- ## ⚙️ Configuration ```yaml authtoken: "your-ngrok-token-here" auto-start: true startup-delay-seconds: 0 region: "us" # us, eu, ap, au, sa, jp, in notify-ops: true tunnels: - name: "dashboard" port: 8080 protocol: "http" # https:// URL - name: "gameserver" port: 25565 protocol: "tcp" # tcp:// URL ``` --- ## 🎮 Commands & Permissions **Permission:** `tunnelmc.admin` *(default: OP)* | Command | Description | | :--- | :--- | | `/tunnel start [name]` | Start all or a specific tunnel | | `/tunnel stop [name]` | Stop all or a specific tunnel | | `/tunnel restart [name]` | Restart all or a specific tunnel | | `/tunnel url [name]` | Show public URL(s) | | `/tunnel status` | Show status of all tunnels | | `/tunnel reload` | Reload config and restart tunnels | --- ## ⚠️ ngrok Free Plan Limitations - **1 tunnel at a time** — Free accounts cannot run multiple simultaneous tunnels. Multiple tunnels require a paid ngrok plan. - **Random URLs** — Free accounts get a new random URL on every restart. Paid plans support fixed custom domains. - **Bandwidth limits** — Free accounts have monthly bandwidth limits. See [ngrok's pricing](https://ngrok.com/pricing). - **UDP not supported** — ngrok only supports TCP-based protocols. --- ## 🐋 Pterodactyl Notes No extra port allocation needed — TunnelMC handles that. However, some hosts throttle downloads from `bin.equinox.io`. If that happens, TunnelMC warns you after 30 seconds and you can install ngrok manually instead: 1. Download ngrok from [ngrok.com/download](https://ngrok.com/download) on your PC — pick **Linux → 64-bit** 2. Extract the archive — you get a single file called `ngrok` 3. Upload it to `plugins/TunnelMC/ngrok/ngrok` via the file manager (the second `ngrok` is the file name itself) 4. Restart — TunnelMC detects it automatically and skips the download --- ## 📊 Compatibility | | | | :--- | :--- | | **Platforms** | Bukkit, Spigot, Paper, Purpur | | **Minecraft** | 1.13+ | | **Java** | 11+ (21 recommended) | | **OS** | Linux, macOS, Windows | | **Architectures** | x64, ARM64 | | **Hosting** | Self-hosted, Pterodactyl, any VPS | > **⚠️ Java Version Note:** Although the plugin API is compatible with 1.13+, the JAR is compiled with Java 21 which means your server must be running **Java 21 or higher** regardless of Minecraft version. Older Minecraft versions (1.13–1.16) typically run on Java 8 or 11 and will fail to load this plugin with an `UnsupportedClassVersionError`. In practice, **Java 21 + Paper 1.21.x** is the recommended and fully tested setup. --- ## 🔗 Related **[NodeRunner](https://modrinth.com/plugin/noderunner)** — Run a Node.js Discord bot directly inside your Minecraft server. TunnelMC pairs perfectly with NodeRunner to expose its web dashboard without needing an extra port. --- ## 📄 License **All Rights Reserved** — This plugin and its source code are proprietary. You may not copy, redistribute, modify, or decompile this software without explicit written permission from the author. --- *Developed by [Spider](https://github.com/Spider2742)*