21 de Julio, 2005

Configuración automática de clientes de proxy

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 ;).

Anotación por Juan J. Martínez, clasificada en: proxy, javascript.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: