Symform & MEO – A tale about gravity and equilibrium.

Olá a todos.

Ultimamente, tenho tido bastantes problemas com o meu router meo, apesar de todas as diligencias efetuadas pelas simpáticas sras do suporte.

O router tinha desenvolvido um problema de equilibro. De vez em quando desequilibrava-se e pumba… já estava ele no chão, totalmente crashado .

Depois de muita chamada, muito tcpdump e muito telefonema a pedir reboot lá dei com o problema: Symform.

A maravilhosa tool de cloud storage free sofreu no upgrade para a versão 4.X uma mudança de protocolo. Passou de usar principalmente tcp para uma aproximação a bittorrent, passando grande parte dos dados para udp com uma aproximação em swarm.

Isto é bom (como se irá comprovar mais abaixo), mas tem um problema com os routers do meo pelo tipo de configuração que IPTV obriga.

Por cada acesso UDP, o router cria na sua memoria durante um período de tempo pré-estabelecido, um mapping dessa ligação, de forma a tentar obter melhor performance – na minha opinião uma melhoria ridícula.

Como o router tem apenas uma memória de peixinho dourado, apenas consegue guardar 4096 ligações simultâneas.

Quando este valor é esgotado, começam a sentir lentidão e ao fim de algum tempo a bater no limite, o router acaba inclusive por crashar só sendo recuperável com um reboot.

… e pronto.  Mas a descoberta do problema apenas me serviu para ficar irritado. Afinal de contas necessito de utilizar o Symform.

Como a troca do equipamento não ia resolver o caso – o meo não tem routers com capacidade acima de 4K de ligações simultâneas – tive a estudar o issue, e reparei que as ligações eram típicas de swarm.

Nestes problemas específicos consegue-se mitigar o problema através de uma forma mais agressiva de expirar os nat mappings dentro do router.

Para a resolução inical, efetuei as seguintes alterações:

:connection config udptrackmode=strict
:connection timerconfig timer=ipidle value=30
:connection timerconfig timer=icmpkill value=5
:connection timerconfig timer=udpidle value=1
:connection timerconfig timer=udpkill value=1
:saveall

Com isto passei de um reboot de 6 em 6 horas, para isto:

{meo}=>:system settime
date = 17/03/2014
time = 16:50:41
timezone = +00:00
daylightsaving = enabled
uptime = 6 dias, 6:47:27
time zone name = (UTC)
UTC date = 17/03/2014
UTC time = 16:50:41
{meo}=>

Em termos de protocolo e utilização da Symform cloud, passei de 30 dias para um backup de 300GB para 6 dias para um backup de 360GB.

No entanto o problema voltou, com mais agressividade após o mandatory upgrade do agente de Symform.

Consegui novamente resolver o issue, desta vez através de uma VPS e efetuando policy based routing nas ligações de e para a máquina que tem o symform.

Na prática, estou a enviar via openVPN para uma VPS que tenho numa public cloud, todo o tráfego de Symform. O que se perde em latência (por ser openvpn) ganho não tendo a sobrecarga de ligações UDP no router.

Abr.

Notas finais: Todas as alterações tem de ser efetuadas com super user. Não me responsabilizo para eventuais danos ou percas de serviço que possam decorrer de uma má configuração. Este howto é exemplificativo e não é suportado ou recomendado.