Konfiguracja klienta VPN l2tp+ipsec na Raspberry Pi z Raspbianem(Debian)

Konfigurację zaczynamy od zainstalowania niezbędnych pakietów

sudo apt-get update
sudo apt-get install -y strongswan xl2tpd

 

teraz edytujemy pliki konfiguracyjne, zrobimy to przy pomocy edytora „nano”

Zapis pliku i zamykanie edytora Nano
ctrl+x
Y lub T w zależności od języka
Enter

sudo nano /etc/ipsec.conf

# ipsec.conf – strongSwan IPsec configuration file

# basic configuration

config setup
# strictcrlpolicy=yes
# uniqueids = no

# Add connections here.

# Sample VPN connections

conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev1
authby=secret
ike=aes128-sha1-modp1024,3des-sha1-modp1024!
esp=aes128-sha1-modp1024,3des-sha1-modp1024!

conn Note8
keyexchange=ikev1
left=%defaultroute
auto=add
authby=secret
type=transport
leftprotoport=17/1701
rightprotoport=17/1701
# adres ip ponizej to adres serwera do ktorego sie laczymy
right=212.46.25.91
#KONIEC PLIKU

 

sudo nano /etc/ipsec.secrets
: PSK „TUTAJ_KLUCZ_PSK”
#klucz psk w cudzysłowach, klucz ma byc taki jak na serwerze
#KONIEC PLIKU

 

sudo nano /etc/xl2tpd/xl2tpd.conf
[lac NAZWA_POLACZENIA]
lns = 212.46.25.91
length bit = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.client
#KONIEC PLIKU

NAZWA_POLACZENIA  (u mnie jest Note8) – nie jest to nazwa użytkownika l2tp, tylko nazwa polaczenia po ktorej bedziemy wywolywac polaczenie
# adres ip (lns) to adres serwera do ktorego sie laczymy, taki sam jak w pliku ipsec.conf

 

 

sudo nano /etc/xl2tpd/l2tp-secrets

# Secrets for authenticating l2tp tunnels
# us them secret
# * marko blah2
# zeus marko blah
# * * interop
* Note8 gx478gT67d
#KONIEC PLIKU

 

sudo nano /etc/ppp/options.l2tpd.client
ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-mschap-v2
noccp
noauth
idle 1800
mtu 1410
mru 1410
defaultroute
usepeerdns
debug
#lock
connect-delay 5000
#uzytkownik i haslo do polaczenia l2pt
name Note8
password gT76L67hj
#KONIEC PLIKU

pola name i password to nazwa i hasło do połączenia z serwerem, musimy je otrzymać od operatora lub jeżeli sami „stawiamy serwer”, definiujemy je na serwerze.

 

tworzymy katalog i plik
sudo mkdir -p /var/run/xl2tpd
sudo touch /var/run/xl2tpd/l2tp-control

 

pliki startujace i zatrzymujace polaczenia
pliki mozna stworzyć w naszym katalogu domowym /home/pi (przyklad raspberry pi)

polecenie touch w linuxie tworzy plik, jednak edytor nano stworzy nam nowy plik jeśli taki nie istnieje, dlatego w zasadzie możemy pominąć polecenie touch
sudo touch vpnstart.sh
sudo nano vpnstart.sh

#!/bin/bash
ipsec up Note8
sudo echo „c Note8” > /var/run/xl2tpd/l2tp-control
#KONIEC PLIKU

sudo touch vpnstop.sh
sudo nano vpnstop.sh

!/bin/bash/
sudo echo „d Note8” > /var/run/xl2tpd/l2tp-control
ipsec down Note8
#KONIEC PLIKU

 

Note 8 to moja nazwa połączenia, zamień ją na swoją.

 

 

restartujemy usługi
service strongswan restart
service xl2tpd restart

 

połączenie wywołujemy sudo ./vpnstart.sh
zatrzymujemy sudo ./vpnstop.sh

 

 

Autostart VPN podczas startu systemu

 

odnajdź plik /etc/rc.local

przed „exit 0”

dopisz:

ipsec up Note8
echo „c Note8” > /var/run/xl2tpd/l2tp-control

 

„Note8” zmień na swoją nazwę połączenia.

 

 

