L2TP sobre IPSEC per a dispositius iOS

Objectiu:

Muntar un servidor L2TP/IPSEC per tal que els dispositius iOS es puguin connectar a una xarxa remota mitjançant VPN. Aquest servei s’executarà sobre una màquina Debian 6.0 (Squeeze).

Procediment:

Utilitzarem, bàsicament, dos paquets disponibles en els repositoris de Debian. La instal·lació és com segueix:

$ apt-get install openswan xl2tpd

Un cop instal·lats aturarem els serveis per poder configurar-los:

$ service ipsec stop
$ service xl2tpd stop


El primer que configurarem és el programari openswan que proporciona el túnel IPSEC. Els arxius a modificar són dos:

$ pico /etc/ipsec.conf

Contingut de ipsec.conf:

# /etc/ipsec.conf - Openswan IPsec configuration file

version	2.0	

config setup
    nat_traversal=yes
    protostack=netkey
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12

conn L2TP-PSK-CLIENTS
    authby=secret
    pfs=no
    rekey=no
    type=tunnel
    ike=aes128-sha-modp1024
    ikelifetime=8h
    keylife=1h
    left=ADREÇA_LOCAL_DEL_SERVIDOR
    leftnexthop=%defaultroute
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any
    rightsubnetwithin=0.0.0.0/0
    auto=add
    dpdaction=clear

L’arxiu de secrets el podem editar amb:

$ pico /etc/ipsec.secrets

Aquest arxiu conté el secret compartit (PSK) conegut pels clients. Contingut de ipsec.secrets:

%any %any: PSK "AVeryGoodSecret"

Amb aquesta configuració ja podem posar en funcionament el túnel IPSEC:

$ service ipsec start

A continuació procedim a configurar el túnel xl2tp que a la vegada utilitzarà ppp per dur a terme l’autenticació. Es pot configurar amb la següent comanda:

$ pico /etc/xl2tpd/xl2tpd.conf

El contingut bàsic és el següent:

[global]

[lns default]
ip range = 172.16.0.2-172.16.0.5
local ip = 172.16.0.1
require chap = yes
refuse pap = yes
require authentication = yes
name = Nom
pppoptfile = /etc/xl2tpd/ppp-options.xl2tpd
length bit = yes

A continuació fem el següent per tal de configurar les opcions de ppp:

$ pico /etc/xl2tpd/ppp-options.xl2tpd

Amb aquest contingut:

ipcp-accept-local
ipcp-accept-remote
ms-dns LOCAL_OR_PUBLIC_DNS_SERVER
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000

Finalment l’arxiu que conté les dades d’autenticació es pot editar amb la comanda:

$ pico /etc/ppp/chap-secrets

Al contingut d’aquest arxiu s’hi hauria d’afegir una nova línia amb l’usuari al que volem donar accés al túnel:

...
* * AnotherGoodSecret *
...

Ja podem posar en funcionament el servei:

$ service xl2tpd start

Finalment per tal de poder accedir al servidor VPN des de darrere un encaminador NAT podem afegir les següents regles (iptables en aquest exemple):

$ L2TP=ADREÇA_PUBLICA_DEL_ROUTER
$ INT_L2TP=ADREÇA_PRIVADA_DEL_SERVIDOR_VPN
$ iptables -t nat -A PREROUTING -d $L2TP -p udp --dport 500 -j DNAT --to-destination $INT_L2TP
$ iptables -t nat -A PREROUTING -d $L2TP -p udp --dport 4500 -j DNAT --to-destination $INT_L2TP
$ iptables -A FORWARD -d $INT_L2TP -p udp --dport 500 -j ACCEPT
$ iptables -A FORWARD -d $INT_L2TP -p udp --dport 4500 -j ACCEPT

NOTA: Debian Squeeze no configura el servei ipsec per tal que es posi en funcionament en el moment de l’arrencada de la màquina. Per solventar aquest inconvenient hi ha múltiple solucions. Una simple consisteix en afegir el següent a l’arxiu /etc/rc.local:

...
/etc/init.d/ipsec start
...
exit 0

OPCIONAL: Això vol dir que des d’aquest moment ja s’hauria de poder connectar un dispositiu iOS a la nova VPN. A continuació es detallen les dues comandes bàsiques per tal de donar accés més enllà del servidor VPN.

$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ iptables -t nat -A POSTROUTING -s 172.16.0.0/20 -j MASQUERADE

Connexió des d’un iOS:

Afegir una configuració VPN amb les següents dades:

Descripció: Camp lliure
Servidor: Adreça pública de l'encaminador de la xarxa
Compte: Camp lliure
RSA SecurID: OFF
Contrasenya: Preguntar cada cop (correspon, en aquest exemple, a AnotherGoodSecret)
Secret: AVeryGoodSecret
Enviar tot el tràfic: Opcional