Premium Cloud Hosting!

Contact Info

Hostnali Webhost Limited

+254 748285257

[email protected]

ORDER NOW
Multi-DNS Manager Pro — Documentation

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

Client logs into WHMCS client area
Client opens domain → clicks DNS Manager in sidebar
Client clicks Enable DNS → zone created at your provider
Client adds / edits / deletes records from the client area
Module calls your DNS provider API in real time
Records go live on your nameservers within minutes

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
Hosting clients If a client has an active hosting plan with you, they should manage DNS inside cPanel Zone Editor instead. This module is designed specifically for domain-only clients.

02 Requirements

RequirementMinimumNotes
WHMCS8.13+Earlier versions are not supported
PHP8.2 (8.3 recommended)PHP 8.1 and below will not work
PHP GMP ExtensionRequiredMust be enabled before running Composer
Composer2.xRequired to install PHP dependencies after upload
SSL CertificateRequiredWHMCS already requires SSL — no extra action needed
DNS Provider AccountRequiredAPI credentials from one of the 10 supported providers
cPanel / WHM servers Install the GMP extension for your PHP version before running Composer. On cPanel/WHM: 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
PHP version mismatch If your server's default CLI PHP version is below 8.3, run Composer explicitly with the correct binary:
/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.

Cloudflare
● Supported
Bunny DNS
● Supported
PowerDNS
● Supported
Vultr
● Supported
Bind9
● Supported
ClouDNS
● Supported
deSEC
● Supported
DNSimple
● Supported
Hetzner
● Supported
AnycastDNS
● Supported
Switching providers You can switch providers at any time from the module configuration screen without reinstalling. Existing zones and records already created at the old provider will not be migrated automatically.

05 Activating the Module Admin

1

Log in to WHMCS Admin Area

Navigate to System Settings → Addon Modules.

2

Find DNS Hosting

Locate DNS Hosting in the addon list and click Activate.

3

Click Configure

Once active, click Configure to open the module settings panel.

4

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.

Provider Required

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.

API Key Required

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.

SOA Email Optional

Email address used in the SOA (Start of Authority) record for DNS zones. Typically set to [email protected]. Required by some providers.

BIND / PowerDNS API IP Conditional

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.

NS1 — NS5 NS1 / NS2 Required

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.

💡
Where to get your API key Bunny DNS: Account Settings → API Keys  |  Cloudflare: My Profile → API Tokens  |  Vultr: Account → API  |  PowerDNS: set in 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:

NameserverIPv4IPv6
ns1.yourdomain.com91.200.176.12400:52e0:fff0::1
ns2.yourdomain.com109.104.147.12400:52e0:fff2::1
Glue records Register glue records at your domain registrar pointing ns1.yourdomain.com91.200.176.1 and ns2.yourdomain.com109.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>
💡
Keep it consistent The nameserver hostnames in the template must exactly match what you entered in the NS1/NS2 module configuration fields. Mismatched values will confuse clients.

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:

1

Log into the client area

Client logs into your WHMCS installation with their email and password.

2

Go to My Domains

From the navigation, click Domains → My Domains and click their domain name.

3

Click DNS Manager in the sidebar

In the domain management sidebar (the Manage panel containing Overview, Nameservers, Registrar Lock etc.), click DNS Manager.

Nameservers must be correct DNS records added through the DNS Manager only take effect if the client's domain is pointed to your nameservers (NS1/NS2 configured in the module settings). Clients are shown a reminder of the correct nameservers before enabling DNS.

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.

1

Open DNS Manager

Navigate to the domain and click DNS Manager in the sidebar.

2

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.

3

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

FieldDescriptionRequired
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
Root domain (@) Entering @ 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.

1

Click Edit on the record

In the records table, click the ✎ Edit button in the Actions column. The row expands into an editable form.

2

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.

3

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

🚨
Deletion is permanent Deleted records are removed from the nameservers immediately. Any services depending on that record (website, email, third-party tools) will stop working until the record is recreated. There is no undo.
1

Click Delete on the record

Click the red 🗑 Delete button in the Actions column.

2

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.

🚨
All records will be deleted Disabling DNS removes the entire zone — all records are lost. Only use this when intentionally migrating away from your nameservers.

15 DNS Record Types

TypeFull NamePurposeCan 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

TypeHostValueTTL
A@91.200.176.133600
CNAMEwwwyourdomain.com3600

Set up email (MX)

TypeHostValuePriorityTTL
MX@aspmx.l.google.com13600
MX@alt1.aspmx.l.google.com53600

SPF record (email authentication)

TypeHostValueTTL
TXT@v=spf1 include:_spf.google.com ~all3600

DMARC record

TypeHostValueTTL
TXT_dmarcv=DMARC1; p=none; rua=mailto:[email protected]3600

Domain ownership verification

TypeHostValueTTL
TXT@google-site-verification=AbCdEfGhIjKl3600

Point subdomain to a different server

TypeHostValueTTL
Ashop192.168.1.1003600
CNAMEblogmysite.wordpress.com3600

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:

  1. Confirm the domain is pointed to the correct nameservers
  2. Wait for DNS propagation — up to 48 hours for nameserver changes, up to 2 hours for record changes
  3. Use dnschecker.org to verify propagation status globally
  4. 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 vendor folder 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.com instead of www
  • 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