IPv6 è supportato dalla versione 9. Si utilizzi sempre la versione più recente disponibile. Deve essere utilizzata almeno la 9.1.3, le versioni più vecchie possono contenere buchi di sicurezza utilizzabili da remoto.
Nota: diversamente da IPv4 le attuali versioni non permettono di legare il socket del server a indirizzi IPv6 dedicati, perciò sono validi solo (indirizzi) qualsiasi o nessuno. Poiché questo può rappresentare un problema di sicurezza, si controlli anche la sezione Access Control List (ACL) più avanti!
Per abilitare l'ascolto IPv6, bisogna cambiare le seguenti opzioni
options { # qui ci saranno sicuramente anche altre opzioni listen-on-v6 { any; }; }; |
Dopo il riavvio dovrebbe risultare qualcosa tipo
# netstat -lnptu |grep "named\W*$" tcp 0 0 :::53 :::* LISTEN 1234/named # incoming TCP requests udp 0 0 1.2.3.4:53 0.0.0.0:* 1234/named ¬ # incoming UDP requests to IPv4 1.2.3.4 udp 0 0 127.0.0.1:53 0.0.0.0:* 1234/named ¬ # incoming UDP requests to IPv4 localhost udp 0 0 0.0.0.0:32868 0.0.0.0:* 1234/named ¬ # dynamic chosen port for outgoing queries udp 0 0 :::53 :::* 1234/named ¬ # incoming UDP request to any IPv6 |
Un semplice test può essere
# dig localhost @::1 |
e dovrebbe visualizzare un risultato.
Per disabilitare l'ascolto IPv6, occorre cambiare le seguenti opzioni
options { # qui ci saranno sicuramente anche altre opzioni listen-on-v6 { none; }; }; |
È possibile definire le ACL relative a indirizzi IPv6 abilitati e queste dovrebbero essere usate praticamente sempre. Un esempio può essere:
acl internal-net { 127.0.0.1; 1.2.3.0/24; 3ffe:ffff:100::/56; ::1/128; ::ffff:1.2.3.4/128; }; acl ns-internal-net { 1.2.3.4; 1.2.3.5; 3ffe:ffff:100::4/128; 3ffe:ffff:100::5/128; }; |
Queste ACL possono essere usate, per esempio, per le richieste (query) dei client e per il trasferimento delle zone a name server secondari. Ciò impedisce l'utilizzo del proprio name server di caching dall'esterno con IPv6.
options { # qui ci saranno sicuramente anche altre opzioni listen-on-v6 { none; }; allow-query { internal-net; }; allow-transfer { ns-internal-net; }; }; |
È anche possibile configurare le opzioni allow-query e allow-transfer per la maggior parte delle singole definizioni di zona.
Quest'opzione non è richiesta, ma a volte necessaria:
query-source-v6 address <ipv6address|*> port <port|*>; |
È anche possibile definire alcuni indirizzi IPv6 per zona.
L'indirizzo sorgente di trasferimento viene usato per i trasferimenti di zona uscenti:
transfer-source-v6 <ipv6addr|*> [port port]; |
L'indirizzo sorgente di notifica viene usato per i messaggi di notifica uscenti:
notify-source-v6 <ipv6addr|*> [port port]; |
Alcune informazioni possono essere reperite anche da IPv6 DNS Setup Information (articolo). Forse può essere d'aiuto anche il IPv6 Reverse DNS zone builder for BIND 8/9 (strumento web).
Per IPv6 vengono definiti nuovi tipi e zone root per i reverse lookup:
AAAA e il reverse IP6.INT: specificati in RFC 1886 / DNS Extensions to support IP version 6, utilizzabile a partire dalla versione di BIND 4.9.6
A6, DNAME (ORA DISAPPROVATO!) e il reverse IP6.ARPA: specificati in RFC 2874 / DNS Extensions to Support IPv6 Address Aggregation and Renumbering, utilizzabili a partire dalla versione di BIND 9 ma si vedano anche le ultime informazioni sullo stato attuale in draft-ietf-dnsext-ipv6-addresses-00.txt
Forse verrà riempito con più contenuti, intanto si dia uno sguardo alle RFC segnalate e anche a
AAAA e il reverse IP6.INT: IPv6 DNS Setup Information
A6, DNAME (ORA DISAPPROVATO!) e il reverse IP6.ARPA: si guardi nei capitoli 4 e 6 del'Administrator Reference Manual (ARM) del BIND 9, distribuito con il pacchetto bind o lo si prenda qui: BIND version 9 ARM (PDF)
Poiché IP6.INT è disapprovato (ma ancora in uso), un server DNS che supporta informazioni IPv6 deve essere in grado di fornire entrambi i tipi di reverse zone.
Poiché ci sono alcuni problemi nell'uso di questi nuovi formati, la miglior consuetudine è:
Supporto della risoluzione diretta:
AAAA
Supporto della risoluzione inversa (reverse lookup):
Formato nibble inverso per la zona ip6.int (PER COMPATIBILITÀ CON IL PASSATO)
Formato nibble inverso per la zona ip6.arpa (RACCOMANDATO)
Per verificare se il BIND è in ascolto e se fornisce o meno dati su di un socket IPv6, si vedano i seguenti esempi.
Specificando un server dedicato per la query, una connessione può essere forzata con:
$ host -t aaaa www.6bone.net 3ffe:ffff:200:f101::1 Using domain server: Name: 3ffe:ffff:200:f101::1 Address: 3ffe:ffff:200:f101::1#53 Aliases: Host www.6bone.net. not found: 5(REFUSED) |
La voce di log relativa è del tipo:
Jan 3 12:43:32 gate named[12347]: client ¬ 3ffe:ffff:200:f101:212:34ff:fe12:3456#32770: query denied |
Se si vedono righe di questo tipo nel log, si controlli se le richieste di questi client debbano essere permesse o meno e si riveda quindi la propria configurazione dell'ACL.
Una connessione IPv6 avviene con successo se l'output è analogo a:
$ host -t aaaa www.6bone.net 3ffe:ffff:200:f101::1 Using domain server: Name: 3ffe:ffff:200:f101::1 Address: 3ffe:ffff:200:f101::1#53 Aliases: www.6bone.net. is an alias for 6bone.net. 6bone.net. has AAAA address 3ffe:b00:c18:1::10 |