4Trabes Historias de una empresa en 100 metros cuadrados

El blog de Trabe Soluciones

Tunnelblick y múltiples push dhcp-option DOMAIN

|

Para el que no lo conozca, Tunnelblick es un GUI gratuito y open-source que permite controlar OpenVPN en Mac OS X, y que viene siendo lo que usamos los maqueros de Trabe en nuestras casas para conectarnos a la feliz VPN de Trabe. Es un software muy interesante pero tiene un bug que impide tener múltiples dominios de búsqueda configurados.

Como no quiero resultar pesado, este post tiene dos versiones: la corta, que va al grano y da una solución, y la extendida que explica un poquillo las cosas para el que quiera entender el problema y la solución (TL;DR).

La versión corta

Si vuestra VPN publica varios dominios de búsqueda Tunnelblick sólo se va a quedar con él último dominio (un fallo conocido y documentado: issue 144). Para solucionarlo sólo es necesario explorar los contenidos de la aplicación Tunnelblick.app (versión 3.2beta32) y modificar el contenido del fichero client.3.up.tunnelblick.sh (en Contents/Resources/) con el script que os dejo en este gist (el diff por un lado y el script completo por otro). Configurais la VPN para usar el método de establecimiento de DNS “Asignar servidores de nombre (alternativa 1)” (en inglés “Set nameserver (alternate 1)”) y listo.

La versión extendida (con explicaciones y todo eso)

En Trabe tenemos un DNS interno y varios dominios de búsqueda y los resolv.conf de nuestras máquinas se parecen a esto:

1
2
search pizza.it moussaka.gr tortilla.es
nameserver 192.168.1.10

La VPN está configurada para que envíe esta información a los clientes, utilizando directivas push en la configuración del servidor OpenVPN:

1
2
3
4
push "dhcp-option DNS 192.168.1.10"
push "dhcp-option DOMAIN pizza.it"
push "dhcp-option DOMAIN moussaka.gr"
push "dhcp-option DOMAIN tortilla.es"

Tunnelblick tiene un modo de funcionamiento que teóricamente detecta esta información y modifica el resolv.conf de la máquina cliente de manera adecuada (“Asignar servidores de nombre (alternativa 1)” en castellano y “Set nameserver (alternate 1)” en inglés). Por desgracia no funciona correctamente y sólo tiene en cuenta la última entrada, es decir, que nuestro resolv.conf una vez conectados queda así:

1
2
search tortilla.es
nameserver 192.168.1.10

El problema está en el script que detecta estas opciones y le indica al cliente que modifique su configuración. La cosa comienza a torcerse en la línea 105 del script client.3.up.tunnelblick.sh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
while vForOptions=foreign_option_$nOptionIndex; [ -n "${!vForOptions}" ]; do
	{
	vOptions[nOptionIndex-1]=${!vForOptions}
	case ${vOptions[nOptionIndex-1]} in
		*DOMAIN* )
			domain="$(trim "${vOptions[nOptionIndex-1]//dhcp-option DOMAIN /}")"
			;;
		*DNS*    )
			vDNS[nNameServerIndex-1]="$(trim "${vOptions[nOptionIndex-1]//dhcp-option DNS /}")"
			let nNameServerIndex++
			;;
		*WINS*    )
			vWINS[nWINSServerIndex-1]="$(trim "${vOptions[nOptionIndex-1]//dhcp-option WINS /}")"
			let nWINSServerIndex++
			;;
	esac
	let nOptionIndex++
	}
done

La opción DOMAIN se trata como un campo univaluado y hay que modificar el script para tratarlo como multivaluado, al igual que se hace con el campo DNS. En este gist podéis encontrar el script modificado. Para ponerlo a funcionar os remito a la versión corta del post ;).

Ya hemos notificado todo esto a la gente que hace Tunnelblick y esperamos que lo tengan en cuenta para próximas releases y evitar tener que andar parcheando la aplicación.

Happy VPNing!

Lo sentimos, pero los comentarios están cerrados