Create Custom DNS Zones in WHM
How to add, edit, and delete DNS zones and records in WHM: A, CNAME, MX, TXT, and other record types explained with examples.
WHM includes a full DNS server (BIND). This guide covers adding DNS zones, editing records, and the most common record types you’ll work with.
Adding a new DNS zone
A DNS zone needs to exist before a domain can be hosted or have DNS records managed from WHM.
Editing a DNS zone
- Go to DNS Functions → Edit DNS Zone
- Select the domain from the dropdown
- The zone editor shows all existing records
- Modify values directly in the text fields
- Click Save when done
Common record types
A record
Maps a hostname to an IPv4 address.
| Name | TTL | Type | Value |
|---|---|---|---|
yourdomain.com. | 14400 | A | 1.2.3.4 |
www | 14400 | A | 1.2.3.4 |
mail | 14400 | A | 1.2.3.4 |
CNAME record
Creates an alias pointing one hostname to another. Cannot be used on the root domain (@).
| Name | TTL | Type | Value |
|---|---|---|---|
shop | 14400 | CNAME | stores.shopify.com. |
blog | 14400 | CNAME | yourdomain.com. |
MX record
Routes email for the domain to the correct mail server.
| Name | TTL | Type | Priority | Value |
|---|---|---|---|---|
yourdomain.com. | 14400 | MX | 0 | mail.yourdomain.com. |
TXT record
Used for SPF, DKIM, DMARC, and domain verification. No limit on number of TXT records.
| Name | TTL | Type | Value |
|---|---|---|---|
yourdomain.com. | 14400 | TXT | v=spf1 ip4:1.2.3.4 include:mailchannels.net ~all |
_dmarc | 14400 | TXT | v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com |
mail.yourdomain.com. not mail.yourdomain.com. Missing the trailing period causes the server to append the zone name, creating incorrect records.
Checking DNS from command line
# Check A record
dig yourdomain.com A +short
# Check MX
dig yourdomain.com MX +short
# Check all TXT records
dig yourdomain.com TXT +short
# Check from a specific nameserver
dig @ns1.remarkablecloud.com yourdomain.com A
Reloading DNS after changes
WHM reloads BIND automatically when you save a zone. If changes don’t appear immediately, force a reload:
/scripts/restartsrv_named