2009/04/22


Porta aberta, ao transpor-te entrei no céu

Lá vai uma dica para todos ratos de UNIX por aí.

Estava querendo fazer um túnel para permitir a um amigo usar a minha máquina através de um firewall, mas meu cenário é um pouco diferente do normal, então tive uma certa dificuldade.

O ssh consegue criar túneis, com as opções -L e -R, mas pelo que entendi nenhuma delas me atenderia.

Meu problema é o seguinte: estou numa máquina (meu notebook) atrás de um gateway. Eu até tenho IP real aqui, mas o gateway bloqueia tudo pro lado de dentro (é um "firewall" da vida). Eles inclusive bloqueiam conexões de bittorrent e IRC aqui... Gozado que MSN skype funcionam numa boa, ainda não descobri direito porque.

O lance é que eu consigo logar lá no servidor, e executar programas que ouvem portas altas. (Pssst, não digam pra ninguém isso é segredo.) Eu queria portanto dar um jeito de abrir uma porta lá no servidor, e simplesmente redirecionar o que quer que chegue pra minha porta 80, ou 22, e assim conseguir acessar essa minha máquina dentro da "intranet" pelo lado de fora.

Depois de muito penar pra concluir que não é isso que o ssh deixa fazer, e pesquisar em alguns blogs, finalmente cheguei na fórmula ideal. E a solução usa, como não podia deixar de ser, um dos mais maravilhosos programas pra estas situações: o netcat!

Depois que funciona dá aquela raiva, porque na verdade é bem simples. O que a gente precisa fazer é rodar um nc ouvindo a porta lá no firewall, e redirecionar tanto a entrada quanto saída dele prum outro nc que vai se conectar na porta que eu quero na minha máquina.

A dificuldade é fazer esse redirecionamento de entrada _e_ de saída, e ainda acertar a ordem de execução dos processos. A solução minha foi criar um fifo, e usar um pipe. Basta rodar portanto lá no gateway/firewall:

$ mkfifo fifi

E então

$nc -l 31337 < fifi | nc 654.234.654.142 80 > fifi

onde o 31337 é a porta (alta) que você escolher ouvir, e o número críptico é o ip (obviamente inválido) da sua máquina na intranet, seguido pela porta alvo. Neste caso, porta 80, de HTTP.

Agora qualquer browser que apontar para http://www.end.do.meu.servidor:31337 vai ser atendido, indiretamente, pela minha máquina. Não é legal?

(OBS: o título do post é da música do Vicente Celestino.)

ADDENDUM: parece que usando o ssh -R não funcionou só porque falta liberar o acesso da porta por IPs estrangeiros, através de uma diretriz GatewayPorts no arquivo sshd_config.


Cultismos por via erudita, neologismos por via inculta

Mais um testemunho comportamental do contínuo experimento antropológico que é o meu dia a dia.

Ouvi um grupo de estudantes hoje comentando sobre a produção de um certo trabalho em grupo. Um estudante jogou com a maior naturalidade no meio da conversa a frase: "vocês tavam trabalhando tipo tag né, meu?"

Os outros dois estudantes, obviamente, não faziam a menor idéia do que era esta palavra que o paulista utilizou com a maior naturalidade do mundo --- uma das formas de entretenimento favoritas por aqui, sair falando palavras estranhas com toda tranquilidade.

Mas o cara explicou: "É, tag. Tipo, um tá trabalhando, aí vem o outro, e o que tava sai, aí chega o outro..."

Eu não sei onde o cara viu isso, se foi no Slashdot, algum fórum de Ubuntu, vídeo no YouTube ou no Padrinhos Mágicos, mas pra mim é quase claro que ele não tinha idéia do que estava falando. Absorveu a palavra de maneira "sintática", de trás pra frente, quase como um dos papagaios que voam pelo Museu da Casa Brasileira na Av. Faria Lima, e começou a dotá-la de significado próprio, criando um neologismo anglicista aqui no português sem a menor necessidade. Considero inaceitável.

Eu acho que tenho idéia do que ele estava falando, mas jamais vamos poder saber com certeza. Minha hipótese é que o referido tag não passa da clássica brincadeira de pega-pega

Trabalhar tipo tag significaria que cada hora um é o pegador, até que você passa pro fulano, e a partir daí "está com o fulano"...

Então uma piada bacana, que faz todo o sentido, deixou de existir porque o seu mediador não quis fazer o menor esforço em tentar entender direito o negócio. Passou por sabido por usar palavras estrangeiras, mas na verdade é um bobalhão, que não entendeu uma piada interessante, não sabe identificar num certo discurso lido que se está falando de uma brincadeira absolutamente mundana, algo fácil de se traduzir para nossa língua e cultura.

E assim a gente vai despencando pela ribanceira do analfabetismo funcional.