Skip to content

Web Frontend and API for DNS Zonefile Management

License

Notifications You must be signed in to change notification settings

holysoles/zoneforge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ZoneForge

ZoneForge is a management tool for RFC1035/BIND style DNS zone files.

GitHub License Issues

Warning

This is in early development and should be considered unstable until the first official release.

About

Zone files are a commonly supported standard for serving authoritative DNS zone records, such as in BIND, NSD, and CoreDNS's file plugin. While those DNS server implementations are highly performant and lightweight, they don't provide a user-friendly way to manage their zone's records.

ZoneForge simplifies the management of RFC1035/BIND-style DNS zone files by providing an intuitive web-based interface and REST API, instead of re-inventing an entire DNS server. This project is ideal for administrators who require:

  • A centralized, user-friendly tool to manage DNS records.
  • Robust REST API.
  • Deployment flexibility for various environments.

Table of Contents

Features

Zones

Create

curl -X POST 'http://localhost:5000/api/zone/test.example.com.'

Read

Get all zones

curl -X GET 'http://localhost:5000/api/v1/zone'

Get specific zone

curl -X GET 'http://localhost:5000/api/zone/example.com.'

Delete

curl -X DELETE 'http://localhost:5000/api/zone/test.example.com.'

Records

  • Limited support for record types (A, CNAME, SOA, MX, NS, TXT).

  • EOL comments are supported in the comments key of returned records.

Create

curl -X POST 'http://localhost:5000/api/zone/example.com./record/subdomain' \
--header 'Content-Type: application/json' \
--data '{
    "record_type": "CNAME",
    "record_data": "ns100.example.com"
}'

Read

curl -X GET 'http://localhost:5000/api/zone/example.com./record/subdomain'

Update

curl -X POST 'http://localhost:5000/api/zone/example.com./record/subdomain' \
--header 'Content-Type: application/json' \
--data '{
    "record_type": "CNAME",
    "record_data": "subdomain2.example.com"
}'

Delete

curl -X DELETE 'http://localhost:5000/api/zone/example.com./record/subdomain' \
--header 'Content-Type: application/json' \
--data '{
    "record_type": "CNAME"
}'

Roadmap

Feature Roadmap

Feature Status
Web Interface
Create Zones Complete
Delete Zones Planned
Edit Records Planned
Create Records Planned
Delete Records Planned
Multi-zone Support Complete
REST API
CRUD for DNS Zones Complete
CRUD for DNS Records Complete
Thread Safety for DNS Record CRUD Backlog
Management
Expanded Record Type Support Planned
Authentication Backlog
Zone Import/Export Backlog
Preserve Default Zone TTL Backlog
CI/CD
Dockerfile Planned
GitHub Actions Build Pipeline Planned
Package for PyPi/pip Backlog
Test Suite Backlog
GitHub Actions Test Pipeline Backlog
CoreDNS Kubernetes Integration Backlog

Resources

Zone Files

Migrating Existing DNS to a Zone File

For each domain that a given DNS server is authorative for:

  1. First ensure that the zone is enabled for Zone transfer. For Windows DNS, this can be found by right-clicking the Zone -> Properties -> Zone Transfers.

  2. Install dig on a unix-like system

  3. Find the name servers if necessary: dig example.com -t ns

  4. Initiate the Zone Transfer: dig axfr example.com @dns.example.com | grep -E -v '^;' > db.example.com

  5. The file db.example.com should now contain a RFC1035-compatible zone file.

Credits

Special thanks to the following projects for providing essential libraries:

About

Web Frontend and API for DNS Zonefile Management

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published