miércoles, 4 de abril de 2012

Como configurar una conexión VPN PPTP

Si necesitas abrir una conexión VPN PPTP desde una computadora Linux, puedes usar el cliente pptp para configurar una conexión PPP y lanzar el demonio pppd para hacer la conexión. Necesitas conocer al menos el servidor VPN, un usuario autorizado para hacer la conexión y su contraseña, y trabajaremos con la cuenta de root por cuestiones prácticas pero no es indispensable.

Antes que nada, si no tienes el cliente pptp tienes que instalarlo o configurar la conexión PPP a mano o de otra forma, en Debian Squeeze puedes instalar el paquete pptp-linux.

A continuación, esta es la manera fácil para configurar tu conexión VPN PPTP:
pptpsetup --create MYVPN --server myvpnserver --username myvpnuser --password mypassword

Tienes que sustituir myvpnserver, myvpnuser y mypassword por el servidor VPN, el usuario y contraseña respectivamente; MYVPN es el nombre de la configuración PPP que crearás y es escogido por ti.

Después de esto tendrás un nuevo archivo de configuración en /etc/ppp/peers y también una línea extra en /etc/ppp/chap-secrets:
olimpo:~# cat /etc/ppp/peers/MYVPN
# written by pptpsetup
pty "pptp myvpnserver --nolaunchpppd"
lock
noauth
nobsdcomp
nodeflate
name myvpnuser
remotename MYVPN
ipparam MYVPN

olimpo:~# cat /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret   IP addresses

# added by pptpsetup for MYVPN
myvpnuser MYVPN "mypassword" *

Si quieres configurar el demonio pppd a mano, tienes que crear un archivo en /etc/ppp/peers y agregar la información de autenticación en /etc/ppp/chap-secrets y debería ser lo mismo.

Ahora puedes abrir la conexión PPP lanzando el demonio pppd:
olimpo:~# pppd call MYVPN updetach
Using interface ppp0
Connect: ppp0 <--> /dev/pts/3
CHAP authentication succeeded
local  IP address 10.5.15.222
remote IP address 10.5.15.127

