DIY: Monte um VPN Server para o seu iPad/iPhone em menos de 5 minutos

Algumas pessoas que viram meu tweet sobre o acesso ao  Pandora /  NetFlix / ABC Player no meu iPad / iPhone me perguntaram qual servidor de proxy eu havia usado, e para facilitar a explicação resolvi colocar aqui no blog uma receita de bolo em formato de script.

Para acesso via iPad/iPhone aos serviços que possuem a restrição de só funcionar para os usuários que residem nos Estados Unidos, eu faço uso de um servidor particular de VPN hospedado em solo americano.

O servidor é uma maquina virtual com 256 Mb de memoria que roda Linux Ubuntu 10.04 (Lucid) e pptpd, hospedada na RackSpaceCloud , pela qual pago 11 USD mensais + 0,30 USD por GB trafegado.

Para criar o seu servidor privado de VPN é bem simples, basta você criar uma conta lá na RackSpace, e depois de logar no painel de controle criar sua maquina virtual usando a imagem do Ubuntu 10.04, se você não souber como fazer isso de uma olhada neste post que fiz no ano passado.

Depois que a máquina estiver rodando, logue nela com sua conta de root e crie um arquivo com o nome de vpn.sh com o conteúdo abaixo usando seu editor de textos preferido do linux (vi, emacs, nana, pico, etc):

#!/bin/sh
#
# Execute passando como parametro o usuário e senha desejado no pptp"
# Por exemplo ./vpn.sh iphone teste1234
#

echo "Instalando pptpd..."
apt-get install pptpd
echo
sleep 1
echo "Criando /etc/pptpd.conf..."
echo "option /etc/ppp/pptpd-options" > /etc/pptpd.conf
echo "localip 192.168.0.1" >> /etc/pptpd.conf
echo "remoteip 192.168.0.2-101" >> /etc/pptpd.conf
echo
sleep 1
echo "Criando /etc/ppp/pptpd-options..."
echo "name pptpd" > /etc/ppp/pptpd-options
echo "refuse-pap" >> /etc/ppp/pptpd-options
echo "refuse-chap" >> /etc/ppp/pptpd-options
echo "refuse-mschap" >> /etc/ppp/pptpd-options
echo "require-mschap-v2" >> /etc/ppp/pptpd-options
echo "require-mppe-128" >> /etc/ppp/pptpd-options
echo "ms-dns 8.8.8.8" >> /etc/ppp/pptpd-options
echo "ms-dns 8.8.4.4" >> /etc/ppp/pptpd-options
echo "proxyarp" >> /etc/ppp/pptpd-options
echo "lock" >> /etc/ppp/pptpd-options
echo
sleep 1
echo "Criando /etc/ppp/chap-secrets..."
echo "Usuario: $1"
echo "Senha: $2"
echo "Usuario	Servidor	Senha	IP" > /etc/ppp/chap-secrets
echo "$1	pptpd	$2	*" >> /etc/ppp/chap-secrets
echo
sleep 1
echo "Habilitando IP Forward..."
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
echo
sleep 1
echo "Ativando firewall para SSH, PPTP e NAT..."
iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 1723 -j ACCEPT
iptables -A INPUT -p udp -m state --state NEW --dport 1723 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables --append INPUT --protocol 47 --jump ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A INPUT -j REJECT
echo
sleep 1
echo "Salvando regras do iptables..."
iptables-save -c > /etc/iptables.rules
echo
sleep 1
echo "Habilitando regras de firewall no boot..."
echo "#!/bin/sh" > /etc/network/if-pre-up.d/iptablesload
echo "iptables-restore < /etc/iptables.rules" >> /etc/network/if-pre-up.d/iptablesload
echo "exit 0" >> /etc/network/if-pre-up.d/iptablesload
echo "#!/bin/sh" > /etc/network/if-post-down.d/iptablessave
echo "if [ -f /etc/iptables.downrules ]; then" >> /etc/network/if-post-down.d/iptablessave
echo "   iptables-restore < /etc/iptables.downrules" >> /etc/network/if-post-down.d/iptablessave
echo "fi" >> /etc/network/if-post-down.d/iptablessave
echo "iptables-save -c > /etc/iptables.rules" >> /etc/network/if-post-down.d/iptablessave
echo "exit 0" >> /etc/network/if-post-down.d/iptablessave
chmod 755 /etc/network/if-post-down.d/iptablessave
chmod 755 /etc/network/if-pre-up.d/iptablesload
echo
sleep 1
/etc/init.d/pptpd restart
echo
sleep 1
echo "Setup do servidor de VPN PPTP finalizado"

