A self-hostable, open-source DuckDNS alternative
Lightweight dynamic DNS service that lets you manage your DNS records without manual overhead.
You can quickly install and run Dyno using a single command. Replace the environment variables with your own values:
DOMAIN=example.com \
PROVIDER_EMAIL=you@example.com \
PROVIDER_API_KEY=your_cloudflare_key \
POSTGRES_PASSWORD=secure_password \
curl -fsSL sh.rndmcode.in/dyno | bash📖 Detailed Documentation: Visit dyno.docs.rndmcode.in for comprehensive guides, tutorials, and API documentation.
Environment Variables:
DOMAIN: The domain you want to manage (e.g.,example.com)PROVIDER_EMAIL: Your Cloudflare account emailPROVIDER_API_KEY: Your Cloudflare API key (with DNS edit permissions)POSTGRES_PASSWORD: Password for the PostgreSQL database
This script will automatically download and set up Dyno with the provided configuration. After installation, follow the prompts to complete setup and access the dashboard.
Dyno is a self-hosted dynamic DNS service that eliminates the manual overhead of managing DNS records. Bring your own domain and Cloudflare tokens, and let Dyno handle the rest. Perfect for home labs, development environments, and self-hosted infrastructure.
- 🏠 Self-Hosted: Complete control over your DNS data
- 🔐 Secure: Token-based authentication for all operations
- 🚀 Fast: Built with Go for optimal performance
- 🔌 API-First: Comprehensive RESTful API for CLI/script automation
- 📦 Easy Setup: Docker support with minimal configuration
- 🌐 Cloudflare Integration: Currently supports Cloudflare DNS (more providers coming soon)
- 💾 Persistent Storage: PostgreSQL database for reliability
- Dynamic DNS Updates: Automatically update your DNS records when your IP changes
- Multi-User Support: User authentication and authorization system
- RESTful API: Full-featured API for programmatic access
- Domain Management: Create, read, update, and delete DNS records
- IPv4 Support: Automatic IP detection and DNS record updates
- CLI-Friendly: Simple GET endpoints for easy curl-based updates
- Dashboard Ready: API designed for web dashboard integration
- Docker Support: Easy deployment with Docker and Docker Compose
- CI/CD Pipeline: Automated builds and deployments with GitHub Actions
Create a script to update your IP automatically:
#!/bin/bash
# update-ip.sh
TOKEN="your_auth_token"
DOMAIN="home.yourdomain.com"
DYNO_URL="http://localhost:5010"
curl -s "${DYNO_URL}/api/v1/domain/update?domain=${DOMAIN}&token=${TOKEN}"Add to crontab to run every 5 minutes:
*/5 * * * * /path/to/update-ip.shimport requests
DYNO_URL = "http://localhost:5010/api/v1"
TOKEN = "your_auth_token"
headers = {"Authorization": f"Bearer {TOKEN}"}
# List domains
response = requests.get(f"{DYNO_URL}/domains", headers=headers)
print(response.json())
# Update domain
response = requests.get(
f"{DYNO_URL}/domain/update",
params={"domain": "home.yourdomain.com"},
headers=headers
)
print(response.json())$token = "your_auth_token"
$domain = "home.yourdomain.com"
$dynoUrl = "http://localhost:5010"
$headers = @{
"Authorization" = "Bearer $token"
}
Invoke-RestMethod -Uri "$dynoUrl/api/v1/domain/update?domain=$domain" -Headers $headers- Password Hashing: Bcrypt with configurable cost
- Token Authentication: Secure token-based auth system
- Input Validation: Request validation on all endpoints
- SQL Injection Protection: Parameterized queries with sqlx
- Rate Limiting: Configurable via middleware
- HTTPS Ready: Deploy behind reverse proxy (Nginx/Traefik)
- Use strong passwords for database and user accounts
- Keep API tokens secure - never commit them to version control
- Run behind a reverse proxy with HTTPS in production
- Regularly update dependencies and Docker images
- Limit database access to the application only
- Use firewall rules to restrict access to sensitive ports
- ✅ Cloudflare DNS integration
- ✅ User authentication and authorization
- ✅ Domain CRUD operations
- ✅ Automatic IP detection
- ✅ RESTful API
- ✅ Docker support
- ✅ CI/CD pipeline
- Additional DNS Providers
- Route53 (AWS)
- Google Cloud DNS
- DigitalOcean DNS
- Namecheap
- IPv6 Support
- Web Dashboard
- User-friendly interface
- Real-time DNS status
- Domain management UI
- Advanced Features
- Webhook notifications
- Multi-domain support per user
- DNS record history/audit log
- API rate limiting per user
- Email notifications
- Monitoring
- Prometheus metrics
- Health check endpoints
- Status page
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
Please use GitHub Issues to report bugs or request features:
- Bug Report: Describe the issue, steps to reproduce, and expected behavior
- Feature Request: Describe the feature and its use case
This project is licensed under the MIT License - see the LICENSE file for details
Shantanu Mane
- Email: hi@rndmcode.in
- GitHub: @rndmcodeguy20
- Inspired by DuckDNS
- Built with Go
- Uses Cloudflare Go SDK
If you find this project helpful, please consider:
- ⭐ Starring the repository
- 🐛 Reporting bugs
- 💡 Suggesting new features
- 🤝 Contributing code
- 📢 Sharing with others For questions and support, please open an issue on GitHub.
Built with ❤️ by the community