Reconnect, czyli połączenie po rozłączeniu

w pliku /etc/xl2tpd/xl2tpd.conf dopisz po [lac Note8]

redial = yes
redial timeout = 60
max redials = 100

Następnie restartujemy usługi
service strongswan restart
service xl2tpd restart

 

Problem z bramą domyślną.

W zasadzie już mamy gotowe połączenie VPN ale jeszcze pozostaje problem z routingiem. Standardowo w systemie występuje tylko jedna brama domyślna. Dlatego aby zapewnić prawidłową komunikację przez nasze połączenie VPN powinniśmy dodać bramę dla tego połączenia.

Do rozwiązania tego problemu może zostać wykorzystany program iproute2,
który zawarty jest we wszystkich nowoczesnych dystrybucjach Linuksa i jest z reguły już zainstalowany.
Normalnie system Linux ma tablice tras, w której może być zapisany tylko jeden default gateway.
Iproute2 umożliwia założenie dodatkowych tablic i pozwala na ich wykorzystanie przez system według innych reguł.

Punkt wyjścia
Załóżmy, że mamy dwa interfejsy, eth0 i eth1.
Obie sieci, które mają być wykorzystywane to 192.168.0.0/24 i 10.10.0.0/24, zawsze .1 ma być gateway danej sieci.

auto lo
iface lo inet loopback

# The primary network interface

allow-hotplug eth0
iface eth0 inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1

# The secondary network interface
allow-hotplug eth1
iface eth1 inet static
address 10.10.0.10
netmask 255.255.255.0

Dodanie drugiej tablicy tras
Aby dodać drugą tablicę tras należy edytować plik /etc/iproute2/rt_tables.
W tym przykładzie nazwiemy tablicę tras „rt2” i nadamy referencję 1.

Wspomniany plik powinien wyglądać następująco:

#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
1 rt2

Konfiguracja nowej tablicy tras
Do osiągnięcia celu brakuje teraz jedynie 4 poleceń.
Jako pierwsze powinna zostać wypełniona nowa tablica, co może zostać przeprowadzone następującym poleceniem:

ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2
ip route add default via 10.10.0.1 dev eth1 table rt2

Pierwszym poleceniem ustala się, że sieć 10.10.0.0/24 dostępna jest przez interfejs eth1, drugie polecenie ustala default gateway.

Reguły routingu
Aby system wiedział, że ma wykorzystywać nowa tablicę tras muszą zostać skonfigurowane 2 reguły:

ip rule add from 10.10.0.10/32 table rt2
ip rule add to 10.10.0.10/32 table rt2

Przez to ustalane jest, że zarówno ruch z IP 10.10.0.10 jak i ruch, który przebiega z/do IP 10.10.0.10 ma korzystać z tablicy tras rt2.

Uczynienie konfiguracji trwałą
Polecenia „ip rule” i „ip route” nie są aktualne po restarcie, dlatego powinien zostać napisany skrypt (np. /etc/rc.local),
który zostanie podczas uruchamiania wykonany.

W Debianie to polecenie może zostać dodane w /etc/network/interfaces, co wygląda następująco:

iface eth1 inet static
address 10.10.0.10
netmask 255.255.255.0
post-up ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2
post-up ip route add default via 10.10.0.1 dev eth1 table rt2
post-up ip rule add from 10.10.0.10/32 table rt2
post-up ip rule add to 10.10.0.10/32 table rt2

Więcej niż 2 karty sieciowe / gateway
Jeżeli jest dostępnych więcej kart sieciowych niż 2, to dla każdej następnej może zostać utworzona nowa tablica tras,
analogicznie do przedstawionego przykładu.

Kontrola konfiguracji
Dla upewnienia się, że zarówno reguły jak i wpisy w tablicy są poprawnie stosowane, można wykorzystać następujące polecenie:

ip route list table rt2
ip rule show

 

 

Jeżeli ktoś nie zrozumiał tego co chciałem przekazać w tym tekście, w moim downloadzie znajdują się pliki konfiguracyjne „żywcem zerżnięte” z jednej z moich działających maszyn. Oczywiście adresy i hasła zmienione :)

/download/pliki-konfiguracyjne-vpn-l2tpips ec-client/

 

POWODZENIA