Instalacion de OpenSwan L2tp/Ipsec en Raspbian

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 *

captura

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

captura2

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 ?

Compartir

4 Comentarios

  1. 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.

  2. Exactamente, la idea es meter una capa de cifrado https a todas las conexiones publicas, para poder navegar «sin sobresaltos» ;)

  3. 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]

Deja una respuesta

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax