A modern web-based DNS management interface for PowerDNS to manage DNS zones and delegations.
- User Authentication: Secure JWT-based authentication system
- Zone Management: View and manage DNS zones assigned to your account
- Record Management: Add, edit, and delete DNS records (A, CNAME, MX, TXT, NS)
- Subdomain Delegation: Configure NS records for subdomain delegation
- Access Request System: Users can request access to new subdomains
- Admin Panel: Administrators can approve/deny access requests and manage zones
- Modern Dashboard: Professional admin interface with stats and visual indicators
- React 19.2.0: Modern UI library
- Vite: Fast build tool and development server
- CSS Custom Properties: Design system with theming support
- Express.js: Web application framework
- better-sqlite3: SQLite database for user management
- PowerDNS API: DNS zone and record management
- JWT: Secure token-based authentication
- bcrypt: Password hashing
- Node.js 18+ and npm
- PowerDNS server with API enabled
- SQLite3
- Clone the repository:
git clone <repository-url>
cd dns-frontend- Install dependencies:
npm install- Configure backend (serverapp.js):
const PDNS_API_URL = "http://your-pdns-server:8081/api/v1";
const PDNS_API_KEY = "your-api-key";
const PDNS_API_SERVER_ID = "localhost";
const BASE_DOMAIN = "your-domain.dev.";
const JWT_SECRET = "your-secure-jwt-secret";- Start the backend server:
node serverapp.js- Start the frontend development server:
npm run dev- Open your browser to
http://localhost:5173
The system uses the following nameservers:
- Primary:
ns1.rubbish.dev. - Secondary:
ns2.rubbish.dev.
SOA records are automatically configured with:
- Primary nameserver:
ns1.rubbish.dev. - Hostmaster email:
hostmaster.rubbish.dev. - SOA edit API:
INCEPTION-INCREMENT(automatic serial updates)
- View assigned DNS zones
- Manage DNS records within their zones
- Configure subdomain delegation
- Request access to new subdomains
- All regular user permissions
- Approve/deny subdomain access requests
- Manage all zones in the system
- View admin panel and request history
POST /auth/register- Register new userPOST /auth/login- User login
GET /zones- List user's zonesGET /zones/:name/records- Get zone recordsPOST /zones/:name/records- Add recordDELETE /zones/:name/records- Delete recordPOST /zones/:name/delegate- Configure delegation
GET /admin/zones- List all zonesPOST /admin/zones- Create new zoneGET /admin/requests- View all access requestsPOST /admin/requests/:id/approve- Approve requestPOST /admin/requests/:id/deny- Deny request
id: Primary keyemail: User email (unique)password_hash: bcrypt hashed passwordis_admin: Boolean admin flagcreated_at: Timestamp
id: Primary keyname: Zone name (e.g., parish.rubbish.dev)user_id: Foreign key to userscreated_at: Timestamp
id: Primary keyuser_id: Foreign key to userszone_name: Requested subdomainreason: User's justificationstatus: pending/approved/deniedcreated_at: Request timestampupdated_at: Last status change
npm run buildnpm run preview- The
serverapp.jsfile contains sensitive configuration and is excluded from git - JWT tokens are stored in localStorage
- Passwords are hashed with bcrypt before storage
- API requests require valid JWT tokens
- Admin endpoints check user permissions
MIT License