#### Fim do arquivo ####

O script está bem “tosco” mas faz o serviço :)

Depois de criar o arquivo, você deve setá-lo como executável:

# chmod 755 vpn.sh

Feito isso basta executá-lo passando como parâmetro o login e a senha que você quer usar para se conectar ao seu servidor de VPN, que o script irá executar a configuração básica do servidor para você.

Por exemplo para configurar o pptpd com usuário edson e senha teste1234 , você deve executar:

# ./vpn.sh edson teste1234

Se você precisar adicionar outros usuários ao seu servidor basta editar manualmente o arquivo /etc/ppp/chap-secrets que o script gerou, adicionando uma nova linha para cada usuário que você precisar criar, seguindo o modelo da linha que foi gerada pelo script :)

Depois de habilitar o servidor, basta configurar seu iPad/iPhone, para fazer isso vá em Settings -> General -> Network -> VPN. Clique na opção “Add VPN Configuration” e selecione a opção PPTP e preencha seguindo o padrão abaixo:

* Description = Nome da sua VPN
* Server = IP do seu servidor
* Account = Seu login
* RSA SecurID = OFF
* Password = Sua senha
* Encryption Level = Auto
* Send all traffic = ON
* Proxy = Off

Para testar se sua VPN está funcionando, basta ligar o “botão” que tem na parte superior desta tela, uma vez autenticado abra o safari e abra o endereço http://www.meuip.com.br , se tudo deu certo o site irá exibir o IP do seu servidor ;)

Agora você já pode acessar os sites/serviços que exigem um IP americano para funcionar :)

Com conhecimentos básicos de linux/unix o processo todo não leva nem 5 minutos contados do inicio do cadastro na RackSpace.

Bom divertimento!

[ ]´s Edson

Ps. Se você não quiser montar seu próprio servidor de VPN você sempre tem a opção de contratar o serviço de alguma empresa, como por exemplo da Overplay

3 Responses to “DIY: Monte um VPN Server para o seu iPad/iPhone em menos de 5 minutos”

  1. Edson, desculpa postar nesse tópico, mas gostaria de saber se vc ainda utiliza o amibroker com dde da advfn? Funfa bem? Estou querendo fazer alguns day-trades e estou procurando algo… contratei o servico do tradezone para intraday para testar no synquest e me decepcionei não com o sinal da tradezone mas com o synquest. O soft é um lixo, as medias variam quando vc navega, suporte e resistencia mudam de lugar, nem da pra descrever tantos defeitos, um mais gritante q o outro. Uso o metatrader para fim de dia e estou satisfeito, mas agora que descobri o amibroker gostaria de testar (os dados eod sao faceis de achar e nao me importo em ter que atualizar na “unha”) e o servico da advfn (dde) tem um preco otimo, entao utilizaria uma base pequena ja que para day trade nao preciso de mais que tres meses na base. E entao oque me diz?

    Abraço e muito obrigado

  2. Edson Brandi on May 5th, 2010 at 11:31 pm

    Francisco,

    O serviço funciona bem se você não quizer acompanhar muitos ativos, o processo de obtenção de dados por DDE é bastante ineficiente quando o volume de informações para monitorar aumenta.

    Se você não se importa de fazer o backfill manual no final de cada pregão, e se não planeja acompanhar mais que uns 10 ativos ao mesmo tempo, o par amibroker + advfn vai funcionar bem pra vc :)

    Eu também gosto muito do esignal, pena que o custo dele não ajuda muito :(

    Edson

  3. Obrigado pela ajuda Edson, E bons trades a vc…