DynamicDNS
2.2Keeps your subserver online by auto-updating its IP when it changes. Perfect for home-hosted servers with dynamic IPs.
- Tested MC versions
- 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.17, 1.18, 1.19, 1.20, 1.21, 26.1, 26.2, 26.3

DynamicDNS is a lightweight, cross-platform Minecraft plugin and proxy extension that keeps your subservers connected and reachable even when hosted on dynamic IP addresses (such as home servers or VPS nodes without static IPs).
No separate port forward, custom daemons or DNS propagation delays are required — address changes are synchronized in real-time directly through Minecraft's native networking layer.
Features
- Port-Free Subserver Synchronization: Subservers ping the proxy using native Minecraft Handshake packets signed with HMAC-SHA256 (
sync.v2.<name>.<port>.<signature>). No extra open ports or firewall adjustments are needed on the proxy. - HMAC-SHA256 Handshake Verification: Cryptographic handshake signatures verify authenticity without exposing the raw secret token over the wire, with seamless backward-compatibility for legacy payloads.
- Proxy Configuration Persistence: Automatically registers, updates, and persists subserver addresses directly into
velocity.toml(Velocity) orconfig.yml(BungeeCord). - Subserver Status & Last Update Tracking: Displays real-time registration status and accurate
last updatetimestamps recorded directly on the proxy. - Multiple DDNS Providers:
- Cloudflare DNS API: Automated updates for root or subdomain
A(IPv4) andAAAA(IPv6) records with configurable proxy (orange cloud) status. - DuckDNS: Instant HTTP/HTTPS updates with dual-stack IPv4 and IPv6 support.
- No-IP / DynDNS v2: Automated hostname updates using HTTP Basic Auth.
- Dynu DDNS: Updates Dynu domains and SRV records automatically with your current public IP address or ngrok hostname.
- Cloudflare DNS API: Automated updates for root or subdomain
- Dual-Stack IPv4 & IPv6 Detection: Native public IPv4 and IPv6 resolution via redundant global lookup services.
- Built-in ngrok Tunneling: Automatically exposes local servers via ngrok TCP tunnels and propagates the assigned public tunnel endpoint to your proxy or Dynu.
- Integrated Modrinth Update Checker: Checks for new releases against the Modrinth API asynchronously in the background.
- All-in-One Universal Jar: One unified artifact supports all platforms.
Supported Platforms
| Platform | Type | Minimum Version |
|---|---|---|
| Velocity | Proxy | 3.x / 4.x |
| BungeeCord / Waterfall | Proxy | 1.8.8 – 26.4 |
| Paper / Purpur / Spigot / Folia | Subserver | 1.8.8 – 26.4 |
| Sponge | Subserver | SpongeAPI 8+ (Minecraft 1.16.5+) |
How It Works
+-------------------------------------------------------------------+
| Subserver (Spigot / Paper / Sponge) |
| |
| 1. Periodically sends handshake ping: |
| virtualHost = "sync.v2.<name>.<port>.<hmac>" |
+---------------------------------+---------------------------------+
|
(Standard Minecraft Port, e.g. 25565)
v
+-------------------------------------------------------------------+
| Proxy (Velocity / BungeeCord) |
| |
| 2. Intercepts incoming handshake/ping connection |
| 3. Verifies HMAC-SHA256 signature |
| 4. Updates subserver address in proxy server registry |
| 5. Saves updated address to velocity.toml or config.yml |
| 6. Records 'last update' timestamp and drops connection |
+-------------------------------------------------------------------+
- The subserver runs a repeating background task sending a handshake ping to the proxy's regular Minecraft address and port.
- The payload contains the subserver identifier, target port/IP, and a 32-character HMAC-SHA256 signature calculated with the shared secret token.
- The proxy verifies the signature using its shared secret.
- The proxy updates the subserver route dynamically in memory, persists it to file, records the proxy-side
last updatetimestamp, and terminates the sync ping handshake without proxying player traffic.
Installation & Setup
1. Proxy Setup (Velocity or BungeeCord)
- Drop
DynamicDNS.jarinto your proxy'splugins/directory. - Start or restart the proxy to generate
plugins/DynamicDNS/config.yml. - Open
plugins/DynamicDNS/config.ymland enable synchronization:server_sync: enabled: true token: "YOUR_SECRET_TOKEN" # If left blank, a UUID token is automatically generated on startup - Copy the secret
tokenfor use on your subservers.
2. Subserver Setup (Paper, Spigot or Sponge)
- Drop
DynamicDNS.jarinto your subserver'splugins/(ormods/on Sponge) directory. - Start or restart the server to generate
config.yml. - Configure
plugins/DynamicDNS/config.yml:server_sync: enabled: true token: "YOUR_SECRET_TOKEN" # Must match the token set on your proxy name: "survival" # The server ID registered on the proxy target_address: "proxy.host:25565" # Host and port of your proxy server interval: 30 # Sync interval in seconds - Reload the configuration with
/dynamicdns reloador restart the subserver. The proxy will automatically register the subserver's current IP and port.
Configuration Reference (config.yml)
# Global debug logging - logs every sync ping sent and hook execution
debug: false
# Automatically check for updates on startup via Modrinth
check_updates: true
# Configuration for ngrok - creates secure tunnels to local servers
ngrok:
enabled: false
token: ""
region: "US"
# Configuration for Dynu Dynamic DNS - updates a domain record with current IP address
dynu:
enabled: false
domain: "example.dynu.com"
client: ""
secret: ""
# Configuration for Cloudflare DNS API (A and AAAA records)
cloudflare:
enabled: false
api_token: ""
zone_id: ""
record_name: "play.yourdomain.com"
proxied: false
update_ipv6: false
# Configuration for DuckDNS
duckdns:
enabled: false
domain: "myserver"
token: ""
update_ipv6: false
# Configuration for No-IP / DynDNS v2
noip:
enabled: false
hostname: "myserver.ddns.net"
username: ""
password: ""
# Subserver address synchronization via Minecraft Handshake ping
server_sync:
# Enable synchronization (true on proxy to accept pings; true on subserver to send pings)
enabled: false
# Shared secret token for authenticating subservers with the proxy
token: ""
# Subserver identifier configured on the proxy (Subserver only, e.g. "survival")
name: "survival"
# Target proxy address and port (Subserver only, e.g. "123.123.123.123:25565")
target_address: "123.123.123.123:25565"
# Interval in seconds between sync pings sent to proxy (Subserver only)
interval: 30
Commands & Permissions
| Command | Aliases | Description | Permission |
|---|---|---|---|
/dynamicdns status | /ddns status | Displays active provider hooks, registered subservers, and last update timestamps | dynamicdns.status |
/dynamicdns sync | /ddns sync | Forces an immediate sync ping to the configured proxy (subserver only) | dynamicdns.sync |
/dynamicdns reload | /ddns reload | Reloads config.yml and restarts active hooks | dynamicdns.reload |
/dynamicdns update | /ddns update | Checks Modrinth for available plugin updates | dynamicdns.update |
The dynamicdns.admin permission grants full access to all commands. By default, permissions are granted to server operators (op) or administrators.
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta