// Tutorial //

Como Configurar sua Própria VPN com PPTP

Published on May 26, 2015
Default avatar
By Bulat Khamitov
Developer and author at DigitalOcean.
Português
Como Configurar sua Própria VPN com PPTP

###Introdução

Uma das questões mais comuns entre nossos usuários é sobre como adicionar outro endereço IP ao seu servidor. Você pode atribuir seu próprio endereço IP privado ao seu droplet através da criação de um túnel VPN. Esteja você construindo sua própria Rede Virtual Privada (VPN), ou atribuindo um certificado SSL para esse endereço IP, você tem várias opções. De todas as possíveis opções, as mais otimizadas estão entre PPTP e OpenVPN. O protocolo de Tunelamento Ponto-a-Ponto (PPTP) permite a você implementar sua própria VPN muito rapidamente, e é compatível com a maioria dos dispositivos móveis. Mesmo sendo menos seguro que o OpenVPN, ele é também mais rápido e consome menos recursos de CPU.

Passo 1 - Instalação do PPTP

Você terá que selecionar um servidor para ser responsável pelo tratamento de IPs para outros e pela autenticação de todos os seus servidores em sua VPN. Este será o seu servidor PPTP.

No CentOS 6 x64:

rpm -i http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm
yum -y install pptpd

No Ubuntu 12.10 x64:

apt-get install pptpd

Agora, você deve editar o arquivo /etc/pptpd.conf e adicionar as seguintes linhas:

localip 10.0.0.1
remoteip 10.0.0.100-200

Onde localip é o endereço IP do seu servidor e remoteip são IPs que serão atribuídos aos clientes que se conectam a ele.

Depois, você deve configurar a autenticação para o PPTP através da adição de usuários e senhas. Simplesmente adicione-os ao arquivo /etc/ppp/chap-secrets:

Onde client é o username ou nome de usuário, server é o tipo de serviço - pptpd para o nosso exemplo, secret é a senha, e IP addresses especifica quais endereços IP devem autenticar-se. Definindo ‘*’ no campo IP addresses, você especifica que irá aceitar pares username/senha para qualquer IP.

Passo 2 - Adicionar servidores DNS ao arquivo /etc/ppp/pptpd-options

ms-dns 8.8.8.8
ms-dns 8.8.4.4

Agora, você pode iniciar o daemon PPTP:

service pptpd restart

Verifique que ele está executando e aceitando conexões:

Passo 3 - Configurar Encaminhamento

É importante habilitar o encaminhamento no seu servidor PPTP. Isto permitirá a você encaminhar pacotes entre IPs públicos e privados que você definir com o PPTP. Simplesmente, edite o arquivos /etc/sysctl.conf e adicione a seguinte linha se ela já não estiver lá.

net.ipv4.ip_forward = 1

Para tornar ativas as alterações, execute sysctl -p

Passo 4 - Criar uma regra NAT para o iptables

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE && iptables-save

Caso você queira que seus clientes PPTP falem uns com os outros, adicione as seguintes regras de iptables:

iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables -I INPUT -s 10.0.0.0/8 -i ppp0 -j ACCEPT
iptables --append FORWARD --in-interface eth0 -j ACCEPT

Agora, seu servidor PPTP também age como um roteador.

Caso você queira restringir quais servidores podem se conectar aos seus droplets, você pode configurar uma regra iptables que restringe conexões TCP à porta 1723.

Passo 5 - Configurar Clientes

Em seus servidores clientes, instale o cliente PPTP:

yum -y install pptp

Passo 6 - Adicionar módulos de kernel necessários

modprobe ppp_mppe

Crie um novo arquivo /etc/ppp/peers/pptpserver e adicione as seguintes linhas, substituindo name e password com seus próprios valores:

pty "pptp 198.211.104.17 --nolaunchpppd"
name box1
password 24oiunOi24
remotename PPTP
require-mppe-128

Onde 198.211.104.17 é o endereço IP público do seu servidor PPTP, com username ‘box1’ e senha ‘24oiunOi24’ que especificamos no arquivo /etc/ppp/chap-secrets no seu servidor PPTP.

