Private DNS in Cloud: VPC DNS Architecture Guide

Private DNS enables internal service discovery without exposing records to the internet. This guide covers private DNS architecture across AWS, Azure, and GCP—from basic VPC DNS to complex hybrid scenarios.

Why Private DNS?

Private DNS provides several benefits:

VPC DNS Resolution

AWS VPC DNS

Amazon provides automatic DNS for every VPC:

# VPC DNS resolution flow
Instance → 10.0.0.2 (VPC resolver)
              │
              ├── Private hosted zone? → Return private record
              │
              ├── VPC endpoint zone? → Return endpoint IP
              │
              └── Otherwise → Query public DNS

GCP Cloud DNS

Azure DNS

Private Hosted Zones

AWS Route 53 Private Hosted Zones

Create custom domain names for internal resources:

# Create private hosted zone
aws route53 create-hosted-zone \
  --name internal.example.com \
  --vpc VPCRegion=us-east-1,VPCId=vpc-12345678 \
  --caller-reference $(date +%s) \
  --hosted-zone-config PrivateZone=true

# Add a record
aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890ABC \
  --change-batch '{
    "Changes": [{
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "api.internal.example.com",
        "Type": "A",
        "TTL": 300,
        "ResourceRecords": [{"Value": "10.0.1.100"}]
      }
    }]
  }'

Associating Multiple VPCs

Hybrid DNS Architecture

Connecting cloud and on-premise DNS requires bidirectional resolution:

Cloud → On-Premise Resolution

VPC Instance → Route 53 Resolver Outbound Endpoint → On-Prem DNS

Configuration:
- Outbound endpoint in VPC
- Resolver rule for corp.example.com → on-prem DNS IPs
- Traffic flows over VPN/Direct Connect

On-Premise → Cloud Resolution

On-Prem Server → Conditional Forwarder → Route 53 Resolver Inbound Endpoint

Configuration:
- Inbound endpoint in VPC (gets ENI with IP)
- On-prem DNS forwards *.aws.example.com to inbound endpoint IPs

Route 53 Resolver Architecture

                        ┌─────────────────────┐
                        │   Route 53 Resolver │
                        └──────────┬──────────┘
                                   │
        ┌──────────────────────────┼──────────────────────────┐
        │                          │                          │
        ▼                          ▼                          ▼
┌───────────────┐         ┌───────────────┐          ┌───────────────┐
│ Inbound       │         │ Outbound      │          │ Resolver      │
│ Endpoint      │         │ Endpoint      │          │ Rules         │
│ (On-prem→AWS) │         │ (AWS→On-prem) │          │               │
└───────────────┘         └───────────────┘          └───────────────┘

Split-Horizon DNS

Same domain name resolves differently based on query source:

Use Cases

Implementation

# Public hosted zone (internet-facing)
Zone: example.com (public)
app.example.com → 203.0.113.10 (public IP/ALB)

# Private hosted zone (VPC internal)
Zone: example.com (private, associated with VPC)
app.example.com → 10.0.1.100 (private IP)

When a VPC instance queries, Route 53 checks private zones first:

  1. Query for app.example.com
  2. VPC resolver checks: Is there a private zone for example.com?
  3. Yes → Return private record (10.0.1.100)
  4. If no private zone → Forward to public DNS

Service Discovery Patterns

AWS Cloud Map

Kubernetes DNS

Consul DNS

DNS for VPC Endpoints

VPC endpoints can create private DNS entries for AWS services:

Interface Endpoints

Gateway Endpoints (S3, DynamoDB)

Troubleshooting Private DNS

Common Issues

Debugging Commands

# Check resolver configuration
cat /etc/resolv.conf

# Query VPC DNS directly
dig @169.254.169.253 api.internal.example.com

# Check what DNS server is being used
dig +trace api.internal.example.com

# AWS: List private hosted zones associated with VPC
aws route53 list-hosted-zones-by-vpc \
  --vpc-id vpc-12345678 \
  --vpc-region us-east-1

Key Takeaways

Need Private DNS Architecture Help?

We design hybrid DNS solutions for complex environments. Contact us for a consultation.