Debian L2TP (over IPSec) + iPhone + OSX = working

W końcu usiadłem do konfiguracji VPN’a, w końcu ja mam iPhone’a, moja żona też ma iPhone’a. W końcu nadchodzi taki moment, aby wszystkie urządzenia gadały między sobą w sposób nie widoczny dla innych.

Przygotowania:

Ciekawy i dość konkretny artykuł znalazłem na stronie Linux L2TP/IPSec with iPhone and Mac OS/X clients, jednak niestety okazało się, że nie wszystko jest tak jak bym chciał. Tak czy owak polecam artykuł, bo to co jest poniżej to wariacja na jego temat.

Wszystko do momentu pobierania źródeł Strongswan’a jest jak w wyżej załączonym linku, potem małe schody z budowaniem deb’a. Ale po kolei.

Do poprawnego działania strgonswan co prawda nie potrzebuje rekompilacji, ale w 80% przypadków będziemy ze swoim telefonem lub laptopem znajdowali się za NAT’em a tu niestety trzeba deko zaingerować w strongswan. Debian nie posiada wkompilowanej obsługi NAT’a.

Po kolei co trzeba zrobić (część poniższego jest kopią z zlinkowanej strony):

/etc/ipsec.conf

config setup
# crlcheckinterval=600
# strictcrlpolicy=yes
# cachecrls=yes
nat_traversal=yes
charonstart=yes
plutostart=yes
conn L2TP
authby=psk
pfs=no
rekey=no
type=tunnel
esp=aes128-sha1
ike=aes128-sha-modp1024
left=your.ip.goes.here
leftnexthop=%defaultroute
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
rightsubnetwithin=0.0.0.0/0
auto=add

/etc/ipsec.secrets

your.ip.goes.here %any: PSK "yoursharedkeygoeshere"

Teraz już zaczynamy deko wariować ;-)
Pierwsze to sprawdzenie czy w naszym /etc/apt/sources.list są wpisy deb-src, pozwalające na ściąganie źródeł pakietów.


apt-get install build-essential fakeroot dpkg-dev devscripts
apt-get source strongswan
apt-get install libcurl4-openssl-dev
apt-get build-dep strongswan
cd strongswan-4.2.4/
dch -i

Za pomocą ulubionego edytora tekstowego, otwieramy plik debian/rules


#!/usr/bin/make -f
# Sample debian/rules that uses debhelper.
# GNU copyright 1997 to 1999 by Joey Hess.

# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1

export DH_OPTIONS

# this is a security-critical package, set all the options we can
export DEB_BUILD_HARDENING=1

CONFIGUREARGS := --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
--libexecdir=/usr/lib \
--enable-ldap --enable-curl \
--enable-nonblocking --enable-thread \
--enable-smartcard --enable-cisco-quirks \
--with-default-pkcs11=/usr/lib/opensc-pkcs11.so \
--enable-mediation --enable-medsrv --enable-medcli \
--enable-openssl --enable-agent \
--enable-eap-radius --enable-eap-identity --enable-eap-md5 \
--enable-eap-gtc --enable-eap-aka --enable-eap-mschapv2 \
--enable-sql \
--disable-aes --disable-des --disable-fips-prf --disable-gmp \
--disable-md5 --disable-sha1 --disable-sha2 \
--enable-nm
(...)

Do CONFIGUREARGS odpisujemy –enable-nat-transport, w celu włączenia obsługi NAT’a


dpkg-buildpackage -rfakeroot -uc -b

Powyższa komenda zbuduje nam pakiet debiana, jednak u mnie problem pojawił się ze źródłami libnm-glib-vpn, nie wiedzieć dlaczego ale instalator ich nie widział a pakiet zainstalowany był.

Nie ma czym się przejmować, linux to linux – nie zawsze trzeba zrobić wszystko “ładnie” – czasem wystarczy, tak aby działało:


pkg-config --cflags libnm-glib-vpn

U mnie output był taki:

-pthread -I/usr/include/libnm-glib -I/usr/include/NetworkManager -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include

Jeżeli pośpieszyliście się z dpkg-buildpackage to pewnie dostaliście informacje (o ile też problem występuje u Was) o sposobie poradzenia sobie z problemem, ja zrobiłem to prosto:


nm_CFLAGS="-pthread -I/usr/include/libnm-glib -I/usr/include/NetworkManager -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include"
export nm_CFLAGS
nm_LIBS="/usr/include/NetworkManager/"
export nm_LIBS

następnie, znany już:


dpkg-buildpackage -rfakeroot -uc -b
cd ../
ls -l |grep .deb
-rw-r--r-- 1 root root 188328 09-18 11:57 libstrongswan_4.3.2-1.4_amd64.deb
-rw-r--r-- 1 root root 70366 09-18 11:56 strongswan_4.3.2-1.4_all.deb
-rw-r--r-- 1 root root 349814 09-18 11:57 strongswan-ikev1_4.3.2-1.4_amd64.deb
-rw-r--r-- 1 root root 256576 09-18 11:57 strongswan-ikev2_4.3.2-1.4_amd64.deb
-rw-r--r-- 1 root root 45092 09-18 11:57 strongswan-nm_4.3.2-1.4_amd64.deb
-rw-r--r-- 1 root root 291452 09-18 11:57 strongswan-starter_4.3.2-1.4_amd64.deb

Tak to wygląda u mnie, u Was powinno podobnie.

Następnie instalujemy za pomocą dpkg -i pliki_deb

Jak to już jest zainstalowane to pierwszy etap za nami, teraz konfiguracja i instalacja xl2tpd, tu jest deko łatwiej:


apt-get install xl2tpd

Konfigurujemy demona xl2tpd:
/etc/xl2tpd/xl2tpd.conf

[global]
debug network = yes
debug tunnel = yes

[lns default]
ip range = 172.16.1.100-172.16.1.254
local ip = 172.16.1.1
require chap = yes
refuse pap = yes
require authentication = yes
name = pretasoft.pl
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

Ustawiamy hasło globalne:
/etc/xl2tpd/l2tp-secrets

# Secrets for authenticating l2tp tunnels
# us them secret
# * marko blah2
# zeus marko blah
# * * interop
* * haslo_globalne *

Opcje xl2tpd dla połączeń ppp
/etc/ppp/options.xl2tpd

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

Plik chap z naszymi klientami VPN:
/etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client server secret IP addresses
client1 * haslo1 *
client2 * haslo2 *

Na samym końcu:


/etc/init.d/ipsec start
/etc/init.d/xl2tpd start

Taka konfiguracja u mnie działa i na iPhone’ach oraz OSX’ie.

Jak ktoś zauważył błąd to proszę o komentarze, powodzenia z VPN’em.

Leave a Reply

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