Agora podemos ‘chamar’ este servidor PPTP, uma vez que este é um protocolo ponto-a-ponto. Seja qual for o nome que você deu a seus pares no arquivo /etc/ppp/peers/, ele deve ser usado nesta linha seguinte. Um vez que chamamos nosso arquivo de pptpserver:

pppd call pptpserver

Você deverá ver conexão com sucesso nos logs do servidor pptp:

No seu cliente PPTP, configure o roteamento para sua rede privada via interface ppp0:

ip route add 10.0.0.0/8 dev ppp0

Sua interface ppp0 deverá estar ativa no seu servidor cliente de PPTP, e pode ser verificada executando-se ifconfig

Agora você pode pingar seu servidor PPTP e quaisquer outros clientes que estiverem conectados a esta rede:

Podemos adicionar nosso segundo cliente PPTP a esta rede:

yum -y install pptp
modprobe ppp_mppe

Adicionar ao arquivo /etc/ppp/peers/pptpserver (substituindo com seus próprios valores de name e password):

pty "pptp 198.211.104.17 --nolaunchpppd"
name box2
password 239Aok24ma
remotename PPTP
require-mppe-128

Agora execute em seu segundo cliente o seguinte:

pppd call pptpserver
ip route add 10.0.0.0/8 dev ppp0

Você pode também pingar o primeiro cliente, visto que os pacotes irão pelo servidor PPTP e serão roteados utilizando as regras de iptables que configuramos anteriormente:

Esta configuração permite a você criar sua própria rede virtual privada:

Se você deseja ter todos os seus dispositivos comunicando-se com segurança em uma rede, esta é uma maneira rápida de implementar isto.

Você pode utilizá-la com Nginx, Squid, MySQL, e quaisquer outras aplicações que você pensar.

Uma vez que o tráfego é criptografado com 128 bits, ele é menos exigente em termos de CPU do que o OpenVPN, e ainda fornece e adiciona um nível de segurança ao seu tráfego.


Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.

Sign up
About the authors
Default avatar
Developer and author at DigitalOcean.

Default avatar
Developer and author at DigitalOcean.

Still looking for an answer?

Was this helpful?

Funcionou perfeitamente no dia que segui o artigo. Após alguns dias, parou de funcionar, como posso debugar o problema? Recebo este log de msgs no cliente (/var/log/syslog):

