When managing multiple domains (like your case with ~100 domains), DNS hosting becomes critical for website availability and performance. FreeDNS from Afraid.org is a common starting point, but as you've experienced, reliability issues with DNS propagation can cause frustrating accessibility problems - where sites work via IP but not domain resolution.
Cloudflare DNS offers a completely free tier with:
- Anycast network with 200+ locations
- API for scripted management (Python example below)
- Web interface and zone file imports
# Python example for Cloudflare API
import requests
headers = {
'X-Auth-Email': 'your@email.com',
'X-Auth-Key': 'your_api_key',
'Content-Type': 'application/json'
}
response = requests.get(
'https://api.cloudflare.com/client/v4/zones',
headers=headers
)
print(response.json())
For more advanced needs with 100+ domains:
- Amazon Route 53: $0.50 per domain/month + $0.40 per million queries
- Google Cloud DNS: $0.20 per zone/month + $0.40 per million queries
Offers completely free DNS hosting with:
- Support for DNSSEC
- IPv6 support
- Web interface and dynamic DNS
When switching providers for multiple domains:
- Export all zone files from current provider
- Verify TTL values (set low before migration)
- Use API scripts to bulk import records
- Monitor DNS propagation with tools like DNS Checker
For API-driven management, consider this bash script template for bulk operations:
#!/bin/bash
# Bulk DNS record migrator
DOMAINS=$(cat domains.txt)
for DOMAIN in $DOMAINS
do
# Export from old provider
curl -X GET "https://oldprovider/api/export/$DOMAIN" > $DOMAIN.zone
# Import to new provider
curl -X POST "https://newprovider/api/import" \
-H "Authorization: Bearer $API_KEY" \
-F "zonefile=@$DOMAIN.zone"
done
As developers managing multiple domains, we often face reliability issues with free DNS providers. When visitors report access problems while direct IP connections work, it's typically a DNS propagation or availability issue. Having managed ~100 domains myself, I've tested numerous solutions and want to share practical findings.
Cloudflare DNS offers free plans with:
- Anycast network with 100% uptime SLA
- API for programmatic management
- Bulk domain support via Terraform
# Terraform example for Cloudflare DNS
resource "cloudflare_record" "www" {
zone_id = var.cloudflare_zone_id
name = "www"
value = "192.0.2.1"
type = "A"
ttl = 3600
}
For $5/month, DigitalOcean DNS provides:
- Global anycast network
- REST API with rate limiting
- 1000+ domains per account
# Python script for DigitalOcean API
import requests
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"type": "A",
"name": "www",
"data": "192.0.2.1",
"ttl": 3600
}
response = requests.post(
"https://api.digitalocean.com/v2/domains/example.com/records",
headers=headers,
json=data
)
Free for personal use with:
- IPv6 support
- Dynamic DNS capabilities
- Web interface + email updates
When switching providers:
- Lower TTL values 24h before migration
- Use
dig +trace
to verify propagation - Implement health checks using Python:
import dns.resolver
def check_dns(domain, record_type="A"):
try:
answers = dns.resolver.resolve(domain, record_type)
return [rdata.address for rdata in answers]
except Exception as e:
print(f"DNS resolution failed: {e}")
return False
For bulk management, consider using Ansible playbooks or Terraform modules to automate DNS record deployment across multiple providers.