Monday, May 5, 2014

CentOS 6 / Squid - No carga sitios que soportan ipv6

Antecedentes
Squid

Momento en el que uno se convierte en el villano de los usuarios: cuando bloqueas las redes sociales. Efectivamente, me solicitaron volver a activar el bloqueo de ciertos sitios de entretenimiento por horarios y usuarios, pero esta vez squid se comportaba de forma extraña, todos aquellos sitios que soportan ipv6 no eran cargados, por ejemplo:

 - https://www.facebook.com
 - https://www.yahoo.com
 - https://www.ipv6ready.org

Introducción

Mi configuración inicial es:
- CentOS 6.5 i686
- Squid 3.4.3
- Dansguardian 2.10.1.1

De acuerdo a la documentación de squid soporta ipv6 desde la versión 3.1.x, teniendo que agregar ciertos parámetros (en "squid.conf") para la serie de versiones (3.1.x), no así para las versiones superiores, están ya vienen integradas, siempre y cuando se compile con "--enable-ipv6".

Yo contaba con la versión de squid 3.1.10, la cual tiene documentado bugs con ipv6, por lo que decidí actualizarme a la versión 3.4.3 (23/Abril/2014).
Después de actualizar y ajustar los parámetros de "/etc/squid/squid.conf" a la nueva versión, seguía teniendo problemas para abrir sitios que soportarán ipv6, este era el síntoma en los registros:

Comando:
  - # squidclient https://www.facebook.com
       - Sending HTTP request

  - # squidclient https://www.yahoo.com
       - Sending HTTP request

Registros ("/var/log/squid/access.log"):
-TCP_MISS/301 2664 GET https://www.facebook.com - HIER_DIRECT / 2a03:2880:f00b:800:face:b00c:0:1
-TCP_MISS/301 713 GET https://www.yahoo.com:443 - HIER_DIRECT / 2001:4998:44:4:c:9102

-TCP_MISS_ABORTED/000 0 GET https://www.facebook.com - HIER_DIRECT / 2a03:2880:f00b:800:face:b00c:0:1
TCP_MISS_ABORTED/000 0 GET https://www.yahoo.com - HIER_DIRECT / 2001:4998:44:4:c:9102

Solución

La solución en muchos foros, era: "deshabilita ivp6 del squid y de tu CentOS", "Crea un puerto para HTTP y otro para HTTPS", esto no es nada recomendable en la documentación oficial.

La solución la encontré en uno de los parámetros de "squid.conf", el cual está por default en "off":

 -  dns_v4_first on

Reincias squid y "voilà", no más TCP_MISS_ABORTED para sitios que soportan ipv6.

Referencia: http://www.squid-cache.org/Doc/config/dns_v4_first/