dns
Security covered
Manage DNS zones and records directly in Drupal.
The DNS module provides a modern, extensible system for defining and managing DNS data inside Drupal using content entities, with support for common record types and a plugin-based architecture for future integrations.
✨ Features
- Zone management
- Create, edit, and delete DNS zones
- Unicode (IDN) support with automatic Punycode normalization
- Clean, canonical URLs based on zone names
- Record management
- Full CRUD for DNS records within each zone
- Built-in support for common record types:
- A, AAAA, CNAME, NS, MX, TXT, PTR, CAA, SRV
- Validation based on DNS RFCs (including CNAME exclusivity rules)
- Modern Drupal architecture
- Zones and records are content entities
- Works with Views, REST, JSON:API, and other entity-based systems
- Plugin-based record type system for extensibility
- Views integration
- Built-in admin listing for records
- Zone pages include embedded record listings
- Custom Views fields for record data
- IDN-aware
- Enter domains like
münchen.de - Stored internally as Punycode
- Displayed to users in Unicode
- Enter domains like
- Tested and CI-enabled
- Automated unit, kernel, and functional tests
- Drupal.org CI (phpcs, phpstan, phpunit, etc.)
🚧 Project status
This is a complete rewrite of the legacy Drupal 7 DNS module.
- Current branch: 2.x
- Status: alpha
- Not production-ready for critical DNS workflows without evaluation
The 2.x branch is a new architecture, not an upgrade of the 7.x codebase.
⚠️ Limitations (alpha)
- No migration path from Drupal 7 yet
- A Migrate-based upgrade path is planned before stable release
- No DNS provider integration yet
- Support for providers like Cloudflare, Route 53, etc. is planned
- No advanced delegation
- Zone ownership is currently user-based (no shared management yet)
- No exotic record types
- Additional DNS types (DNAME, TLSA, SSHFP, etc.) will be provided in a future module
🧩 Extensibility
The module is designed to be extended:
- Add new DNS record types via plugins:
#[RecordType( id: "my_type", label: "My record type" )] - Future provider modules will:
- Implement DNS APIs
- Add provider-specific record types where needed
🛣 Roadmap
- Drupal 7 → 2.x migration path
- DNS provider integration (Cloudflare, Route 53, etc.)
- SPF builder/validator for TXT records
- IANA TLD validation
- DNS drift detection (compare stored vs live DNS)
- Additional record types via optional module
📦 Requirements
- Drupal 10.3+, 11.x
(Drupal 12 compatibility is tracked but not yet guaranteed)
🔄 Drupal 7 users
- Continue using the 7.x-1.x branch for now
- Do not upgrade directly to 2.x
- A migration path will be provided before the 2.x stable release
💬 Feedback
Feedback is welcome:
- Bug reports
- Feature requests
- Architecture feedback
Please use the project issue queue.
🧠 Why this module?
- Correctness (DNS-aware validation)
- Modern Drupal architecture (entities + plugins)
- Extensibility (record types and future providers)
- Real-world usability (Views, API support, IDN handling)