I built VirtualDNS, a programmable internal DNS for private environments, because I kept breaking my own infrastructure every time I changed an IP, added a service, or tried to keep multiple environments consistent.
This is not public DNS. It is a private, multi-tenant DNS layer for internal connectivity, service discovery, and infra automation.
Why I built it:
- /etc/hosts drift across machines
- Internal DNS setups with no audit logs
- Environments behaving differently because configs weren’t aligned
- IP changes silently breaking services
- Teams building their own “mini DNS” scripts
- Using public domains just to test internal stuff
- Slow propagation inside private environments
- Wanting service discovery without the overhead of Consul/CoreDNS
What it does: - Virtual domains resolvable only inside your project/org
- Multi-IP records for load balancing, failover, and high availability
- Health-ordered IP responses
- Full audit logs for resolutions and modifications
- Versioned changes with rollback
- Granular tokens with per-project scopes
- CLI, SDKs, and a daemon for OS-level resolution
- No public DNS, no TTL delays, no external exposure
Technical notes:
- Resolver implemented from scratch, independent of OS DNS unless using the daemon
- Domains and records stored as versioned states (commit-like)
- Each resolution is logged with requester, token, timestamp, and metadata
- Projects are fully isolated, allowing identical domain names across orgs
- Multi-IP responses support rebalancing based on service health
- Daemon works as a lightweight local DNS forwarder
What I'm looking for:
- Feedback from people who handle internal DNS or service discovery
- Edge cases I should consider
- Concerns about using a managed internal DNS
- Suggestions for integration points (Terraform, WireGuard, Nomad, etc.)
Landing page (very early): https://virtualdns.io
Happy to answer technical questions.