El gran firewall de China se pone serio

NOTA: Si eres un lector habitual no demasiado interesado en temas de informática o administración de sistemas, puedes saltar directamente al ultimo párrafo 😉

Ayer (como siempre a ultima hora) nos percatamos de que teníamos problemas de conectividad con nuestra oficina de China. En unos minutos el problema estaba claro. Tenemos un túnel creado entre el firewall de China y el de Japón para enviar trafico seguro, la interfaz estaba «down». Si mirabas los logs todo el rato te encontrabas con este error:

TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed

De acuerdo con lo leído por Internet este problema esta relacionado en un 99% de las ocasiones con problemas de conectividad. Nosotros usábamos los puertos por defecto de openvpn, esto es 1194 UDP. Y aunque parecía que la conectividad era buena (comprobado con netcat y con trafico a los dos lados del firewall) se ve que los paquetes estaban siendo bloqueados por algo entre medias… Esto era «El GRAN firewall de China». Acojona si lo dices así… bueno y sin decirlo, la realidad es que acojona…

Bien, después de descartar problemas de certificados, fuimos a por todas a intentar saltarnos este firewall de alguna forma. Lo primero es comentar que podéis tener varios servidores de openvpn en una misma maquina física. Yo deje levantada la instancia que usábamos para el resto de túneles y levante una nueva donde probaba nuevos puertos. Esto no tiene mayor secreto salvo que tenéis que fijaros en crear un nuevo tun1 (o el que queráis), usar un nuevo rango ip, tener en cuenta vuestras reglas en el firewall y por ultimo corregir vuestras rutas. Esto doy por hecho que sabéis hacerlo y si no hay muchas webs que los explican por ahí.

Lo único que yo os quería comentar y con lo que os quería ahorrar quebraderos de cabeza (y si, todo lo anterior son solo batallitas) es que no he conseguido que funcione en UDP, pero funciona sin problemas con TCP. Yo lo tengo ahora mismo corriendo en TCP en un puerto raro y va de maravilla. Así que esto es lo que os recomiendo.

A mis lectores habituales perdón porque esta entrada es mas técnica de lo normal y seguramente si la hayáis leído os hayáis quedado de pasta boniato. La intención es que vengan visitantes desesperados desde google y esto les ayude a solucionar este problema que a mi me ha quitado unas horas de sueño.