No es una novedad, Netscape lo definió en el año 96, pero ayer me lo encontré por casualidad y resulta muy útil para un administrador de sistemas.
Un servidor proxy es un servicio con autoridad para hacer ciertas tareas que los clientes no pueden realizar, así que se encarga de hacer el trabajo por ellos. Existen servidores proxy de muchos tipos, aunque el más conocido es el proxy HTTP (como SQUID).
Pues bien, no siempre resulta sencillo configurar los clientes para que usen el proxy correspondiente, sobretodo cuando hablamos de emplear SQUID y SSH para usar nuestra conexión a Internet de forma segura sobre una red pública (como, por ejemplo, la proporcionada por Elche Wireless).
Los navegadores web, por ejemplo, soportan la configuración mediante la descarga de un fichero que contiene código Javascript y que sigue la especificación indicada más arriba.
Se trata de una función (FindProxyForURL(url, host)) que
llama el navegador para obtener la configuración a utilizar en cada
conexión.
Se trata de un fichero con extensión .pac, y el servidor
web debe devolver preferiblemente un tipo MIME: application/x-ns-proxy-autoconfig.
Para simplificar, y porque la documentación está muy bien, voy a
explicar cómo sería un proxy.pac para mi configuración en
este servidor y sobre elxwifi.
/* para clientes de blackshell con tunel SSH */ function FindProxyForURL(url, host) { if(isPlainHostName(host) || dnsDomainIs(host, ".elxwifi") || isInNet(host, "10.1.0.0", "255.255.0.0")) return "DIRECT"; else return "PROXY 127.0.0.1:13128; DIRECT"; }
Si el host al que se quiere acceder no es un dominio
cualificado (por ejemplo, localhost), el dominio del
host contiene .elxwifi (por ejemplo,
scuba.elxwifi) o el host pertenece a la red
10.1.0.0/16 (por ejemplo, 10.1.3.1/16), devuelve DIRECT, lo
que indica que la conexión es directa, sin usar servidor proxy.
En caso contrario se usará un proxy en la dirección IP
127.0.0.1 con el puerto 13128, y si este proxy
falla... se usará conexión directa. Sencillo, ¿verdad?
El motivo para usar esa dirección y ese puerto es porque cuando se
hace un túnel SSH al proxy, el extremo local queda en esa IP. Por
supuesto el puerto tiene que ponerlo el cliente al abrir el túnel,
porque con otro la configuración no funcionará. Pero como mínimo nos
ahorramos configurar el navegador, solo hay que indicar la
URL donde se encuentra el fichero .pac.
Dentro de la simplicidad de la idea, se trata de una solución muy potente, gracias al uso de Javascript.
En la documentación hay ejemplos muy atractivos como balancear la
carga entre varios servidores proxy basándose en parámetros de la
URL a la que se quiere acceder, emplear servidores proxy
para diferentes protocolos, o simplemente permitir conexión directa si
el cliente es capaz de resolver el nombre del host a
acceder.
Llego 9 años tarde a la idea, pero... más vale tarde que nunca ;).
![[xml]](/images/xml.gif)