olimpo:~# tail --lines=16 /var/log/syslog
Jan 25 13:04:12 olimpo pppd[29036]: pppd 2.4.5 started by root, uid 0
Jan 25 13:04:12 olimpo pppd[29036]: Using interface ppp0
Jan 25 13:04:12 olimpo pppd[29036]: Connect: ppp0 <--> /dev/pts/3
Jan 25 13:04:13 olimpo pptp[29037]: anon log[main:pptp.c:314]: The synchronous pptp option is NOT activated 
Jan 25 13:04:13 olimpo pptp[29041]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 1 'Start-Control-Connection-Request' 
Jan 25 13:04:13 olimpo pptp[29041]: anon log[ctrlp_disp:pptp_ctrl.c:739]: Received Start Control Connection Reply
Jan 25 13:04:13 olimpo pptp[29041]: anon log[ctrlp_disp:pptp_ctrl.c:773]: Client connection established.
Jan 25 13:04:14 olimpo NetworkManager[1919]:    SCPlugin-Ifupdown: devices added (path: /sys/devices/virtual/net/ppp0, iface: ppp0)
Jan 25 13:04:14 olimpo NetworkManager[1919]:    SCPlugin-Ifupdown: device added (path: /sys/devices/virtual/net/ppp0, iface: ppp0): no ifupdown configuration found.
Jan 25 13:04:14 olimpo pptp[29041]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 7 'Outgoing-Call-Request' 
Jan 25 13:04:14 olimpo pptp[29041]: anon log[ctrlp_disp:pptp_ctrl.c:858]: Received Outgoing Call Reply.
Jan 25 13:04:14 olimpo pptp[29041]: anon log[ctrlp_disp:pptp_ctrl.c:897]: Outgoing call established (call ID 0, peer's call ID 8918). 
Jan 25 13:04:14 olimpo modem-manager: (net/ppp0): could not get port's parent device
Jan 25 13:04:17 olimpo pppd[29036]: CHAP authentication succeeded
Jan 25 13:04:17 olimpo pppd[29036]: local  IP address 10.5.15.222
Jan 25 13:04:17 olimpo pppd[29036]: remote IP address 10.5.15.127

olimpo:~# ifconfig ppp0
ppp0      Link encap:Point-to-Point Protocol  
          inet addr:10.5.15.222  P-t-P:10.5.15.127  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:99 (99.0 B)  TX bytes:93 (93.0 B)

olimpo:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.5.15.127     *               255.255.255.255 UH    0      0        0 ppp0
static.customer 10.123.46.1     255.255.255.255 UGH   0      0        0 br0
10.123.46.0     *               255.255.255.0   U     0      0        0 br0
default         10.123.46.1     0.0.0.0         UG    0      0        0 br0

Eso es, tienes una conexión VPN abierta a tu servidor VPN! O está casi terminado, ya que tenemos un problema de ruteo.
olimpo:~# ping 10.5.15.123
PING 10.5.15.123 (10.5.15.123) 56(84) bytes of data.
^C
--- 10.5.15.123 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 6047ms

olimpo:~# traceroute 10.5.15.123
traceroute to 10.5.15.123 (10.5.15.123), 30 hops max, 60 byte packets
 1  10.123.81.4 (10.123.81.4)  0.407 ms  0.429 ms  0.492 ms
 2  10.123.148.1 (10.123.148.1)  0.313 ms  0.352 ms  0.345 ms
 3  * * *
 4  * * *
 5  * * *
 6  *^C

Como podrás observar en la información de ruteo, no hay ruta a la red VPN desde tu computadora Linux. Puedes agregarle defaultroute al comando pppd, pero de esta forma tendrás conectividad SOLO a la red VPN; para ponerlo simple: es como si estuvieras directamente conectado a la otra red. Si tenías acceso a internet y no hay forma de accesar internet en la red VPN entonces no tendrás acceso a internet, o si tenías acceso a otras redes después de usar pppd con defaultroute no tendrás más acceso a ellas.

Y de hecho esa es la forma en que una VPN supuestamente debe trabajar. Por ejemplo, si tu computadora tiene un troyano y ese programa está diseñado específicamente para tu organización, y conectas tu computadora a la red VPN y aún tienes acceso a internet, entonces ese troyano puede robar información y enviarla a alguien más fácilmente. O podrías pensar que dejar tu conexión VPN abierta y tu computadora accesible desde internet podría ser útil para compartir tu conexión VPN; de esta manera estás creando un hoyo de seguridad en la red VPN por lo que sé cuidadoso y hazlo sólo si realmente necesitas hacerlo.

Por lo tanto, si necesitas mantener conectividad a otras redes y no quieres agregar defaultroute al comando pppd, tienes que crear la ruta a mano. En este caso, queremos accesar la red VPN 10.5.15.0/24, por lo tanto escribiremos este comando route:
olimpo:~# route add -net 10.5.15.0 netmask 255.255.255.0 dev ppp0

Como puedes ver en la información de route y traceroute, esta vez puedes alcanzar el servidor de ejemplo (10.5.15.123) a través del gateway PPP (10.5.15.127):
olimpo:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.5.15.127     *               255.255.255.255 UH    0      0        0 ppp0
static.customer 10.123.46.1     255.255.255.255 UGH   0      0        0 br0
10.123.46.0     *               255.255.255.0   U     0      0        0 br0
10.5.15.0       *               255.255.255.0   U     0      0        0 ppp0
default         10.123.46.1     0.0.0.0         UG    0      0        0 br0

olimpo:~# traceroute 10.5.15.123
traceroute to 10.5.15.123 (10.5.15.123), 30 hops max, 60 byte packets
 1  10.5.15.127 (10.5.15.127)  163.061 ms  163.027 ms  163.010 ms
 2  10.5.15.123 (10.5.15.123)  174.981 ms  174.967 ms  174.954 ms

Finalmente, para terminar tu conexión PPP puedes finalizar el demonio pppd (apropiadamente); puedes hacer esto obteniendo el PID del demonio pppd y lanzando un comando kill:
olimpo:~# ps ax|grep pppd
10094 pts/1    S+     0:00 grep pppd
29037 pts/1    S      0:00 pptp myvpnserver --nolaunchpppd
29041 pts/1    S      0:00 pptp myvpnserver --nolaunchpppd
29044 pts/1    S      0:00 pppd call MYVPN updetach

olimpo:~# cat /var/run/ppp0.pid 
29044

olimpo:~/bin# kill -TERM 29044

olimpo:~/bin# tail --lines=11 /var/log/syslog
Jan 25 15:06:43 olimpo pppd[29044]: Terminating on signal 15
Jan 25 15:06:43 olimpo pppd[29044]: Modem hangup
Jan 25 15:06:43 olimpo pppd[29044]: Connect time 122.5 minutes.
Jan 25 15:06:43 olimpo pppd[29044]: Sent 1140 bytes, received 1056 bytes.
Jan 25 15:06:43 olimpo pptp[29041]: anon log[callmgr_main:pptp_callmgr.c:258]: Closing connection (shutdown)
Jan 25 15:06:43 olimpo pptp[29041]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 12 'Call-Clear-Request' 
Jan 25 15:06:43 olimpo pptp[29041]: anon log[call_callback:pptp_callmgr.c:79]: Closing connection (call state)
Jan 25 15:06:44 olimpo pppd[29044]: Connection terminated.
Jan 25 15:06:44 olimpo avahi-daemon[1488]: Withdrawing workstation service for ppp0.
Jan 25 15:06:44 olimpo NetworkManager[1919]:    SCPlugin-Ifupdown: devices removed (path: /sys/devices/virtual/net/ppp0, iface: ppp0)
Jan 25 15:06:49 olimpo pppd[29044]: Exit.

olimpo:~# ps ax|grep pppd
11587 pts/1    S+     0:00 grep pppd

Más información:

The Point-to-Point Protocol

No hay comentarios.:

Publicar un comentario