Built with GitHub Copilot (Grok Code Fast 1) - AI-assisted development for enhanced productivity and code quality.
Copyright (c) 2025 NDash Project - All rights reserved.
NDash adalah dashboard administrasi modern untuk PowerDNS yang dibangun dengan Express.js, EJS, Alpine.js, dan Shadcn UI components.
- π¨ Modern UI: Menggunakan Tailwind CSS dengan komponen Shadcn UI
- β‘ Reactive: Alpine.js untuk interaktivitas yang ringan
- π PowerDNS API: Integrasi lengkap dengan PowerDNS API
- π Dashboard: Overview statistik dan monitoring
- π Zone Management: Kelola DNS zones dengan mudah
- π Record Management: CRUD operations untuk DNS records
- π Statistics: Visualisasi statistik server PowerDNS
β οΈ Error Handling: Banner notifikasi error dengan tombol retry otomatis- π Auto Refresh: Refresh data secara manual dengan loading indicator
NDash dilengkapi dengan sistem error handling yang user-friendly:
- Error Banner: Muncul secara otomatis ketika ada masalah koneksi ke PowerDNS API
- Detailed Messages: Menampilkan pesan error yang jelas dan actionable
- Retry Button: Tombol retry untuk mencoba koneksi ulang
- Visual Indicators: Status server berubah warna (Online = hijau, Error/Offline = merah)
- Graceful Degradation: UI tetap stabil meskipun backend error
Contoh error yang ditangani:
ECONNRESET: PowerDNS API tidak berjalan atau tidak dapat dijangkauNetwork Error: Masalah koneksi jaringanHTTP 500: Internal server error dari PowerDNSInvalid Data: Format data yang tidak sesuai dari API
NDash includes a built-in Split-Horizon DNS Proxy that provides different DNS responses based on client subnet:
- Client-aware responses: Different answers for internal vs external clients
- CIDR subnet support: Configure IP ranges for internal/external networks
- Real-time configuration: Changes apply immediately without restarting
- DNS proxy server: Runs on port 5353 (configurable)
{
"enabled": true,
"zones": [
{
"name": "dionipe.local",
"internal": [
{"name": "@", "type": "A", "value": "192.168.203.5"}
],
"external": [
{"name": "@", "type": "A", "value": "8.8.8.8"}
]
}
],
"subnets": {
"internal": ["192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12"],
"external": ["0.0.0.0/0"]
}
}# Test external response (from 127.0.0.1)
$ dig @127.0.0.1 -p 5353 dionipe.local
# Answer: 8.8.8.8
# Test internal response (from PowerDNS directly)
$ dig @127.0.0.1 dionipe.local
# Answer: 192.168.203.5- Client Detection: Proxy identifies client IP and determines if it's internal or external
- Record Selection: Serves appropriate records based on client type
- Fallback: Forwards non-Split-Horizon queries to upstream DNS server
- Real-time Updates: Configuration reloads automatically when changed via web UI
- Server Response: ~19ms
- HTML Size: ~23KB
- API Response: ~20ms
- Alpine.js Bindings: 76 (optimized)
Untuk production deployment, jalankan:
./bundle-resources.sh # Bundle CDN resources locallyIni akan mengurangi external requests dan meningkatkan loading speed.
- Node.js v16 atau lebih tinggi
- PowerDNS server dengan API diaktifkan
- npm atau yarn
- Clone atau extract project ini:
cd /opt/ndash- Install dependencies:
npm install- Copy file konfigurasi dan edit sesuai kebutuhan:
cp .env.example .env
nano .env- Konfigurasi file
.env:
PORT=3000
NODE_ENV=development
# PowerDNS API Configuration
PDNS_API_URL=http://localhost:8081
PDNS_API_KEY=your-powerdns-api-key-here
# Session Secret
SESSION_SECRET=change-this-to-a-random-secret-key- Jalankan aplikasi:
# Development mode (dengan auto-reload)
npm run dev
# Production mode
npm start- Buka browser dan akses:
http://localhost:3000
Pastikan PowerDNS API sudah diaktifkan. Edit file konfigurasi PowerDNS (biasanya /etc/powerdns/pdns.conf):
# Enable API
api=yes
api-key=your-secure-api-key-here
# Bind API to localhost (atau IP tertentu)
webserver=yes
webserver-address=0.0.0.0
webserver-port=8081
webserver-allow-from=127.0.0.0/8,::1
Restart PowerDNS setelah mengubah konfigurasi:
systemctl restart pdnsJika mendapat error Authentication by API Key failed:
- Periksa API Key: Pastikan
api-keydi PowerDNS config sama denganPDNS_API_KEYdi.env - Periksa webserver-allow-from: Konfigurasi ini harus mengizinkan akses dari IP NDash server
- Test Direct API:
curl -H "X-API-Key: your-key" http://localhost:8081/api/v1/servers - Restart Services: Restart PowerDNS dan NDash setelah perubahan config
# PowerDNS API Configuration
PDNS_API_URL=http://localhost:8081
PDNS_API_KEY=your-powerdns-api-key
# NDash Configuration
PORT=3000
NODE_ENV=development
SESSION_SECRET=your-session-secretndash/
βββ lib/
β βββ pdns-client.js # PowerDNS API client
βββ public/
β βββ css/
β β βββ style.css # Custom styles
β βββ js/
β βββ app.js # Frontend JavaScript
βββ views/
β βββ partials/
β β βββ header.ejs # Header template
β β βββ footer.ejs # Footer template
β βββ index.ejs # Dashboard page
β βββ error.ejs # Error page
βββ .env.example # Environment variables template
βββ .gitignore # Git ignore rules
βββ package.json # Project dependencies
βββ server.js # Main application file
GET /api/servers- Get all serversGET /api/servers/:serverId/statistics- Get server statistics
GET /api/servers/:serverId/zones- Get all zonesGET /api/servers/:serverId/zones/:zoneId- Get specific zonePOST /api/servers/:serverId/zones- Create new zoneDELETE /api/servers/:serverId/zones/:zoneId- Delete zone
PATCH /api/servers/:serverId/zones/:zoneId- Update records
npm run devIni akan menjalankan aplikasi dengan nodemon yang akan otomatis restart saat ada perubahan file.
- Backend: Express.js
- View Engine: EJS (Embedded JavaScript)
- Frontend Framework: Alpine.js
- CSS Framework: Tailwind CSS
- UI Components: Shadcn-inspired components
- Icons: Lucide Icons
- HTTP Client: Axios
- Gunakan HTTPS di production
- Ubah
SESSION_SECRETdengan nilai random yang aman - Jangan expose PowerDNS API ke internet
- Implementasikan authentication jika diperlukan
- Batasi akses API PowerDNS dengan firewall
- Authentication & Authorization
- Record editing interface
- Bulk operations
- Search functionality
- Export/Import zones
- Activity logs
- DNSSEC management
- Multi-server support
- Dark mode
- Responsive mobile view improvements
Kontribusi sangat diterima! Silakan fork project ini dan submit pull request.
MIT License - lihat file LICENSE untuk detail.
Created with β€οΈ for the PowerDNS community
Jika menemukan bug atau masalah, silakan buat issue di repository ini.
- Backup: Selalu backup konfigurasi PowerDNS sebelum melakukan perubahan
- Testing: Test di environment development sebelum deploy ke production
- Monitoring: Pantau log aplikasi untuk debugging
- Performance: Gunakan reverse proxy (nginx/apache) di production
NDash - Modern PowerDNS Administration Made Easy