Instalación y configuración de PPTPD
... el primer superpoder de mi Raspberry
Hola gente!, ha llegado el momento de darle el primer superpoder a nuestro RaspberryPi, vamos a configurarlo como servidor VPN, esto es vital para muchos de los superpoderes que le daremos en sucesivos post. Manos al lio.¡¡AVISO!! ESTE MANUAL SÓLO ES VALIDO CON UN KERNEL QUE SOPORTE PPP FILTERING (pasate por este post)
Servidores VPN hay cientos, la mayoría muy buenos. De igual forma hay cientos de formas de configurar el servicio de VPN, ya que podemos poner distintos tipos de autentificación, permisos, redes ... yo voy a hacer una configuración muy muy simple, a la par que segura, para que al conectar desde cualquier parte del mundo, tengamos acceso a nuestra red doméstica (o a la del curro) y además poder hacerlo desde cualquier cliente linux, windows o android. Supongamos la más común de las redes 192.168.1.x , empecemos:
sudo aptitude install pptpd iptablesEditamos el archivo de configuración general de pptpd:
sudo vim /etc/pptpd.confComo vemos es bastante extenso, tiene cientos de configuraciones posibles ... asusta un poco. Para mis necesidades dejo el archivo de la siguiente forma:
option /etc/ppp/pptpd-options logwtmp localip 192.168.1.2 remoteip 192.168.1.234-238 #deja esta linea comentada para evitar fallos rarosSiendo 192.168.1.2 la IP local de mi RaspberryPi. Aqui mi colega Abel (y el Borreguero) me dirá que es más seguro segmentar la red y aislar de forma segura en una Vlan a los clientes VPN ... y tiene razón. Pero como voy a ser yo el que se conecte y suelo fiarme de mi mismo, lo voy a dejar así. Seguimos editando el siguiente archivo:
sudo vim /etc/ppp/pptpd-optionsEste archivo casi que asusta más que el anterior, el mio lo dejo así:
name pptpd require-mschap-v2 require-mppe-128 nomppe-stateful nodefaultroute debug lock nobsdcompY ahora vamos a añadir usuarios a nuestra VPN:
sudo vim /etc/ppp/chap-secretsAñadimos usuario, servidor, clave e IP que va a tener nuestro cliente:
usuario pptpd clave 192.168.1.234Reiniciamos el servicio:
sudo /etc/init.d/pptpd restartY poco más. Tendremos que rutar el puerto 1723 desde el ruter hacia la IP de nuestro RaspberryPi y listo. Configuramos cualquier cliente VPN contra nuestra IP pública o DynDNS, usuario ... clave ...
ACTUALIZACIÓN: he notado que no todas las distros modifican correctamente los archivos correspondientes, así que para curarnos en salud, modificamos el archivo:
/etc/sysctl.confDescomentamos la linea:
net.ipv4.ip_forward=1Y reiniciamos.
ACTUALIZACIÓN 27/02/2013: después de una puntillosa puntualidad por parte del puntilloso del Borreguero, recomiendo cambiar la red que se asigna en la VPN, cambiando la linea de /etc/pptpd por esta otra:
remoteip 192.168.2.234-238y la de /etc/ppp/chap-secrets:
usuario pptpd clave 192.168.2.234Tras lo cual hay que ejecutar:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEy ya que estamos metemos esa misma línea al final del archivo /etc/rc.local
Este comentario ha sido eliminado por el autor.
ResponderEliminarEstas usando el protocolo PPTP para hacer la VPN verdad se recomienda usar L2TP o IPsec (Ya que es compatible con bastantes dispositivos) ya que si no recuerdo mal es totalmente vulnerable más datos en http://es.wikipedia.org/wiki/PPTP
Eliminartampoco me funciona, toy gafao. Por lo menos he conseguido conectar por shh con no-ip
ResponderEliminarque no hombre, no seas así. Tenemos linux ¡usémolso!. Primero ¿has abierto el puerto VPN en el ruter? Segundo ¿estas conectando a la VPN desde la misma red a la que la VPN pertenece? Tercero ¿has mirado el syslog a ver si sale algo?
EliminarTengo un par de dudas referente a este post y a Asterisk. Quiza tenga una idea rara, pero corrigeme...
ResponderEliminarTengo creada la VPN.(bien!) Me conecto por Android a la VPN.(bien!)
El primer error es que si estoy conectado a la VPN pierdo la conexion a internet del mobil. Es normal?
Una vez conectado intento conectar con el CSipSimple de Android al Asterisk. Normalmente si estoy en la misma red (es decir la wifi de casa) registra correctamente.
Para hacer la simulacion de lo que ocurriria con la conexion fuera de casa desactivo el Wifi y conecto el 3G. Conecto la VPN y conecta,(bien!) pero el SIP no registra.
Dame alguna idea...
empieza primero por hacerle ping al servidor asterisk desde la vpn, si no tienes respuesta ya sabes donde esta el fallo. Si haces ping ¿los clientes de la vpn estan en la misma red que el Asterisk? ¿te sale algun mensaje en la consola de asterisk poniendole el verbose a 10?
EliminarDesde Android con el FING, hago ping a la ip del Raspberry Pi (192.168.1.33 en mi caso)
ResponderEliminarMe lo devuelve bien. Hago scanner de servicios desde el cliente al PI y me da abiertos los puertos abiertos del PI (22-ssh, 139-netbios-ssn, 445-SMB directly over IP, 1723 pptp, 2000-callbook)
Portanto si hay conectividad. De hecho debe haberla si en el Android me sale la llave conforme estoy bien conectado y logueado.
Teoricamente segun el /etc/ppp/chap-secrets le asigno la ip 192.168.1.234, pero en realidad no se como averiguar si le esta asignando esa IP correctamente...
Desde el asterisk con Verbose 10 no sale ningun mensaje en absoluto...
A ver si resuelvo esto y luego averiguo porque al estar por VPN no tengo internet.
ummm asegurate de que te esté dando una ip del mismo rango que el Asterisk, lo puedes ver en el syslog al hacer la conexión vpn:
EliminarDec 10 10:32:20 raspberrypi pppd[10135]: local IP address 192.168.1.2
Dec 10 10:32:20 raspberrypi pppd[10135]: remote IP address 192.168.1.234
si no consigues que te de una ip del mismo rango, tendras que configurar asterisk para que admita peers, de ese rango.
He tenido un exito y un error. Te comento...
ResponderEliminarSi hago la conexion a la VPN desde el Android con una conexion WiFi desde mi trabajo se conecta a la VPN perfectamente y (redoble de suspense) SE CONECTA EL SIP!!!
En cambio si me conecto por 3G de Yoigo se conecta a la VPN pero no se conecta el SIP.
Te pego lo que me dice el syslog cuando me conecto por 3G:
Dec 10 22:48:12 rasspi pppd[3142]: local IP address 192.168.1.33
Dec 10 22:48:12 rasspi pppd[3142]: remote IP address 192.168.1.234
Dec 10 22:48:12 rasspi pppd[3142]: pptpd-logwtmp.so ip-up ppp0 rsspivpn 46.222.96.69
Dec 10 22:48:12 rasspi pppd[3142]: Script /etc/ppp/ip-up started (pid 3164)
Deduzco que si tiene la IP tal y como dices correctamente. Me pone en duda el significado de la tercera linea. Dudo si quiza sea que Yoigo tiene algo capado? Aunque al estar conectado por VPN no deberia ser asi...
De todos modos, tanto por WiFi conmo por 3G, al conectarme por VPN pierdo la conexion a internet. Eso es normal?
Gracias por la paciencia... estoy disfrutando con esto como un chino!! Enhorabuena por tu trabajo.
a mi me pasaba algo parecido con Pepephone, al final la solución estaba en el propio blog de Pepephone. Simplemente habia que cambiar de AP, si uso el de gprsmov.pepephone.com no me funcionan algunas cosas, como la VPN por ejemplo. Si le pongo gprs.pepephone.com me funciona todo. Explican en el blog que por defecto es el otro por temas de ahorro de la bateria.
EliminarMira a ver si puede ser algo de esto.
CONSEGUIDOOOO! Era muy muy simple. El csipsimple viene con la opción de conectarse por 3G desactivado... En settings activadlo y ya está!
EliminarAhora sólo me falta saber si es normal que cuando estoy conectado por VPN no tengo Internet o si me falta algo
Hola Juanmol, antes que nada felicitarte por el blog...aqui un fiel seguidor de tus "recetas". Estoy intentando montar el servido VPN pero no consigo conectarme desde Android, esto es lo que optengo en el syslog:
ResponderEliminarJan 3 02:28:56 raspberrypi pptpd[11211]: CTRL: Client 77.209.224.144 control connection started
Jan 3 02:28:56 raspberrypi pptpd[11211]: CTRL: Starting call (launching pppd, opening GRE)
Jan 3 02:28:56 raspberrypi pppd[11242]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
Jan 3 02:28:56 raspberrypi pppd[11242]: pptpd-logwtmp: $Version$
Jan 3 02:28:56 raspberrypi pppd[11242]: pppd 2.4.5 started by root, uid 0
Jan 3 02:28:56 raspberrypi pppd[11242]: using channel 4
Jan 3 02:28:56 raspberrypi pppd[11242]: Using interface ppp0
Jan 3 02:28:56 raspberrypi pppd[11242]: Connect: ppp0 <--> /dev/pts/2
Jan 3 02:28:56 raspberrypi pppd[11242]: sent [LCP ConfReq id=0x1 ]
Jan 3 02:28:56 raspberrypi pptpd[11211]: GRE: Bad checksum from pppd.
Jan 3 02:28:56 raspberrypi pptpd[11211]: GRE: read(fd=7,buffer=1dbc4,len=8260) from network failed: status = -1 error = Protocol not available
Jan 3 02:28:56 raspberrypi pptpd[11211]: CTRL: GRE read or PTY write failed (gre,pty)=(7,6)
Jan 3 02:28:56 raspberrypi pptpd[11211]: CTRL: Reaping child PPP[11242]
Jan 3 02:28:56 raspberrypi pppd[11242]: Hangup (SIGHUP)
Jan 3 02:28:56 raspberrypi pppd[11242]: Modem hangup
Jan 3 02:28:56 raspberrypi pppd[11242]: Connection terminated.
Jan 3 02:28:56 raspberrypi pppd[11242]: Exit.
Jan 3 02:28:56 raspberrypi pptpd[11211]: CTRL: Client 77.209.224.144 control connection finished
Jan 3 02:28:56 raspberrypi ifplugd(ppp0)[12654]: Exiting.
Gracias, un saludo
Yo he podido configurar la vpn sin problemas con la distro raspbian.
ResponderEliminarEres un crack, muchas gracias por toda esta información :D
Muy buen artículo.
ResponderEliminarSolo una puntualización. Se necesita hacer postrouting mediante IPTABLES, sino, no sales a inet.
tengo un problema, sigo todos tus pasos, pero luego no soy capaz de conectarme, bueno, no he cambiado de kernel, intento conectarme con un cliente cisco, no encuentro otro cliente vpn para windows.
ResponderEliminarpero nada... que cliente usais en windows??
el syslog dice esto
Jan 23 15:59:12 raspberrypi pptpd[8507]: MGR: Manager process started
$an 23 15:59:12 raspberrypi pptpd[8507]: MGR: Maximum of 6 connections available
$an 23 16:04:51 raspberrypi pptpd[8568]: MGR: Maximum of 100 connections reduced to 5, not enough IP addresses given
$an 23 16:04:51 raspberrypi pptpd[8569]: MGR: Manager process started
$an 23 16:04:51 raspberrypi pptpd[8569]: MGR: Maximum of 5 connections available
Jan 23 16:05:17 raspberrypi pptpd[8569]: MGR: initial packet length 51746 outside (0 - 220)
$an 23 16:04:51 raspberrypi pptpd[8569]: MGR: Manager process started
$an 23 16:04:51 raspberrypi pptpd[8569]: MGR: Maximum of 5 connections available
Jan 23 16:05:17 raspberrypi pptpd[8569]: MGR: initial packet length 51746 outside (0 - 220)Jan 23 16:04:51 raspberryp$
windows ya trae un cliente compatible con las instrucciones que pongo. Tienes que ir a las opciones de los interfaces de red (desconozco que nombre recibe actualmente) y tiene que haber algo como "nueva conexion de red" o algo asi, te sale un asistente y en una de las opciones le dices que es uan red vpn, o red privada, o red para el trabajo o red para trabajar o red segura ... desconozo cual es el nombre que toca ponerle actualmente ;)
Eliminarvale, bien, ya lo encontre, pero no entiendo porque no me conecta.... en fin, si os pego el archivo de configuracion, me podeis ayudar a ver donde he metido la pata?
ResponderEliminarclaro, ponlo en pastebin y danos el enlace.
EliminarAqui los teneis
Eliminarhttp://pastebin.com/5nVwvDUT
http://pastebin.com/BbLTV6zi
pongo tambien el syslog...parece que llegar llego...pero hay algo que me rechaza la conexion...o eso creo
Eliminarhttp://pastebin.com/nKv4i94y
no veo el fallo, tu archivo options es algo distinto al mio:
Eliminarname pptpd
require-mschap-v2
require-mppe-128
nomppe-stateful
nodefaultroute
debug
lock
nobsdcomp
el resto todo comentado, prueba a ver.
Una dudilla. Se podría de alguna manera que cuando se haga login en la VPN se pudiera ejecutar algún comando?
ResponderEliminarMe interesa para llamar a un sh que tengo para enviar una alerta por correo. Cuando alguien conecta vía ssh también lo hago.
Pero como ahora tengo todo cerrado excepto la VPN no tiene sentido avisar cuando hay una conexión ssh, porque siempre va a ser alguien de la red.
Además si se pudiera sacar de las variables de entorno o de otro sitio el usuario conectado y la ip desde donde se conecta seria la leche ;)
es linux! pos claro que se puede!. Si la propia configuración del servicio no te lo permite (tendría que mirarlo) puedes hacerlo monitorizando con incron el archivo del log de la vpn. Incron lo he usado varias veces en otros post, seguro que consigues lo que quieres dedicándole unos minutos. Ya nos contarás.
Eliminarhola, estoy siguiendo los pasos que comentas en tu post y no consigo acceder desde el portatil, ni desde la red local ni desde fuera, para poder conectarme por ssh desde no-ip (a pesar de tener el cliente instalado) tuve que configurar mi raspi como dmz en el router pero asi y todo no tengo acceso gracias
ResponderEliminardesde la red local, es posible que no puedas conectar, los ruters adsl se lian un poco con eso. Desde fuera, tiene que dejarte.
EliminarSi pones un segmento de DMZ en tu red, tienes que asegurarte de lo que el ruter adsl entiende por DMZ. Yo te recomiendo, que no uses DMZ en una red doméstica.
Se me ocurren varias pruebas, pero la mas simple es comprobar que los primeros direccionamientos los haces correctamente. Prueba instalar apache en el raspberry y haz un nat en el ruter para que sea alcanzable desde fuera el puerto 80. Desde fuera de la red ataca a ese puerto y comprueba que se muestra el apache del raspberry.
Si eso no te funciona, no te funcionará nada. Despues de la prueba quita el NAT, que hay mucho juanker suelto.
Muchas Gracias por tu respuesta, y perdón por el retraso pero estuve fuera. Por problemas con la room de mi smartphone no puedo usar vpn en el, igual algún día la cambio (sigue siendo la de el fabricante). Actualmente estoy conectado a la red por vpn y me funciona internet y todo pero no veo el resto de equipos, sera por que estoy en windows y todos los demas de la red estan en linux?
Eliminarno les haces ping?
Eliminarno, por que no se que ip tienen, no me aparecen en la red y con 192.168.1.x no los puedo encontrar
Eliminarpor cierto, acabo de reiniciar y arrancar desde ubuntu y no puedo acceder a la red vpn, así como en windows tengo acceso pero no veo los demás dispositivos en el mapa de red en linux directamente no puedo acceder a ella.
EliminarAlguno sabe si es posible establecer una VPN, conectando el Raspberry mediante Wifi?
ResponderEliminarTengo el Raspberry como servidor, y lo tengo conectado con Wifi. Cuando intento conectar a la VPN, las conexiones del Raspberry se cuelgan. Sigue funcionando, pero no responde a ping, ssh, por supuesto no llega a conectarse a la VPN. La única solución es ir, quitar la alimentación, y volver a encenderlo.
Sin embargo si lo conecto por LAN, funciona sin problemas. Imagino que de alguna forma, conectar el Wifi Usb se desconecta, y se pierde la conexión.
A alguno se le ocurre algo? Creo que me he quedado sin ideas.
al servidor vpn le da lo mismo si viene por cable, wifi, modem, cuerda o señales de humo. Hay una remota posibilidad de que el forwarding no se haga correctamente, pero seria un fallo en el firmware del adaptador wifi. Mira a ver si una version mas actualizada, pero no te dejes la vida en ello, porque es dificil que sea eso.
EliminarPues por señales de humo no he probado. Pero te aseguro que lo conecto por LAN, y funciona. No toco nada, lo conecto por Wifi, y cuando conecto se cuelga. (llevo todo el domingo probando).
EliminarTengo que probar con otro adaptador, o ver si al establecer la VPN incurre en alguna incompatibilidad que lo cuelga. El syslog no me da más pistas. Seguiré buscando, y si consigo resolverlo os lo comento.
En cualquier caso, gracias por tu respuesta
muy posiblemente sea por lo del firmware. Supongo que pones la ip del wifi en las configuraciones y en la línea del iptables cambias el interfaz por wlan0 (o la que sea) no?
EliminarHola.
ResponderEliminarEn primer lugar, enhorabuena por el blog. Te sigo desde hace un tiempo y creo que tus tutoriales son fantásticos y fáciles de seguir.
Aunque ya había configurado con éxito la VPN, desde hace unos días estoy teniendo unos problemas que me tienen despistado. Cuando intento logarme, uso 3G (Pepephone) en un HTC Desire Rooteado con CYanogenMod 7.2.0.1, me falla y en el syslog me sale esto:
http://pastebin.com/k7YERdXx
Me he asegurado que el APN de pepephone use gprs.pepephone.com en lugar de gprsmov.pepephone.com ...
También he actualizado el firmware de la RPi (rpi-update) ...
Aparentemente, no importa si pongo mal o bien la contraseña, ya que el error es el mismo.
¿Alguna idea o sugerencia o pista para seguir?
Saludos.
hay que descartar que sea fallo del HTC o del servidor, así que antes de nada tienes que probar desde otro 'aparato', ya sea windows, linux o cualquier otro.
EliminarGracias por tu rápida respuesta!
Eliminar¿Valdría un iphone? Porque me da el mismo error.
El lunes me hicieron una intervención desde ONO para actualizarme el firmware del cable modem, no descarto que pasara algo, pero a priori el puerto está abierto y disponible.
He probado a llevar a cabo los pasos desde 0 ... ¡y sin éxito!
¿Más ideas?
valdria un Iphone. No me gusta hecharle la culpa a algo que no he tocado, pero mira a ver si hay alguna opción en el cable modem, que se llame "vpn passthough" se esta poniendo de moda y fastidia bastante. En el curro hemos tenido más de un caso así. Y lo jodío jodío, es que lo tenga y sea de esas opciones que no se pueden modificar.
EliminarEsperemos que no sea por eso, seguiremos pensando ...
Hola.
EliminarResuelto! Tengo un Router de ONO y me han actualizado el firmware tal y como adelanté. La nueva versión desactiva por seguridad el servicio ppp e ipsec ... entre otros.
Ya está activado y funcionando ;)
Gracias por todo.
Hola.
EliminarAl igual que otras personas, cuando me conecto a la VPN (por ahora sólo lo he hecho con 3G) pierdo la salida a Internet. Puedo hacer ping a la raspberry, pero no puedo salir a Internet.
¿Alguna idea?
Gracias por adelantado.
Saludos.
has hecho la parte de la actualizacion del 27/2 ? asegurarte tambien de la parte del ip forwarding.
Eliminarhola Raul / Juan
Eliminaryo agregue dns editando:
sudo nano /etc/ppp/pptpd-options
agregamos :
ms-dns 192.168.1.1
podemos poner 8.8.8.8 (dns de googgle) o los que gusten. en mi caso puse la ip de mi router aunque tambien pude poner la ip de las raspberry (no la localip). en mi caso la rpi tiene la 192.168.1.110..
La vpn ya esta probada en red local, y desde internet en 2 unidades android con 3G.
saludos.
Hola Buenas.
ResponderEliminarhe seguido tu manual y solo me conecta por el movil android y se descoencta en menos de un minuto, y por pc ya sea windows o linux ni conecta..
no se que mas hacer!!!
Gracias y un saludo.
Buenas Juan Mol
ResponderEliminarMuchas gracias por tu tuto, tengo todo funcionando como la seda. Eso sí, con la configuración que tienes no he conseguido salir a internet, tuve que añadir en /etc/rc.local la siguiente línea:
sudo iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Y bueno, lo tengo funcionando tanto en win7 como en android. Un saludo y gracias!
Hola soy de Méjico y ando buscando un router cisco con servidor sip fxo adsl fxs' s y algo de wifi y bueno gigabit ethernet para poner switch
ResponderEliminar