Passa al contenuto principale
Versione: 0.5.4

CoreDNS su Aruba Cloud

Esegui il deployment di CoreDNS — un server DNS veloce, flessibile e cloud-native — su Aruba Cloud tramite Terraform e cloud-init. CoreDNS è configurato come forwarder DNS con caching, ideale come resolver privato all'interno di una rete VPN.

Versione provider: arubacloud/arubacloud ~> 1.0 | Terraform: ≥ 1.9


Introduzione​

CoreDNS è un server DNS leggero scritto in Go, usato come server DNS predefinito in Kubernetes e ampiamente adottato come resolver privato. Questo esempio esegue il provisioning di un'istanza CoreDNS configurata come forwarder con caching con:

  • CoreDNS installato dal binario ufficiale di GitHub (binario singolo, senza dipendenze)
  • Porta 53 (UDP + TCP) per le query DNS
  • Resolver upstream configurabili (default Cloudflare)
  • Cache DNS da 30 secondi per ridurre il carico upstream
  • Log delle query e segnalazione degli errori abilitati
  • Esecuzione come utente di sistema coredns senza privilegi

Best practice: Abbinalo all'esempio WireGuard. Imposta dns_cidr sul CIDR del tuo tunnel WireGuard e configura i client VPN sull'IP CoreDNS per un resolver privato con caching.


Panoramica dell'architettura​


Infrastruttura creata​

RisorsaPattern del nomeDescrizione
arubacloud_projectcoredns-prodContenitore del progetto
arubacloud_vpccoredns-prod-vpcVirtual Private Cloud
arubacloud_subnetcoredns-prod-subnetSubnet base
arubacloud_securitygroupcoredns-prod-vm-sgSecurity group
arubacloud_securityrulecoredns-prod-vm-sshRegola ingress SSH
arubacloud_securityrulecoredns-prod-vm-dns-tcpRegola ingress DNS TCP 53
arubacloud_securityrulecoredns-prod-vm-dns-udpRegola ingress DNS UDP 53
arubacloud_elasticipcoredns-prod-vm-eipIP pubblico della VM
arubacloud_blockstoragecoredns-prod-bootDisco di boot da 20 GB (Performance)
arubacloud_keypaircoredns-prod-keypairChiave pubblica SSH
arubacloud_cloudservercoredns-prod-vmVM CloudServer

Costo mensile stimato​

RisorsaSpecificheCosto stimato/mese
VM CloudServerCSO1A2 — 1 vCPU / 2 GB~€9
Disco di boot20 GB Performance~€3
Elastic IP—~€3
Totale~€15/mese

Requisiti​

  • Terraform ≥ 1.9
  • ArubaCloud Terraform Provider ~> 1.0
  • Un account ArubaCloud con credenziali API OAuth2
  • Una coppia di chiavi SSH

Variabili​

Obbligatorie​

VariabileDescrizione
arubacloud_client_idClient ID OAuth2 di ArubaCloud
arubacloud_client_secretClient secret OAuth2 di ArubaCloud
ssh_public_keyContenuto della chiave pubblica SSH

Opzionali​

VariabileDefaultDescrizione
app_name"coredns"Nome breve usato in tutti i nomi delle risorse
environment"prod"Etichetta dell'ambiente
location"ITBG-Bergamo"Regione ArubaCloud
zone"ITBG-1"Zona di disponibilità
billing_period"Hour""Hour" o "Month"
vm_flavor"CSO1A2"Flavor del CloudServer
vm_image"LU22-001"Immagine del disco di boot (Ubuntu 22.04 LTS)
vm_disk_size_gb20Dimensione del disco di boot in GB
ssh_cidr"0.0.0.0/0"CIDR per SSH
dns_cidr"0.0.0.0/0"CIDR per la porta DNS 53 — limita al CIDR del tuo tunnel VPN
upstream_dns_1"1.1.1.1"Resolver upstream primario
upstream_dns_2"1.0.0.1"Resolver upstream secondario
coredns_version"1.11.3"Versione di CoreDNS

Output​

OutputDescrizione
dns_serverIndirizzo IP del server DNS
vm_public_ipIndirizzo IP pubblico della VM
ssh_commandComando SSH per connettersi alla VM

Istruzioni di deployment​

1. Clona e naviga​

git clone https://github.com/arubacloud/terraform-arubacloud-examples.git
cd terraform-arubacloud-examples/coredns

2. Configura le variabili​

cp terraform.tfvars.example terraform.tfvars

In produzione, limita l'accesso DNS al tuo tunnel VPN:

dns_cidr = "10.8.0.0/24" # CIDR del tunnel WireGuard
ssh_cidr = "203.0.113.42/32"

3. Esegui il deployment​

terraform init
terraform plan
terraform apply

Il bootstrap richiede circa 2–3 minuti.

4. Configura i client su CoreDNS​

terraform output dns_server

Imposta l'IP in output come server DNS sui tuoi client WireGuard o dispositivi di rete.


Personalizzazione​

Il Corefile in /etc/coredns/Corefile controlla tutto il comportamento. Modificalo e ricarica CoreDNS:

sudo systemctl reload coredns

Aggiungi una zona DNS locale​

example.internal {
file /etc/coredns/db.example.internal
log
errors
}

. {
forward . 1.1.1.1 1.0.0.1
cache 30
log
errors
}

Abilita la validazione DNSSEC​

. {
forward . 1.1.1.1 1.0.0.1 {
policy sequential
}
dnssec
cache 30
log
errors
}

Abilita DNS-over-TLS upstream​

. {
forward . tls://1.1.1.1 tls://1.0.0.1 {
tls_servername cloudflare-dns.com
health_check 5s
}
cache 30
log
errors
}

Risoluzione dei problemi​

CoreDNS non risponde​

sudo systemctl status coredns
sudo journalctl -u coredns -n 30
# Verifica che la porta 53 sia in ascolto:
sudo ss -ulnp | grep :53
sudo ss -tlnp | grep :53

Porta 53 già in uso​

sudo ss -ulnp sport = :53
cat /etc/systemd/resolved.conf | grep DNSStubListener
sudo systemctl restart systemd-resolved
sudo systemctl restart coredns

Test della risoluzione DNS​

dig @<vm-ip> google.com
dig @<vm-ip> google.com A

Riferimenti​