Uvnitř kontejneru jako daemon ipsec použijeme openswan a jako server l2tp standardní xl2tpd z repozitářů:
apt-get install openswan xl2tpd
Dále nastavíme forwardování a zbytek síťové podsystemu pro správnou funkci s NAT a VPN:
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
Pojďme nastavit daemon ipsec.
Upravíme konfiguraci /etc/ipsec.conf do následující podoby:
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
Nejdůležitější části konfigurace jsou okomentovány. Také je třeba nezapomenout, že konfiguraci je třeba sestavit přesně tak, jak je uvedeno výše, tedy s zachováním mezer na začátku řádků u těch příkazů, které je mají, protože odsazení příkazu je daemonem vázáno na blok definovaný bez odsazeného „conn“.
Nyní nastavíme autorizaci pro práci s ipsec. Existují dva metody autorizace – podle certifikátu a podle klíče (PSK). V tomto příkladu nastavíme autorizaci podle klíče v souboru /etc/ipsec.secrets:
11.11.11.11 %any: PSK "mykey"
11.11.11.11 je externí IP adresa našeho serveru
%any je vestavěná proměnná označující jakoukoli IP adresu
PSK je metoda autorizace (může být RSA)
„mykey“ je tajný klíč pro autorizaci, který bude třeba předat klientovi.
Nyní je čas nastavit server l2tp. Bude fungovat přes protokol ppp.
Upravíme konfiguraci /etc/xl2tpd/xl2tpd.conf do následující podoby:
[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
V této konfiguraci jsou opět okomentovány všechny kritické části, zatímco ostatní jsou intuitivně srozumitelné. Při nastavování serveru je třeba komentáře z konfigurace odstranit.
Nastavíme soubor autorizace l2tp – /etc/xl2tpd/l2tp-secrets. V souboru povolíme připojení všem, protože náš l2tp funguje přes ppp, takže použijeme právě autorizaci ppp.
# Secrets for authenticating l2tp tunnels
# us them secret
# * marko blah2
# zeus marko blah
# * * interop
* * * # let all , because we use auth with ppp
Dále nastavíme konfiguraci ppp, kterou vyžaduje náš daemon l2tp (/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
V případě problémů se spojením nebo připojením pro ladění funkce l2tp stačí odkomentovat „#debug“ a podívat se do systémového logu /var/log/syslog, zda se nevyskytují chyby.
Nastavíme autorizaci v ppp (/etc/ppp/chap-secrets):
# Secrets for authentication using CHAP
# client server secret IP addresses
test2 l2tpd test *
Uživatelské jméno – test2
Server, pro který je tento pár platný pro autorizaci – l2tpd
Heslo – test
S tímto heslem se mohou připojovat klienti ze všech IP adres – *
Restartujeme oba služby:
/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart
Nyní zkontrolujeme správnost fungování modulů samotného ipsec uvnitř kontejneru:
ipsec verify
Výstup funkčního ipsec bude vypadat nějak takto:
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
Nyní nastavíme klienta ve Windows 7 pro připojení k našemu VPN l2tp s šifrováním pomocí ipsec.
