Wewnątrz kontenera jako demon ipsec będziemy używać openswan, a jako serwer l2tp standardowy xl2tpd z repozytoriów:
apt-get install openswan xl2tpd
Następnie skonfigurujemy forwardowanie oraz resztę podsystemu sieciowego, aby zapewnić poprawne działanie z NAT i 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
Przystąpmy do konfiguracji demona ipsec.
Sprowadźmy konfigurację /etc/ipsec.conf do postaci:
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
Najważniejsze elementy konfiguracji zostały skomentowane. Należy również pamiętać, aby utworzyć konfigurację dokładnie w sposób opisany powyżej, czyli z zachowaniem spacji na początku linii dla tych poleceń, które je zawierają, ponieważ wcięcie polecenia jest wiązane przez demona z blokiem definiowanym przez niewcięte „conn”.
Teraz ustawimy autoryzację do pracy z ipsec. Istnieją dwie metody autoryzacji — certyfikatowa oraz kluczem (PSK). W tym przykładzie skonfigurujemy autoryzację kluczem w pliku /etc/ipsec.secrets:
11.11.11.11 %any: PSK "mykey"
11.11.11.11 — to zewnętrzny adres IP naszego serwera
%any — to wbudowana zmienna oznaczająca dowolny adres IP
PSK — metoda autoryzacji (może być RSA)
„mykey” — tajny klucz do autoryzacji, który należy przekazać klientowi.
Teraz nadszedł czas na konfigurację serwera l2tp. Będzie on działać przez protokół ppp.
Sprowadźmy konfigurację /etc/xl2tpd/xl2tpd.conf do postaci:
[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
W tej konfiguracji, podobnie jak wcześniej, wszystkie krytyczne miejsca są skomentowane, a pozostałe są intuicyjnie zrozumiałe. Podczas konfiguracji serwera komentarze z konfiguracji należy usunąć.
Konfigurujemy plik autoryzacji l2tp — /etc/xl2tpd/l2tp-secrets. W pliku pozwalamy na połączenie wszystkim, ponieważ nasz l2tp działa przez ppp, więc użyjemy właśnie autoryzacji ppp.
# Secrets for authenticating l2tp tunnels
# us them secret
# * marko blah2
# zeus marko blah
# * * interop
* * * # let all , because we use auth with ppp
Następnie konfigurujemy plik konfiguracyjny ppp, który jest żądany przez naszego demona 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
W przypadku problemów z łącznością lub połączeniem, w celu debugowania działania l2tp, wystarczy odkomentować „#debug” i sprawdzić dziennik systemowy /var/log/syslog pod kątem błędów.
Konfigurujemy autoryzację w ppp (/etc/ppp/chap-secrets):
# Secrets for authentication using CHAP
# client server secret IP addresses
test2 l2tpd test *
Login — test2
Serwer, dla którego ta para jest ważna do autoryzacji — l2tpd
Hasło — test
Z tym hasłem mogą łączyć się klienci ze wszystkich adresów IP — *
Restartujemy oba serwisy:
/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart
Teraz sprawdźmy poprawność działania modułów samego ipsec wewnątrz kontenera:
ipsec verify
poprawnie działający ipsec zwróci coś w rodzaju:
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
Teraz skonfigurujmy klienta Windows 7 do łączenia się z naszym VPN l2tp z szyfrowaniem ipsec.
