El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

proxy automático

| Comments

Todo el que halla configurado un navegador con proxy; o sea, todo cubano que halla configurado un navegador, quizás halla visto que una de las tantas opciones dice “configuración automática”. Seguro se preguntarán que carajo es eso.

Pues es un javascript que le dice al navegador como debe ser la configuración del proxy; obviamente.

Resulta que hay dos maneras de hacerlo, vía DHCP o vía DNS. Algunos navegadores lo cogen por DHCP mientras que otros lo hacen por DNS.

Para evitar problemas, configuramos las dos…

Primero y principioso. Creamos el fichero wpad.dat, el nombre debe respetarse. Dicho fichero los servimos, así que por definición los podremos en /var/www. Este fichero contendrá las instrucciones que un navegador necesita para pinchar.

“/var/www/wpad.dat”
1
2
3
4
5
6
7
8
9
10
11
12
function FindProxyForURL(url, host) {

        // los host locales NO pasan a través del proxy
        if(shExpMatch(url,"*.hcg.sld.cu:*")) { return "DIRECT"; }
        if(shExpMatch(url,"*.hcg.sld.cu:*/*")) { return "DIRECT"; }

        // la red local, tampoco
        if(isInNet(host, "10.1.1.0", "255.255.255.0")) { return "DIRECT"; }

        // lo demás sale por el proxy
        return "PROXY 10.1.1.1:3128";
};

Como ve, es javascript puro, osea que las opciones se podrían hacer más creativas. Por ejemplo, si la ip de la máquina es tal, configuralo así o asao.

Los criticones de código diran que se pudo usar un swith en vez de 4 “if”. Pero eso correrá en un momento y entorno casi imposible de debugar. Lo intenté con swith y no me pinchó.

Ahora el problema es que hay que declarar un nuevo contenido mime para este dato. En mi caso uso nginx y en el fichero de configuración de mime, le aclaramos el nuevo; a mi me quedó así:

mime.conf
1
2
3
4
5
6
7
types {

    application/x-ns-proxy-autoconfig     dat;
    text/html                             html htm shtml;
    text/css                              css;
    (muchas lineas más aqui)
}

Bueno ahora, vamos pal DHCP. Por supuesto, nada menos que el mismísimo dnsmasq:

Primero el método DHCP, declaramos una option cuyo código sea 252

“/etc/dnsmasq.conf”
1
option=252,http://10.1.1.1/wpad.dat

También declaramos un puntero DNS, que apunte a wpad.hcg.sld.cu y que sea el servidor donde está el wpad. Le recuerdo que “hcg.sld.cu” es el nombre del dominio.

Al reiniciar nginx y dnsmasq, todo debe estar listo…

En caso de que no uses dnsmasq, asumiré que usas bind e ICS dhcpd…

Para ICS dhcpd, la cosa es un tin más compleja, ya que hay que declarar globalmente el tipo de opción, pero darle el valor en cada subnet o en le única que uses. A mi me pinchó así:

“dhcpd.conf”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# vim:filetype=config
authoritative;

# declaramos lo del proxy automático
option local-proxy-config code 252 = text;

# la red
subnet 10.1.1.0 netmask 255.255.255.0 {

    # los parámetros del rango
    range 10.1.1.100 10.1.1.254;
    option domain-name "hcg.sld.cu";
    option domain-name-servers 10.1.1.1;
    option broadcast-address 10.1.1.255;
    option subnet-mask 255.255.255.0;
    option routers 10.1.1.1;

    # envía el proxy automático
    option local-proxy-config "http://10.1.1.1/wpad.dat";

} # subnet

En el caso de bind9, declaras un CNAME con el nombre wpad que apunte al servidor donde descansa el wpad.dat

“/etc/bind/ejemplo/dominio.cu.zone”
1
2
3
4
5
6
7
8
9
10
servidor1    IN A     10.1.1.1
servidor2    IN A     10.1.1.2
mail         IN CNAME servidor2.dominio.cu.
pop          IN CNAME servidor2.dominio.cu.
pop3         IN CNAME servidor2.dominio.cu.
smtp         IN CNAME servidor2.dominio.cu.
proxy        IN CNAME servidor1.dominio.cu.
gateway      IN CNAME servidor1.dominio.cu.
; envía el proxy automático
wpad         IN CNAME servidor1.dominio.cu.

Firefox pincha al palo, los demás no se…

Si este artículo te resultó interesante, considere donar 0.03 BTC: 1Kg4gu3e7u8HUw8bj5NbBciRg6Y56kuFCU

Comments