dynamoip

Documentation

Give any service a real domain name and trusted HTTPS — reachable from your LAN or the entire internet.

dynamoip is a Node.js reverse proxy and DNS automation tool. It assigns stable domain names and trusted HTTPS certificates to local services so they're reachable from any device on your network — or the entire internet — with one command.

Three modes

Max mode

Uses Cloudflare Tunnel to expose services to the public internet. No port forwarding, no firewall rules, no inbound ports.

  • cloudflared installs itself on first run
  • Cloudflare manages TLS — no certificate to configure
  • DNS uses CNAME records pointing to the tunnel
  • [PUBLIC] label in CLI output

Requires: A Cloudflare-managed domain and an API token with Zone:DNS:Edit + Account:Cloudflare Tunnel:Edit.

Pro mode

Uses your own domain with Cloudflare DNS and Let's Encrypt certificates. Services are LAN-only.

  • dynamoip sets Cloudflare DNS A records pointing to your LAN IP
  • Obtains a wildcard certificate via DNS-01 challenge
  • Every device on the network trusts it out of the box — no setup on other devices
  • [LAN] label in CLI output

Requires: A Cloudflare-managed domain and an API token with Zone:DNS:Edit.

Quick mode

Uses mDNS .local hostnames — no domain or Cloudflare account required. LAN only.

  • Works via dns-sd (macOS) or avahi (Linux)
  • Uses mkcert to generate a locally-trusted certificate
  • Other devices need the mkcert CA installed once

Requirements

  • Node.js 18+
  • macOS or Linux (Windows supported via Docker)
  • sudo for Pro and Quick modes (to bind ports 80/443) — or pass --port 8443 to avoid it. Max mode needs no sudo.

Install

npm install --save-dev dynamoip
# or
pnpm add -D dynamoip
# or
yarn add -D dynamoip

Minimal config

Pro mode:

{
  "baseDomain": "yourdomain.com",
  "domains": {
    "myapp": 3000
  }
}

Max mode (add one key):

{
  "baseDomain": "yourdomain.com",
  "tunnel": true,
  "domains": {
    "myapp": 3000
  }
}

Quick mode (omit baseDomain):

{
  "domains": {
    "myapp": 3000
  }
}

Run

# Pro / Quick mode (binds ports 80/443)
sudo npm run dev:proxy

# Max mode — no sudo needed
npm run dev:proxy

See Quick Setup for step-by-step instructions.

On this page