Feb 28 09:45:13 MarcoSSD pppd[11241]: sent [LCP ConfReq id=0x8 <asyncmap 0x0> <magic 0x72d4c6a3> <pcomp> <accomp>]
Feb 28 09:45:37 MarcoSSD pppd[11241]: message repeated 8 times: [ sent [LCP ConfReq id=0x8 <asyncmap 0x0> <magic 0x72d4c6a3> <pcomp> <accomp>]]
Feb 28 09:45:40 MarcoSSD pppd[11449]: LCP: timeout sending Config-Requests
Feb 28 09:45:40 MarcoSSD pppd[11449]: Connection terminated.
Feb 28 09:45:40 MarcoSSD NetworkManager[908]:    SCPlugin-Ifupdown: devices removed (path: /sys/devices/virtual/net/ppp1, iface: ppp1)
Feb 28 09:45:40 MarcoSSD pppd[11449]: Modem hangup
Feb 28 09:45:40 MarcoSSD pptp[11528]: anon warn[decaps_hdlc:pptp_gre.c:204]: short read (-1): Input/output error
Feb 28 09:45:40 MarcoSSD pptp[11528]: anon warn[decaps_hdlc:pptp_gre.c:216]: pppd may have shutdown, see pppd log
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[callmgr_main:pptp_callmgr.c:234]: Closing connection (unhandled)
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 12 'Call-Clear-Request'
Feb 28 09:45:40 MarcoSSD pppd[11449]: Using interface ppp1
Feb 28 09:45:40 MarcoSSD pppd[11449]: Connect: ppp1 <--> /dev/pts/31
Feb 28 09:45:40 MarcoSSD NetworkManager[908]:    SCPlugin-Ifupdown: devices added (path: /sys/devices/virtual/net/ppp1, iface: ppp1)
Feb 28 09:45:40 MarcoSSD NetworkManager[908]:    SCPlugin-Ifupdown: device added (path: /sys/devices/virtual/net/ppp1, iface: ppp1): no ifupdown configuration found.
Feb 28 09:45:40 MarcoSSD NetworkManager[908]: <warn> /sys/devices/virtual/net/ppp1: couldn't determine device driver; ignoring...
Feb 28 09:45:40 MarcoSSD pptp[11565]: anon log[main:pptp.c:314]: The synchronous pptp option is NOT activated
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 7 'Outgoing-Call-Request'
Feb 28 09:45:40 MarcoSSD pppd[11241]: LCP: timeout sending Config-Requests
Feb 28 09:45:40 MarcoSSD pppd[11241]: Connection terminated.
Feb 28 09:45:40 MarcoSSD NetworkManager[908]:    SCPlugin-Ifupdown: devices removed (path: /sys/devices/virtual/net/ppp0, iface: ppp0)
Feb 28 09:45:40 MarcoSSD pppd[11241]: Modem hangup
Feb 28 09:45:40 MarcoSSD pptp[11494]: anon warn[decaps_hdlc:pptp_gre.c:204]: short read (-1): Input/output error
Feb 28 09:45:40 MarcoSSD pptp[11494]: anon warn[decaps_hdlc:pptp_gre.c:216]: pppd may have shutdown, see pppd log
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[callmgr_main:pptp_callmgr.c:234]: Closing connection (unhandled)
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 12 'Call-Clear-Request'
Feb 28 09:45:40 MarcoSSD pppd[11241]: using channel 90
Feb 28 09:45:40 MarcoSSD NetworkManager[908]:    SCPlugin-Ifupdown: devices added (path: /sys/devices/virtual/net/ppp0, iface: ppp0)
Feb 28 09:45:40 MarcoSSD NetworkManager[908]:    SCPlugin-Ifupdown: device added (path: /sys/devices/virtual/net/ppp0, iface: ppp0): no ifupdown configuration found.
Feb 28 09:45:40 MarcoSSD pppd[11241]: Using interface ppp0
Feb 28 09:45:40 MarcoSSD NetworkManager[908]: <warn> /sys/devices/virtual/net/ppp0: couldn't determine device driver; ignoring...
Feb 28 09:45:40 MarcoSSD pppd[11241]: Connect: ppp0 <--> /dev/pts/28
Feb 28 09:45:40 MarcoSSD pppd[11241]: Script pptp 34.253.192.178 --nolaunchpppd finished (pid 11493), status = 0x0
Feb 28 09:45:40 MarcoSSD pptp[11579]: anon log[main:pptp.c:314]: The synchronous pptp option is NOT activated
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 7 'Outgoing-Call-Request'
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[pptp_read_some:pptp_ctrl.c:544]: read returned zero, peer has closed
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[callmgr_main:pptp_callmgr.c:258]: Closing connection (shutdown)
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 12 'Call-Clear-Request'
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[callmgr_main:pptp_callmgr.c:258]: Closing connection (shutdown)
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 12 'Call-Clear-Request'
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[callmgr_main:pptp_callmgr.c:258]: Closing connection (shutdown)
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 12 'Call-Clear-Request'
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[pptp_read_some:pptp_ctrl.c:544]: read returned zero, peer has closed
Feb 28 09:45:40 MarcoSSD pptp[11521]: anon log[call_callback:pptp_callmgr.c:79]: Closing connection (call state)
Feb 28 09:45:40 MarcoSSD pptp[11521]: message repeated 2 times: [ anon log[call_callback:pptp_callmgr.c:79]: Closing connection (call state)]
Feb 28 09:45:40 MarcoSSD pppd[11449]: Modem hangup
Feb 28 09:45:40 MarcoSSD pppd[11449]: Connection terminated.
Feb 28 09:45:40 MarcoSSD pppd[11543]: Modem hangup
Feb 28 09:45:40 MarcoSSD pppd[11543]: Connection terminated.
Feb 28 09:45:40 MarcoSSD pppd[11241]: Modem hangup
Feb 28 09:45:40 MarcoSSD pppd[11241]: Connection terminated.

Ótimo artigo. Obrigado por compartilhar