Unutar kontejnera, kao ipsec demon koristićemo openswan, a kao l2tp server standardni xl2tpd iz repozitorijuma:
apt-get install openswan xl2tpd
U nastavku ćemo podesiti forwardovanje i ostatak mrežnog podsystema za ispravno funkcionisanje sa NAT-om i VPN-om:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source <main IP of server>
iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT
iptables -A FORWARD -d 10.0.0.0/24 -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
for each in /proc/sys/net/ipv4/conf/*; do echo 0 > $each/accept_redirects; echo 0 > $each/send_redirects; done
Pristupimo podešavanju ipsec demona.
Dovedimo konfiguraciju /etc/ipsec.conf u sledeći oblik:
config setup
protostack=netkey
nat_traversal=yes # Enables NAT traversal
virtual_private=%v4:192.168.1.0/8 # with this option you can add your local IP in NAT
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret # Auth with PSK ( preshared key )
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
salifetime=10m
type=tunnel # type of l2tp connection ( tunnel / transport )
left=11.11.11.11 # left - is internet IP of l2tp server
leftprotoport=17/1701
right=%any # right - is IP of client ( if client NATed , that IP of client is IP in NAT )
rightprotoport=17/1701
Najvažniji delovi konfiguracije su komentarisani. Takođe, treba ne zaboraviti da sastavimo konfiguraciju tačno onako kako je navedeno gore, odnosno uz očuvanje razmaka na početku reda za one komande kojima su oni navedeni, jer se ugnježđavanje komandi vezuje za blok koji definiše neugnežđeno „conn“.
Sada ćemo podesiti autorizaciju za rad sa ipsec-om. Postoje dva metoda autorizacije — po sertifikatu i po ključu (PSK). U ovom primeru ćemo podesiti autorizaciju po ključu u fajlu /etc/ipsec.secrets:
11.11.11.11 %any: PSK "mykey"
11.11.11.11 — spoljni IP adresa našeg servera
%any — ugrađena promenljiva koja označava bilo koju IP adresu
PSK — metod autorizacije (može biti RSA)
„mykey“ — tajni ključ za autorizaciju, koji će biti potrebno proslediti klijentu.
Sada je došlo vreme da podesimo l2tp server. On će raditi preko protokola ppp.
Dovedimo konfiguraciju /etc/xl2tpd/xl2tpd.conf u sledeći oblik:
[global]
port = 1701
auth file = /etc/xl2tpd/l2tp-secrets # auth file with pars login/password for l2tp auth
[lns default]
ip range = 10.0.0.2-10.0.0.200 # range of IP's , that give to clients when auth is good
local ip = 10.0.0.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = no # debug mode
pppoptfile = /etc/ppp/options.xl2tpd # this is ppp options config file
length bit = yes
exclusive = no
assign ip = yes
name = VPN-Server
I u ovoj konfiguraciji, opet, svi kritični delovi su komentarisani, a ostali su intuitivno jasni. Prilikom podešavanja servera, komentari iz konfiguracije treba ukloniti.
Podešavamo fajl za autorizaciju l2tp-a — /etc/xl2tpd/l2tp-secrets. U fajlu ćemo dozvoliti povezivanje svima, s obzirom na to da l2tp radi preko ppp-a, koristićemo ppp autorizaciju.
# Secrets for authenticating l2tp tunnels
# us them secret
# * marko blah2
# zeus marko blah
# * * interop
* * * # let all , because we use auth with ppp
U nastavku podešavamo konfiguraciju ppp-a, koju zahteva naš l2tp demon (/etc/ppp/options.xl2tpd):
refuse-mschap-v2
refuse-mschap
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
idle 1800
mtu 1200
mru 1200
lock
hide-password
local
#debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
U slučaju problema sa vezom ili povezivanjem, za debagovanje rada l2tp-a jednostavno odkomentarišite „#debug“ i proverite sistemski log /var/log/syslog za prisustvo grešaka.
Podešavamo autorizaciju u ppp-u (/etc/ppp/chap-secrets):
# Secrets for authentication using CHAP
# client server secret IP addresses
test2 l2tpd test *
Korisničko ime — test2
Server za koji je ova kombinacija validna za autorizaciju — l2tpd
Lozinka — test
Klijenti sa svih IP adresa mogu da se povežu sa ovom lozinkom — *
Restartujemo oba servisa:
/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart
Sada ćemo proveriti ispravnost rada modula samog ipsec-a unutar kontejnera:
ipsec verify
Izlaz ispravnog ipsec-a će biti nešto slično ovome:
root@XXX:~# ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.6.37-g955aaafb-dirty/K2.6.32-042stab084.10 (netkey)
Checking for IPsec support in kernel [OK]
SAref kernel support [N/A]
NETKEY: Testing XFRM related proc values [OK]
[OK]
[OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for NAT-T on udp 4500 [OK]
Checking for 'ip' command [OK]
Checking /bin/sh is not /bin/dash [WARNING]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support
Sada ćemo podesiti Windows 7 klijent za povezivanje na naš VPN l2tp sa enkripcijom putem ipsec-a.
