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 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… usaremos como ejemplo la red syscu.net
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 que funcionen.
/var/www/wpad.dat
function FindProxyForURL(url, host) {
if(
// direcciones loopback
shExpMatch(host, "localhost") ||
shExpMatch(host, "*\.localdomain") ||
// direccion ip loopack
isInNet(host, "127.0.0.0", "255.0.0.0") ||
// host de destino sin qualificar
isPlainHostName(host) ||
// fqdn perteneciente a la red
shExpMatch(host, "syscu\.net") ||
shExpMatch(host, "*\.syscu\.net") ||
// direccion ip de destino de la red
isInNet(host, "127.0.0.0", "255.0.0.0") ||
isInNet(host, "10.0.0.0", "255.0.0.0") ||
isInNet(host, "172.16.0.0", "255.240.0.0") ||
isInNet(host, "192.168.0.0", "255.255.0.0")
)
{
// acceder de forma directa
return "DIRECT";
}
// a todo lo demás se accede mediante proxy,
// en caso de fallar, intentar de forma directa
return "PROXY proxy.syscu.net:8080; DIRECT;"
}
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.
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í:
/etc/nginx/mime.types
types {
application/x-ns-proxy-autoconfig dat;
text/html html htm shtml;
text/css css;
(muchas lineas más aqui)
}
Un ejemplo del virtualhost en el nginx
server {
listen 80;
server_name wpad.syscu.net;
root /var/www/;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
include mime.types;
location / {
default_type application/x-ns-proxy-autoconfig;
index wpad.dat wpad.da proxy.pac;
}
}
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”
option=252,http://10.1.1.1/wpad.dat
También declaramos un puntero DNS, que apunte a wpad.syscu.net y que sea el servidor donde está el wpad. Le recuerdo que “syscu.net” es el nombre del dominio.
Al reiniciar nginx y dnsmasq, todo debe estar listo…
Ahora en caso de usar Bind9 y dhcp3-server lo pueden hacer de la siguiente forma
Configurando el servidor ISC dhcpd para WPAD
El servidor ISC dhcpd soporta el uso de la opción 252 asignada para proveer información para localizar el script de auto configuración PAC. En la sección de parámetros globales del archivo de configuración dhcpd.conf defina la opción wpad con el código 252 y de tipo text, por ejemplo:
option wpad code 252 = text;
Además, en el bloque de las opciones de la subred, agregue el valor para la opción wpad, por ejemplo:
subnet 10.1.1.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option broadcast-address 10.1.1.255;
option routers 10.1.1.1;
option domain-name "syscu.net";
option domain-name-servers 10.1.1.1;
option wpad "http://wpad.syscu.net/wpad.dat\n";
range 192.168.X.50 192.168.X.200;
}
Valide la configuración:
# dhcpd -t
Re inicie el servidor dhcpd para que los cambios tomen efecto:
# /etc/init.d/dhcp3-server restart
Configurando el servidor bind para WPAD
Si el servidor proxy tiene asignado un nombre DNS a través de un registro A en la zona dns local entonces se aconseja que cree un registro CNAME llamado wpad y que apunte a nombre del servidor proxy.
Edite el archivo de la zona directa para el dominio de la red local, por ejemplo:
# nano /etc/bind/db.syscu.net.zone
Agregue un registro tipo CNAME apuntando al nombre del servidor proxy, por ejemplo:
proxy IN A 10.1.1.1 wpad IN CNAME proxy.syscu.net.
En caso de que el servidor web en el que vaya a hospedar el archivo se aconseja que cree un registro A wpad apuntando a la dirección IP del servidor web, por ejemplo:
wpad IN A 10.1.1.1
Algunos clientes web localizan los parámetros de proxy haciendo consultas DNS al registro SRV wpad.tcp, cree un registro SRV, por ejemplo:
wpad.tcp IN SRV 0 0 80 wpad.syscu.net.
Otra alternativa que usan algunos clientes web es localizar el URL del proxy pac vía una consulta a un registro TXT, por ejemplo:
wpad IN CNAME proxy.syscu.net. wpad IN TXT "service: wpad:!http://wpad.syscu.net:80/wpad.dat"
Valide el archivo de la zona:
# named-checkzone hcg.sld.cu /etc/bind/db.syscu.net.zone
Y recargue la zona:
# rndc reload syscu.net
Realice una consulta usando el comando host:
# host wpad.syscu.net
Asegurese de que desde un navegador pueda alcanzar el script usando el URL:
http://wpad.syscu.net/wpad.dat
Para este artículo se utilizo como fuente el blog de lazaro
Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:73.0) Gecko/20100101 Firefox/73.0
Armando, buen tutorial,
En algunos casos me ha resultado que el cliente no es capaz de encontrar el fichero cuando usas el método web, porque algunos navegadores se conectan al IP que resuelve al nombre que declaras en wpad.domain en vez de al virtual hosting.
Eso me pasó hace un tiempo ya, pero es bueno saberlo «por si las moscas»
Saludos.
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
ME DA EL SIGUIENTE ERROR!!!
root@debian:~# dhcpd -t
Internet Systems Consortium DHCP Server 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
/etc/dhcp/dhcpd.conf line 9: unknown option dhcp.wpad
option wpad «http://debian.inutil.cu/wpad.dat\n»
^
Configuration file errors encountered — exiting
If you think you have received this message due to a bug rather
than a configuration issue please read the section on submitting
bugs on either our web page at http://www.isc.org or in the README file
before submitting a bug. These pages explain the proper
process and the information we find helpful for debugging.
exiting.
root@debian:~#
_________________
????