A Morpheus Data plugin that integrates with the UniFi Network Controller (Dream Machine / UDM-Pro) to provide full DNS record management directly from the Morpheus UI.
- Full DNS CRUD — Create, read, update, and delete DNS records via the Morpheus DNS integration interface
- Supported record types — A, AAAA, CNAME, MX, TXT, SRV, FORWARD_DOMAIN
- IPv4 & IPv6 — Full support for both address families
- Automatic sync — Existing UniFi DNS policies are inventoried into Morpheus on integration refresh
- TTL "Auto" — Sending TTL
0maps to UniFi's "Auto" TTL setting; the default for all records created through this plugin is Auto - API Key authentication — Uses the modern UniFi Network Integration API; no username/password or session cookies required
| Requirement | Details |
|---|---|
| Morpheus version | 6.x+ (plugin API compatible) |
| UniFi Network Controller | Firmware supporting Integration API v10.x+ (Dream Machine / UDM-Pro) |
| Java | JDK 11+ for build; plugin runs on the Morpheus JVM |
- Log in to your UniFi Network controller
- Navigate to Settings → Integrations → API
- Create a new API key and copy it
- Navigate to Infrastructure → Network → DNS & IP Management
- Click + Add Integration and select UniFi
- Fill in the fields:
| Field | Description |
|---|---|
| Controller URL | Base URL of your UDM/UDM-Pro, e.g. https://192.168.1.1 |
| API Key | The API key generated in step 1 |
| Site Name | UniFi site name (default: default) |
| Ignore SSL Errors | Enable if using a self-signed certificate |
| Inventory Existing | Import all existing DNS records from UniFi on first sync |
| Create PTR Records | Automatically create reverse PTR records for A/AAAA entries |
All DNS operations use the UniFi Network Integration API v1:
https://<controller>/proxy/network/integration/v1/sites/{siteId}/dns/policies
Authentication is via the X-API-KEY header — no session, no CSRF token.
The plugin resolves the human-readable site name (e.g. default) to the internal UUID via:
GET /proxy/network/integration/v1/sites
UniFi has no concept of DNS zones — all records live flat under a site. The plugin creates a single synthetic zone named "UniFi DNS" (keyed by siteId) to satisfy the Morpheus zone model. All records appear under this zone.
| Morpheus Type | UniFi API Type | Key Fields |
|---|---|---|
| A | A_RECORD |
domain, ipv4Address, ttlSeconds |
| AAAA | AAAA_RECORD |
domain, ipv6Address, ttlSeconds |
| CNAME | CNAME_RECORD |
domain, targetDomain, ttlSeconds |
| MX | MX_RECORD |
domain, mailServerDomain, priority |
| TXT | TXT_RECORD |
domain, text |
| SRV | SRV_RECORD |
domain, serverDomain, service, protocol, port, priority, weight |
| FORWARD_DOMAIN | FORWARD_DOMAIN |
domain, ipAddress |
- TTL
0= Auto in the UniFi UI (controller manages TTL automatically) - The default TTL for all records created by this plugin is
0(Auto) - Leave the TTL field blank when creating records to use Auto
Requires JDK 17 and Gradle (wrapper included).
# Windows
$env:JAVA_HOME = "C:\Program Files\Microsoft\jdk-17.0.19.10-hotspot"
.\gradlew.bat shadowJar
# Linux/macOS
JAVA_HOME=/path/to/jdk17 ./gradlew shadowJarOutput JAR: build/libs/morpheus-unifi-plugin-1.0.0-all.jar
- Build the plugin JAR (or download a release)
- In Morpheus, go to Admin → Integrations → Plugins
- Click + Add Plugin and upload the JAR
- The UniFi integration type will appear in Infrastructure → Network → DNS & IP Management
Note: When updating the plugin, fully uninstall the old version and restart the Morpheus UI service (
morpheus-ctl restart morpheus-ui) before installing the new JAR to ensure plugin assets (logo, etc.) are refreshed from cache.
| Resource | URL |
|---|---|
| Morpheus Developer Docs | https://developer.morpheusdata.com/docs#ipamdns-plugins |
| Morpheus Plugin API Javadoc | https://developer.morpheusdata.com/api/index.html |
| UniFi Network Integration API | https://developer.ui.com/network/v10.1.84/gettingstarted |
| UniFi Brand Assets | https://techspecs.ui.com |
This plugin is provided as-is. See LICENSE for details.