Virtual host di Apache in IPv6

Disco di Festo / Disc of Phiastos

La prima versione di questo articolo spiegava in maniera onestamente un po’ cervellotica come abilitare su un server CentOS 6 la gestione degli host virtuali di Apache 2.2 basati sugli indirizzi (IP-based virtual host) per IPv6 e basati sul nome (name-based virtual host) per IPv4.

Questa revisione si propone lo stesso scopo, ma con un metodo molto più rapido e meno invasivo.

Nella documentazione di Apache viene detto esplicitamente che la gestione degli host virtuali basati sul nome è una tecnologia creata per far fronte alla scarsità degli indirizzi IPv4; dal momento che questo non è un problema di IPv6, possiamo usare tranquillamente gli host virtuali basati sugli IP. Questa tecnologia permette, tra le altre cose, di avere più certificati HTTPS caricati sul medesimo server.

Se viene mantenuto da tutti i fornitori di servizi il metodo scelto dal fornitore di Siamo Geek, ad ogni server in hosting viene fornito un sostanzioso blocco di IPv6 (un /64 nel nostro caso), la qual cosa permette di avere una messe di IPv6 a disposizione per farci quello che si vuole.

In questa procedura viene utilizzata la modalità mista di host virtuali di Apache 2.2 duplicando le definizioni nella configurazione. Ovviamente le directory con i siti non devono essere duplicate.

La prima cosa da fare è aggiungere gli IPv6 da assegnare agli host virtuali all’interfaccia di rete nel file /etc/sysconfig/network-scripts/ifconfig-eth0 (per la scheda di rete principale) in cui si aggiunge una riga di questo tipo:

IPV6ADDR_SECONDARIES="2001:db8::1701/64 2001:db8::beef/64 2001:db8::cafe/64"

Se non viene specificato il CIDR, lo script di configurazione di CentOS assume che sia /64.

Riavviando la rete con service network restart il comando ifconfig dovrebbe mostrare gli alias configurati sulla scheda di rete.

eth0      Link encap:Ethernet  HWaddr 00:1C:14:01:3E:92  
          inet addr:1.2.3.4  Bcast:1.2.3.1  Mask:255.255.255.0
          inet6 addr: 2001:db8::beef/64 Scope:Global
          inet6 addr: 2001:db8::1701/64 Scope:Global
          inet6 addr: 2001:db8::cafe/64 Scope:Global
          inet6 addr: fe80::21c:14ff:fe01:3e92/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

La configurazione del networking finisce qui, ora Apache.

Bisogna innanzi tutto verificare che Apache ascolti su tutti gli indirizzi e che la direttiva Listen sia

Listen 80

La direttiva NameVirtualHost viene modificata per dire ad Apache di gestire gli host virtuali basati sul nome solamente sull’IPv4:

NameVirtualHost 1.2.3.4

Con Apache 2.4 NameVirtualHost non è più necessario e può essere omesso, in quanto è implicito se si utilizzano vari host virtuali.

Quindi bisogna verificare la definizione degli host virtuali che deve essere

<VirtualHost 1.2.3.4:80>

In questa situazione Apache gestisce gli host virtuali solamente in IPv4, bisogna ora assegnare un IPv6 univoco per ogni host virtuale.

Per migrare gli host virtuali in IPv6 si può partire copiando quelli esistenti e modificare solamente la dichiarazione del host virtuale e del log da utilizzare:

<VirtualHost [2001:db8::beef]:80>
ErrorLog /var/log/httpd/virtuale6-error_log
CustomLog /var/log/httpd/virtuale6-access_log combined

Una volta riavviato, Apache attiva la gestione mista degli host virtuali.

Questa procedura, come altre pubblicate su questo blog, è stata applicata e verificata sul server di Siamo Geek in ossequio al principio del we eat our on dogfood.

Come scritto all’inizio, la prima versione di questo articolo era completamente diversa e passava per la creazione di una seconda istanza di Apache perché non ero riuscito a trovare la procedura per il modo misto di Apache (come al solito era sotto i miei occhi e non l’ho vista).


Aggiornamenti dopo la prima pubblicazione:

  • 15/10/2012 Articolo riscritto da zero dopo la prima pubblicazione grazie alla cortese segnalazione di Lorenzo, l’autore del primo commento.
  • 26/8/2014 Aggiunta della nota per Apache 2.4 relativa a NameVirtualHost

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

4 pensieri riguardo “Virtual host di Apache in IPv6”

    1. Perche’ non avevo trovato quel pezzo di documentazione, nonostante l’avessi chiesto a mezzo mondo 🙂

      Grazie per la segnalazione, domani lo provo.

  1. Piccolo refuso dopo “Listen 80”: La direttiva NameVirtualHost viene modificata per fire ad Apache di gestire […].
    Immagino sia […] per dire ad Apache […]

Spazio per un commento