Configurazione automatica di un proxy con il protocollo WPAD

Il protocollo WPAD, usato da Internet Explorer e da Mozilla/Netscape (e probabilmente da altri browser ma non so da quali) consente di insegnare al browser come accedere a internet, usando una serie di funzioni che vanno ben oltre la semplice impostazione di un proxy e di una serie di domini da non richiedere attraverso il proxy. Questo permette una maggiore flessibilita` nel decidere quali protocolli, hostname, domini, eccetera vanno fatti passare per quali proxy server (http e anche socks).

Stando alla documentazione sul protocollo WPAD, che si trova qui, http://www.web-cache.com/Writings/Internet-Drafts/draft-ietf-wrec-wpad-01.txt, e` possibile usare diversi metodi per permettere ai clienti di autoconfigurarsi, ma i piu` usati sono il DHCP e il DNS. A dire il vero, a naso credo che il piu` affidabile sia il DNS. E` comunque possibile usare entrambi i metodi, in questo modo c'e` ridondanza. Il DHCP dovrebbe avere la precedenza, se i client seguono lo standard.

Configurazione lato server usando il DNS

Questa e` una delle configurazioni possibili, ma non l'unica. Sfrutta il DNS e il DHCP.

Occorre:

Prima di tutto, configurare il DNS locale e il DHCP locale, e verificare da un client collegato alla rete che il comando "ping wpad" e il comando "ping wpad.domain.tld" risolvano correttamente l'host sul quale gira il web server (che non deve essere necessariamente lo stesso su cui gira il proxy)

Sul web server che risponde all'hostname "wpad" occorre mettere un file di nome "wpad.dat", facendo in modo che possa essere scaricato da un client che richiede http://wpad.domain.tld/wpad.dat.

Il contenuto minimo del file wpad.dat potrebbe essere qualcosa di questo genere:

function FindProxyForURL(url, host)
{

   /* test per escludere protocolli o domini dal passaggio dal proxy.
      isplainhostname serve per non fare passare dal proxy gli host che non hanno dominio indicato, che si suppone siano locali.
      shExpMatch serve per escludere pezzi di url (protocolli in questo caso)
      isinnet serve per escludere reti per indirizzo ip
  */

   if (
                shExpMatch(url, "https:*") ||
                shExpMatch(url, "ftp:*") ||
                isPlainHostName(host) ||
                isInNet(host, "10.1.42.0", "255.255.255.0") ||
                isInNet(host, "127.0.0.0", "255.0.0.0") ||
                dnsDomainIs(host,"kurgan.org") ||
                dnsDomainIs(host,"muzzi.net")
       )
           return "DIRECT";
   else
           return "PROXY proxy.kurgan.org:8181; DIRECT";
}

La documentazione su come costruire il file wpad.dat si puo` trovare qui (e` vecchia ma fa buon brodo): http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html

Teoricamente occorre anche definire nella configurazione del web server il mime type per il file wpad.dat, tuttavia ho visto che con IE 6 funziona lo stesso anche senza. Questa e` una configurazione valida per apache (e` fatta come virtualhost per evitare di andare a pistolare i mime types a livello globale di apache)

<VirtualHost ip.ad.dr.es>
        ServerName wpad.yourdomain.tla
        ServerAlias ip.ad.dr.ess
        AddType application/x-ns-proxy-autoconfig .dat
</VirtualHost>

Configurazione lato server usando il DHCP

Questa configurazione usa un campo della risposta del DHCP per indicare dove scaricare il file di configurazione wpad.dat, e non richiede configurazione del DNS, tuttavia e` necessario che i client siano impostati per usare il DHCP, ovviamente.

Occorre:

Nella configurazione del server DHCP, occorre impostare una option, con codice 252, che contiene un campo testuale che indica l' url da cui scaricare il file wpad.dat (o un qualsiasi altro nome, che in questo caso non e` hardcoded e quindi non e` significativo). Occorre comunque un web server che fornisca al browser il file wpad.dat, non e` possibile fare tutto con il solo DHCP.

La configurazione per ISC DHCP versione 3 e` qualcosa del tipo:

option wpad-url               code 252 = text;
option wpad-url               "http://wpad.my.domain.tld/wpad.dat\n"

Occhio perche` certi browser tagliano un carattere in fondo all'url quando lo leggono dal dhcp. Un'occhiata ai log del web server fara` capire meglio se c'e` questo problema.

Per il web server e il file wpad.dat, vedasi il metodo descritto precedentemente.

Configurazione dei client

Sui client teoricamente e` sufficiente impostare il browser per fare l'autodetect del proxy, poi chiudere e riaprire il browser.

In pratica, a seconda se il server e` configurato con il DHCP o il DNS, occorre anche che il client riesca a ricevere i dati dal DHCP server (quindi usi il DHCP per settare l'indirizzo IP) o che riesca a risolvere correttamente l' hostname "wpad.dominio.tld" usando il DNS.

Ovviamente se si vuole usare questo sistema per forzare l'uso del proxy, occorrerra` anche impedire ai client l'accesso diretto alle porte del web attraverso il gateway.

LinuxDebian/ProxyAutoConfig (last edited 2009-04-12 17:33:25 by localhost)