Premium Cloud Hosting!
Recommended Services
Supported Scripts
WordPress
Hubspot
Joomla
Drupal
Wix
Shopify
Magento
Typeo3
Multi-DNS Manager Pro for WHMCS – ducumentation
Multi-DNS Manager Pro for WHMCS
Complete documentation for installing, configuring, and using the Multi-DNS Manager Pro addon — covering both admin setup and client-facing DNS record management.
On this page
01 Overview
Multi-DNS Manager Pro is a WHMCS addon module that gives domain-only clients a fully featured DNS record manager directly inside the WHMCS client area. Clients can enable DNS hosting, add and manage A, AAAA, CNAME, MX, and TXT records — without opening a support ticket or needing access to cPanel.
The module connects to your chosen DNS backend via API. It supports ten providers including Cloudflare, Bunny DNS, PowerDNS, Vultr, and more. You configure the provider once — all client zones are managed through it automatically.
How It Works
Who Is It For?
- Domain-only clients — clients who registered a domain but have no hosting plan
- Hosting clients who manage DNS externally — clients who host elsewhere but use your nameservers
02 Requirements
| Requirement | Minimum | Notes |
|---|---|---|
| WHMCS | 8.13+ | Earlier versions are not supported |
| PHP | 8.2 (8.3 recommended) | PHP 8.1 and below will not work |
| PHP GMP Extension | Required | Must be enabled before running Composer |
| Composer | 2.x | Required to install PHP dependencies after upload |
| SSL Certificate | Required | WHMCS already requires SSL — no extra action needed |
| DNS Provider Account | Required | API credentials from one of the 10 supported providers |
yum install ea-php83-php-gmp -y
(replace ea-php83 with your actual PHP version).
03 Installation
Step 1 — Upload the Module
Extract the package and upload the whmcs_dns folder to your WHMCS installation:
/path/to/whmcs/modules/addons/whmcs_dns/
The final folder structure should look like this:
modules/addons/whmcs_dns/ ├── whmcs_dns.php ├── hooks.php ├── whmcs.json ├── composer.json └── templates/ └── clientarea.tpl
Step 2 — Install PHP Dependencies
SSH into your server and run Composer inside the module folder:
cd /path/to/whmcs/modules/addons/whmcs_dns
composer install
/opt/cpanel/ea-php83/root/usr/bin/php /usr/local/bin/composer install
Step 3 — Fix File Ownership
If you ran Composer as root, correct the vendor folder ownership:
chown -R youruser:youruser /path/to/whmcs/modules/addons/whmcs_dns/vendor
Step 4 — Match PHP Version
The PHP version used for Composer must match the PHP version your WHMCS site runs on. Set your WHMCS site to PHP 8.3 via WHM → MultiPHP Manager for a clean setup, then reinstall dependencies using that same PHP binary.
04 Supported Providers
Select one provider during module configuration. All client zones are managed through it.
05 Activating the Module Admin
Log in to WHMCS Admin Area
Navigate to System Settings → Addon Modules.
Find DNS Hosting
Locate DNS Hosting in the addon list and click Activate.
Click Configure
Once active, click Configure to open the module settings panel.
Set Access Control
Tick which admin role groups should have access to this module (e.g. Full Administrator, Customer Support). Leave other roles unchecked.
06 Module Configuration Admin
All settings are configured from WHMCS Admin → System Settings → Addon Modules → DNS Hosting → Configure.
Select your DNS backend from the dropdown. This is the provider where client DNS zones will be created. See Supported Providers for the full list.
Your DNS provider's API key or token. This is used to authenticate all zone and record operations. Keep this confidential — it grants full DNS management access to your provider account.
Email address used in the SOA (Start of Authority) record for DNS zones. Typically set to [email protected]. Required by some providers.
Only required when using Bind9 or PowerDNS as your provider. Enter the IP address of the server where the Bind9 or PowerDNS API is running and accessible from your WHMCS server.
Your branded nameserver hostnames. These are shown to clients in the DNS Manager and passed to your provider when zones are created. At minimum NS1 and NS2 are required. These must already be registered and working — the module does not create nameservers for you.
pdns.conf as api-key=
07 Setting Up Nameservers Admin
The nameservers you enter in NS1/NS2 are what your clients need to point their domains to. These must be set up at your domain registrar as glue records before any client DNS records will resolve.
Setting Up Custom Nameservers with Bunny DNS
If you are using Bunny DNS, Bunny supports white-label nameservers. Their global anycast IPs are fixed — set your glue records once and never change them:
| Nameserver | IPv4 | IPv6 |
|---|---|---|
| ns1.yourdomain.com | 91.200.176.1 | 2400:52e0:fff0::1 |
| ns2.yourdomain.com | 109.104.147.1 | 2400:52e0:fff2::1 |
ns1.yourdomain.com → 91.200.176.1 and
ns2.yourdomain.com → 109.104.147.1.
Then set yourdomain.com itself to use
ns1.yourdomain.com / ns2.yourdomain.com.
08 Branding the Client Template Admin
The nameservers displayed to clients inside the DNS Manager are hardcoded in the template file and must be updated manually to match your own nameservers.
Template File Location
/path/to/whmcs/modules/addons/whmcs_dns/templates/clientarea.tpl
Block A — Before DNS Is Enabled
Find this block and replace ns1.hostnali.net / ns2.hostnali.net with your own nameservers:
{if !$zone} <ul> <li><strong>ns1.yourdomain.com</strong></li> <li><strong>ns2.yourdomain.com</strong></li> </ul>
Block B — After DNS Is Enabled (Reminder Banner)
Find this block just above the DNS records table and update both nameserver references:
{if $zone} <strong>ns1.yourdomain.com</strong> and <strong>ns2.yourdomain.com</strong>
09 How Clients Access DNS Manager Client
The DNS Manager link appears automatically in the domain management sidebar for all domains in the client's account. Clients access it as follows:
Log into the client area
Client logs into your WHMCS installation with their email and password.
Go to My Domains
From the navigation, click Domains → My Domains and click their domain name.
Click DNS Manager in the sidebar
In the domain management sidebar (the Manage panel containing Overview, Nameservers, Registrar Lock etc.), click DNS Manager.
10 Enabling DNS Client
DNS is not enabled automatically. The client must explicitly activate it once per domain. This creates the DNS zone at your configured provider.
Open DNS Manager
Navigate to the domain and click DNS Manager in the sidebar.
Read the information box
A blue information panel shows the nameservers the domain must be pointed to. The client should verify their domain uses these nameservers before proceeding.
Click Enable DNS
Click the Enable DNS button in the top right. The module calls your provider API to create the zone. A green success message confirms: "DNS enabled. Zone created."
11 Adding DNS Records Client
Once DNS is enabled, the Add Record form appears at the top of the DNS Manager page above the records table.
Form Fields
| Field | Description | Required |
|---|---|---|
| Type | Record type — A, AAAA, CNAME, MX, or TXT | Yes |
| Host / Name | Subdomain prefix only. Use @ or leave blank for root domain. Do not enter the full domain name. |
Subdomains only |
| Value / Points To | Destination — IP address for A/AAAA, domain for CNAME, mail server for MX, text string for TXT | Yes |
| TTL (seconds) | Cache duration. Default 3600 (1 hour) is recommended. Use 300 (5 min) before making changes. | Yes |
| Priority | MX records only. Lower = higher priority. Use 10 for primary mail server. | MX only |
@ or leaving the Host/Name field blank creates a record
for the root domain (e.g. yourdomain.com). Do not type the full
domain name in this field — only the subdomain prefix.
12 Editing Records Client
Records can be edited inline without deleting and recreating them.
Click Edit on the record
In the records table, click the ✎ Edit button in the Actions column. The row expands into an editable form.
Update the Value and/or TTL
The Type and Host/Name fields are locked (shown greyed out). Only the Value and TTL can be changed inline. To change the Type or Host/Name, delete and recreate the record.
Click Save or Cancel
Click ✓ Save to apply the change or Cancel to close the edit row without saving. A success message confirms the update.
13 Deleting Records Client
Click Delete on the record
Click the red 🗑 Delete button in the Actions column.
Confirm deletion
A confirmation popup appears: "Are you sure you want to delete this record?" Click OK to confirm or Cancel to go back.
14 Disabling DNS Client
Clicking Disable DNS removes the entire DNS zone and all records from your provider. The domain will stop resolving until DNS is re-enabled and records are recreated, or the domain is pointed to different nameservers.
15 DNS Record Types
| Type | Full Name | Purpose | Can Use on Root (@)? |
|---|---|---|---|
| A | Address | Points domain/subdomain to an IPv4 address | Yes |
| AAAA | IPv6 Address | Points domain/subdomain to an IPv6 address | Yes |
| CNAME | Canonical Name | Creates an alias pointing to another domain name | No — subdomains only |
| MX | Mail Exchanger | Specifies mail server for the domain. Requires priority. | Yes |
| TXT | Text | Stores text data — SPF, DKIM, DMARC, domain verification | Yes |
16 Common Record Examples
Point domain to a website
| Type | Host | Value | TTL |
|---|---|---|---|
| A | @ | 91.200.176.13 | 3600 |
| CNAME | www | yourdomain.com | 3600 |
Set up email (MX)
| Type | Host | Value | Priority | TTL |
|---|---|---|---|---|
| MX | @ | aspmx.l.google.com | 1 | 3600 |
| MX | @ | alt1.aspmx.l.google.com | 5 | 3600 |
SPF record (email authentication)
| Type | Host | Value | TTL |
|---|---|---|---|
| TXT | @ | v=spf1 include:_spf.google.com ~all | 3600 |
DMARC record
| Type | Host | Value | TTL |
|---|---|---|---|
| TXT | _dmarc | v=DMARC1; p=none; rua=mailto:[email protected] | 3600 |
Domain ownership verification
| Type | Host | Value | TTL |
|---|---|---|---|
| TXT | @ | google-site-verification=AbCdEfGhIjKl | 3600 |
Point subdomain to a different server
| Type | Host | Value | TTL |
|---|---|---|---|
| A | shop | 192.168.1.100 | 3600 |
| CNAME | blog | mysite.wordpress.com | 3600 |
17 Troubleshooting
Class "PlexDNS\Service" not found
The vendor folder is missing or incomplete. Run composer install inside the module folder. See Installation — Step 2.
Unknown DNS provider: Bunny
The installed version of the core library does not support Bunny. This happens when PHP 8.2 was used to install dependencies — Bunny support requires PHP 8.3. Delete vendor and composer.lock and reinstall using a PHP 8.3 binary:
/opt/cpanel/ea-php83/root/usr/bin/php /usr/local/bin/composer install
Composer platform check error (PHP version mismatch)
The vendor folder was compiled with PHP 8.3 but your WHMCS site runs on PHP 8.2. Either upgrade your WHMCS site's PHP version to 8.3 via WHM → MultiPHP Manager (recommended), or reinstall with:
composer install --ignore-platform-req=php
Failed to delete record: No record found with name '...'
The value stored in the WHMCS database no longer matches what the provider holds. Common causes:
- Record was added using
@with a provider version that didn't handle it correctly - Client typed the full domain name (e.g.
yourdomain.com) instead of just the subdomain in the Host field - TXT record quoting mismatch (see below)
Fix: delete the record directly from your provider's dashboard, then recreate it through the client area.
TXT records showing extra quotes
Some providers (PowerDNS, Bind9) require TXT values wrapped in literal quotes. Others (Bunny, Cloudflare) add quoting automatically. If you see double-quoted values in your provider dashboard, this is a provider-specific formatting difference and does not affect DNS resolution for most services. If it causes issues, verify the quoting behaviour in your provider's own documentation.
DNS Manager link not appearing in the sidebar
The sidebar panel name varies between WHMCS versions and themes. Check that hooks.php targets the correct panel name for your WHMCS installation. The hook uses ClientAreaPrimarySidebar and targets the panel named Domain Details Management. If your theme uses a different panel name, update the getChild() call in hooks.php accordingly.
Records added but domain not resolving
Check these in order:
- Confirm the domain is pointed to the correct nameservers
- Wait for DNS propagation — up to 48 hours for nameserver changes, up to 2 hours for record changes
- Use dnschecker.org to verify propagation status globally
- Confirm the record appears correctly in your provider's own dashboard
18 Security Notes
- API key storage: your DNS provider API key is stored in the WHMCS database via the addon module settings. Ensure your WHMCS database is not publicly accessible.
- Ownership verification: every record operation (add, edit, delete) verifies the domain belongs to the logged-in client before any API call is made. Clients cannot modify other clients' zones.
- CSRF protection: all form submissions use WHMCS's built-in
check_token()for CSRF protection. - Vendor ownership: ensure the
vendorfolder is owned by your web server user, not root, after running Composer. - Access control: use the Access Control checkboxes in the module configuration to limit which admin roles can view or modify module settings.
- Debug files: remove any debug output or temporary files added during installation before going live.
19 FAQ
Can I switch DNS providers after installing?
Yes — change the Provider and API Key in module settings at any time. Existing zones already created at the previous provider will not be migrated automatically. Clients would need to disable and re-enable DNS to create fresh zones at the new provider.
Does this work for clients with hosting plans?
The module appears for all domains. However clients with active hosting plans should manage DNS inside cPanel Zone Editor instead. You can communicate this clearly through the reminder banner in the client area template.
Can a client manage DNS for multiple domains?
Yes — the DNS Manager is per-domain. A client with multiple domains can enable and manage DNS separately for each one.
What happens if the client deletes all records?
The DNS zone remains active but empty. The domain will stop resolving correctly until records are recreated. The client can also use Disable DNS to remove the zone entirely.
Does this module work with WHMCS multi-server setups?
Yes — the module uses a single DNS provider configured at the addon level, regardless of how many hosting servers you have. All client DNS zones route through the same provider.
What happens to DNS zones when a domain is transferred out?
The module does not automatically delete zones when a domain is transferred or cancelled. You should periodically audit orphaned zones in your DNS provider dashboard and remove them manually.
Is there a limit on how many records a client can add?
The module itself imposes no limit. Record limits depend on your DNS provider's account plan. Check your provider's documentation for any zone or record limits that apply to your account tier.
20 Changelog
v2.0 — July 2026
- Upgraded to
namingo/plexdns v1.0.11— adds Bunny DNS support - Inline record editing — edit value and TTL without deleting and recreating
- Root domain (
@) handling fixed for Bunny DNS provider - Full domain name input normalisation — prevents duplicate records when clients type
www.yourdomain.cominstead ofwww - TTL displayed as human-readable labels (e.g. 3600s (1 hour))
- Priority field hidden for non-MX records in edit mode
- Nameserver reminder banner added above DNS records table
- DNS Manager link moved to primary sidebar (Domain Details Management panel)
- SPF and DS record types removed from dropdown — SPF via TXT, DS via DNSSEC
- Long TXT record values truncated in display with full value on hover
v1.0 — Initial Release
- Initial release with support for 9 DNS providers
- Enable/disable DNS zone per domain
- Add and delete A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR records
- DNS Manager link injected into domain sidebar via hook