Passa al contenuto principale
Versione: 0.5.5

Bind DNS su Aruba Cloud

Esegui il deployment di BIND9 — il software per server DNS più diffuso al mondo — su Aruba Cloud tramite Terraform e cloud-init. BIND9 è configurato come resolver ricorsivo con caching, con forwarder upstream configurabili e controllo degli accessi integrato.

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


Introduzione​

BIND9 (Berkeley Internet Name Domain) è l'implementazione di riferimento del protocollo DNS e il server DNS autoritativo e ricorsivo più comunemente distribuito. Questo esempio esegue il provisioning di un resolver con caching con:

  • BIND9 installato dai pacchetti ufficiali di Ubuntu 22.04
  • Configurato come forwarder con caching — le query vengono risolte tramite server upstream configurabili e memorizzate nella cache localmente
  • Controllo degli accessi tramite sia il security group (dns_cidr) che le ACL allow-query / allow-recursion di BIND9 — doppia protezione contro l'abuso da open-resolver
  • Porta 53 (UDP + TCP) per le query DNS
  • Listener stub di systemd-resolved disabilitato in modo che BIND9 possa occupare la porta 53

Scelta tra server DNS: Usa BIND9 quando hai bisogno di hosting DNS autoritativo, gestione complessa delle zone o firma DNSSEC. Per un semplice resolver con caching, considera CoreDNS, Pi-hole o AdGuard Home.


Panoramica dell'architettura​


Infrastruttura creata​

RisorsaPattern del nomeDescrizione
arubacloud_projectbind-prodContenitore del progetto
arubacloud_vpcbind-prod-vpcVirtual Private Cloud
arubacloud_subnetbind-prod-subnetSubnet base
arubacloud_securitygroupbind-prod-vm-sgSecurity group
arubacloud_securityrulebind-prod-vm-sshRegola ingress SSH
arubacloud_securityrulebind-prod-vm-dns-tcpRegola ingress DNS TCP 53
arubacloud_securityrulebind-prod-vm-dns-udpRegola ingress DNS UDP 53
arubacloud_elasticipbind-prod-vm-eipIP pubblico della VM
arubacloud_blockstoragebind-prod-bootDisco di boot da 20 GB (Performance)
arubacloud_keypairbind-prod-keypairChiave pubblica SSH
arubacloud_cloudserverbind-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"bind"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 sempre
upstream_dns_1"1.1.1.1"Resolver upstream primario
upstream_dns_2"1.0.0.1"Resolver upstream secondario

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/bind-dns

2. Configura le variabili​

cp terraform.tfvars.example terraform.tfvars

Limita sempre dns_cidr per evitare che il tuo server venga usato come open resolver:

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 1–2 minuti.

4. Testa e configura i client​

dig @$(terraform output -raw dns_server) google.com

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


Personalizzazione​

La configurazione di BIND9 si trova in /etc/bind/named.conf.options. Ricarica dopo le modifiche:

sudo named-checkconf && sudo systemctl reload bind9

Aggiungi una zona autoritativa​

Crea un file di zona e aggiungilo a /etc/bind/named.conf.local:

zone "example.internal" {
type master;
file "/etc/bind/db.example.internal";
};

Quindi crea /etc/bind/db.example.internal:

$TTL 300
@ IN SOA ns1.example.internal. admin.example.internal. (
2024010101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
300 ) ; Minimum TTL

@ IN NS ns1.example.internal.
ns1 IN A <vm-ip>
host1 IN A 10.0.0.1

Abilita la validazione DNSSEC​

La validazione DNSSEC è già abilitata (dnssec-validation auto). Per firmare anche le tue zone, installa dnssec-tools e segui la guida DNSSEC di BIND9.


Risoluzione dei problemi​

BIND9 non risponde​

sudo systemctl status bind9
sudo named-checkconf
sudo journalctl -u named -n 30
sudo ss -ulnp | grep :53
sudo ss -tlnp | grep :53

Porta 53 in uso dopo l'installazione​

sudo ss -ulnp sport = :53
grep DNSStubListener /etc/systemd/resolved.conf
sudo systemctl restart systemd-resolved && sudo systemctl restart bind9

Test dal client​

dig @<vm-ip> google.com
dig @<vm-ip> google.com AAAA
nslookup google.com <vm-ip>

Riferimenti​