En este articulo vamos a detallar la instalación y configuración de una VPN casera en nuestra raspi, con OpenSwan y soporte L2tp/Ipsec
Instalacion
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install openswan xl2tpd ppp lsof
Openswan se encarga de:
IPSEC=, el cifrado.
XL2TPD: transporte de datos.
PPP=controla el túnel vpn.
LSOF=utilidad list open files.
Nos aparecerá un asistente, nos pregunta si queremos o no instalar un certificado x.509 o importar uno que tengamos, esto es apoyarnos en un sistema de claves compartidas.
En mi caso usare claves compartidas, puedes volver a este asistente con:
dpkg-reconfigure openswan
Configuración
Configuramos IpSec, creamos copia del fichero de configuración y lo editamos.
sudo cp /etc/ipsec.conf /etc/ipsec.conf.original
sudo nano /etc/ipsec.conf
config setup
dumpdir=/var/run/pluto/
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.1.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:$
oe=off
protostack=netkey
conn casa
authby=secret
pfs=no
auto=add
keyingtries=3
ikelifetime=8h
keylife=1h
type=transport
left=192.168.1.X(Cambiamos esto por nuestro segmento de red)
leftprotoport=17/1701
right=any%
rightprotoport=17/%any
dpddelay=10
dpdtimeout=20
dpdaction=clear
Configuramos ahora la clave, copiamos el archivo y editamos
sudo cp /etc/ipsec.secrets /etc/ipsec.secrets.original
sudo nano /etc/ipsec.secrets
Añadimos abajo nuestra clave con tabulaciones
%any %any : PSK "PruebaDeClavePSK"
Configuramos el transporte xl2tp y lo editamos
sudo cp /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.original
sudo nano /etc/xl2tpd/xl2tpd.conf
[global]
ipsec saref = yes
saref refinfo = 30
[lns default]
ip range = 192.168.1.20-192.168.1.30 (Rango de ip que definamos)
local ip = 192.168.1.X(Rango de ip local)
refuse chap = yes
refuse pap = yes
require authentication = yes
name = CasaVPN(El nombra que queramos definir)
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
Ahora configuramos el túnel ppp y lo editamos
sudo cp /etc/ppp/options /etc/ppp/options.xl2tpd.original
sudo cp /etc/ppp/options /etc/ppp/options.xl2tpd
rm /etc/ppp/options
require-mschap-v2
ms-dns 8.8.8.8 (Le indicamos los servidores DNS que queramos en este caso(google)
ms-dns 8.8.4.4 (Le indicamos los servidores DNS que queramos en este caso(google)
auth
mtu 1200
mru 1000
crtscts
hide-password
modem
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
Añadir usuarios remotos:
sudo nano /etc/ppp/chap-secrets
# client server secret IP addresses
mimovil * mipasswordusuario *
No aceptar redirecciones ICMP (evita MITM)
echo "net.ipv4.ip_forward = 1" | tee -a /etc/sysctl.conf
echo "net.ipv4.conf.all.accept_redirects = 0" | tee -a /etc/sysctl.conf
echo "net.ipv4.conf.all.send_redirects = 0" | tee -a /etc/sysctl.conf
sysctl -p
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do echo 0 > $f; done
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 0 > $f; done
Fijamos al inicio
nano /etc/rc.local
for vpn in /proc/sys/net/ipv4/conf/*; do echo 0 > $vpn/accept_redirects; echo 0 > $vpn/send_redirects; done
iptables --table nat --append POSTROUTING --jump MASQUERADE
Reiniciamos servicios y comprobamos
/etc/init.d/xl2tpd restart
/etc/init.d/ipsec restart
sudo ipsec verify
Iniciar IpSec al iniciar
update-rc.d ipsec defaults
iptables -A INPUT -p 50 -j ACCEPT
iptables -A INPUT -p udp -d 192.168.1.1 –dport 500 -j ACCEPT
iptables -A INPUT -p udp -d 192.168.1.1 –dport 4500 -j ACCEPT
Para acceder desde el exterior a nuestra vpn NATeamos nuestros puertos en el router a la raspberry.
L2TP traffic – TCP 1701
Internet Key Exchange (IKE) – UDP 500
IPSec Network Address Translation (NAT-T) – UDP 4500
Para comprobar Logs:
cat /var/log/syslog
tail -f /var/log/auth.log
La configuración de una VPN es un tema complejo, por lo que si tenéis problemas o dudas al instalar/configurar no dudéis en comentárnoslo en los comentarios.
Happy Hacking ?
Con esta instalación , seria el típico escenario , para poder conectarnos a cualquier wifi
ya sea aeropuertos , hoteles , bibliotecas etc
Imagino que primero te conectas a la wifi en cuestion y a continuación lanzas la vpn y una vez conectado , ya puedes acceder a tu correo , redes sociales tranquilamente.
Exactamente, la idea es meter una capa de cifrado https a todas las conexiones publicas, para poder navegar «sin sobresaltos» ;)
No es posible reiniciar los servicios, con journalctl -xe se puede ver el siguiente error:
ipsec[28723]: can not load config ‘/etc/ipsec.conf’: /etc/ipsec.conf:2: syntax error, unexpected KEYWORD, expecting $end [dumpdir]
El articulo no es para plataformas con systemd, echa un vistazo a https://raymii.org/s/tutorials/IPSEC_L2TP_vpn_on_a_Raspberry_Pi_with_Arch_Linux.html para ver si te sirve de ayuda.