Warning: Memcache::addserver() expects parameter 2 to be long, string given in /usr/home/rpc/domains/rpc.one.pl/public_html/libraries/joomla/cache/storage/memcache.php on line 84 l2tp czyli VPN zestawiony na podstawie xl2tpd + ipsec racoon na certyfikatach
 
 
l2tp czyli VPN zestawiony na podstawie xl2tpd + ipsec racoon na certyfikatach Drukuj Email
Wpisany przez rpc   
poniedziałek, 02 listopada 2009 11:11

l2tp czyli VPN zestawiony na podstawie xl2tpd + ipsec racoon na certyfikatach x509

 

Jako, że windows wspiera natywnie protokół tunelowania l2tp postanowiłem przedstawić opis dotyczący zestawienia tunelu szyfrowanego za pomocą tenże protokołu l2tp przy użyciu programu xl2tpd po stronie serwera linux Debian lenny oraz clientów windows i client linux. Całe łącze będzie szyfrowane za pomocą ipsec wykorzystując Racoon po stronie linux i windows. Wszystko to opierać będzie się na certyfikatach x509.

Ja konfiguracje oparłem o Debiana ale myśle, że nie będzie problemu na każdym innym linuxie.

 

Założenia

Adres publiczny WAN IP Routera Debian Lenny                    : 218.97.26.22

Adres i maska sieci LAN Routera Debian Lenny                  : 192.168.1.0/24

Adres ip dns i wins w naszej sieci LAN                                   : 192.168.1.1

Adres Publiczny clienta VPN l2tp                                               : 0.0.0.0/0 - adres nieznany

(0.0.0.0)Windows <=============> (218.97.26.22)Debian(192.168.1.0/24)

 

Nazwa DNS od strony Debian: l2tp.vpn.dyndns.org

Nazwa DNS od strony clienta : laptop.vpn.dyndns.org

Najlepiej aby były to adresy dns.

 

Szyfrowanie przy wykorzystaniu certyfikatów x509 w trybie transportowym ipsec

 

Aby nie było problemów z komunikacją z za nat dla clienta windows został użyty protokuł vpn traversal_nat, który potrafi przebić się z za routerów natujących. Aby było to możliwe przeważnie trzeba zostawić załączone opcje np. w asmax BR-604G:

Enable IPsec pass through on VPN connection
Enable L2TP pass through on VPN connection

 

Instalacja

Instalujemy pakiety xl2tpd i racoon

apt-get install xl2tpd racoon openssl

 

Konfiguracja po stronie Debian Lenny pakietu xl2tdp

Pliki konfiguracyjne są umiesczone w następujących katalogach

/etc/xl2tpd/xl2tpd.conf

/etc/xl2tpd/l2tp-secrets

/etc/ppp/options.xl2tpd

/etc/ppp/chap-secrets

 

Zawartość pliku /etc/xl2tpd/xl2tpd.conf:

[global]                                                               
port = 1701                                                    
;
[lns default]                                                  
ip range = 192.168.222.10-192.168.222.100     
local ip = 192.168.222.1                              
length bit = yes                                               
require chap = yes                                     
refuse pap = yes                                               
require authentication = yes                   
name = VPN l2tp for Formaplan                          
ppp debug = yes                                       
pppoptfile = /etc/ppp/options.xl2tpd  

 

Adresy ip 192.168.222. są potrzebne do zestawienia połączenia ppp gdzie:

192.168.222.1 - jest to adres ip na serwerze, który zostanie utworzony w czasie startu xl2tpd- może to być interfjes ppp0

192.168.222.10-192.168.222.100 - zakres adresów przydzielany clientom

Adresy muszą być inne jak te które wykorzystujemy we własnej sieci tak aby nie było kolizji.

 

Zawartość pliku /etc/xl2tpd/l2tp-secrets:

Tego pliku nie wykorzustujemy

 

Zawartość pliku /etc/ppp/options.xl2tpd:

auth
idle 1800
mtu 1460
mru 1460
debug
proxyarp
+mschap-v2
ms-dns 192.168.1.1
ms-wins 192.168.1.1
logfd 2
logfile /var/log/xl2tpd.log
ipcp-accept-local
ipcp-accept-remote
#noccp
nodefaultroute
lock
crtscts
connect-delay 5000

 

Zawartość pliku /etc/ppp/chap-secrets:

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
username_vpn        *       password_vpn  192.168.222.10

 

Troszkę wyjaśnienia w/w wpisu

Otóż adres ip przy wpisie danego usera oznacza, że ten user zawsze będzie dostawał adres ip 192.168.222.10

Przyda się do kontroli reguł firewalla

Jeśli nie chcemy konkretnych ip możemy wpisać gwiazdkę zamiast adresu ip. i wtedy wiersz będzie wyglądał następująco:

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
username_vpn        *       password_vpn  *

 

Hasło podajemy otwartym tekstem.

Jeśli wykorzystujemy Domenę to hasło winno wyglądac wedle shematu:

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
DOMENA\username_vpn        *       password_vpn  *

 

 

Konfiguracja firewalla na Debian Lenny:

Potrzebujemy uzupełnić firewall o następujące reguły:

iptables -I INPUT -m policy --dir in --pol ipsec -p udp --dport 1701 -j ACCEPT

iptables -I FORWARD -i ppp+ -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD -i ppp+ --src 192.168.222.10 -j ACCEPT
iptables -I INPUT -i ppp+ -p tcp --dport 53 -j ACCEPT
iptables -I INPUT -i ppp+ -p udp --dport 53 -j ACCEPT

 

Teraz nasz client o adresie ip. 192.168.222.10 będzie miał dostęp do naszej sieci LAN po vpn.

Jeśli chcemy puścić wszystkie komputery do LAn możemy wykorzystać regułkę:

iptables -I FORWARD -i ppp+ --src 192.168.222.0/24 -j ACCEPT

 

 

Konfiguracja Racoon na Debian Lenny:

 

Plik konfiguracyjny /etc/racoon/racoon.conf winien wyglądać następująco:

path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";


log info;
listen
{
isakmp 218.97.26.22 [500];
isakmp_natt 218.97.26.22 [4500];
strict_address;
}

timer
{
natt_keepalive 10sec;
}
remote anonymous {
exchange_mode main;
doi ipsec_doi;
generate_policy on;
situation_identity_only;
lifetime time 28800 sec;
my_identifier asn1dn;
peers_identifier asn1dn;
verify_identifier on;
verify_cert on;
ca_type x509 "/etc/ssl/cacert.pem";
certificate_type x509 "218.97.26.22_publickey.rsa" "218.97.26.22_privatekey.rsa";
passive on;
initial_contact off;
nat_traversal on;
#ike_frag=on;
proposal_check obey;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method rsasig;
dh_group 2;
}
}

sainfo anonymous {
pfs_group 2;
lifetime time 3600 sec;
encryption_algorithm aes,3des ;
authentication_algorithm hmac_sha1,hmac_md5 ;
compression_algorithm deflate;
}

 

Plik /etc/ipsec-tools.conf winien wyglądać:

spdadd 218.97.26.22[1701] 0.0.0.0/0 udp -P out ipsec
esp/transport//require;
spdadd 0.0.0.0/0
218.97.26.22[1701] udp -P in ipsec
esp/transport//require;

 

Więcej o wierszu peers_identifier asn1dn; zobacz na końcu artykułu.

 

Do katalogu /etc/racoon/certs wrzucamy nasz certyfikat publiczny i prywatny serwera patrz artykuł generowanie certyfikatów

Przypominam tylko, iż w czasie generowania certyfikatów powstają nam pliki:

newcert.pem  - certyfikat publiczny  - czyli to to samo co wyżej 218.97.26.22_publickey.rsa
newkey.pem   - klucz prywatny certyfikatu - czyli to to samo co wyżej 218.97.26.22_privatekey.rsa
newreq.pem   - request
to nasze wygenerowane pliki certyfikatu

 

Jeśli chcemy mieć weryfikację certyfikatów poprzez listy crl (zakładam że CA już masz) wykonujemy w katalogu

/usr/lib/ssl/misc

openssl ca -gencrl -out demoCA/crl/crl.pem
openssl crl -in demoCA/crl/crl.pem -outform der -out demoCA/crl/cert.crl

oraz ca to musimy zrobić linki symboliczne z utworzonych plików do :

# ln -s /usr/lib/ssl/misc/demoCA/crl/crl.pem `openssl x509 -hash -noout -in /usr/lib/ssl/misc/demoCA/cacert.pem`.r0
#ln -s /usr/lib/ssl/misc/demoCA/cacert.pem `openssl x509 -hash -noout -in /usr/lib/ssl/misc/demoCA/cacert.pem`.0

 

Od strony Debian lenny to już wszystko. Już nic więcej nie musimy robić.

 

jakby były jakieś problemy z certyfikatami obejrzyj sobie przykładowe wygenerowane przeze mnie certyfikaty Punkt.9

 

 



 

 

Konfiguracja clienta l2tp+ipsec dla linux jest opisana przeze mnie dla OpenWrt. Jednak Pliki konfiguracyjne powinny być identyczne dla Debiana. Trzeba przepisać tylko na iptables firewala bo jest przedstawione jak dla OpenWrt:

#vpn zezwolenie
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -j ACCEPT
iptables -A INPUT -p ah -j ACCEPT
iptables -A INPUT -p ipcomp -j ACCEPT

iptables -I INPUT -m policy --dir in --pol ipsec -p udp --dport 1701 -j ACCEPT

iptables -I FORWARD -i ppp+ -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD -i ppp+ --src 192.168.222.1 -j ACCEPT

/sbin/iptables -t nat -A POSTROUTING -p esp -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -p ah -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -p ipcomp -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


l2tp czyli VPN zestawiony na podstawie xl2tpd + ipsec racoon na certyfikatach - OpenWrt 8.09.1

 



 

Konfiguracja clientów windows

Masz tu odpowiednie filmy jak to skonfigurować:

Windows XP Sp3 - AVI - youtube

Dim lights Embed Embed this video on your site

 

Windows Vista Sp2 - AVI - youtube

Dim lights Embed Embed this video on your site

 

Windows 7 RC - AVI - youtube

Dim lights Embed Embed this video on your site

 

Jeszcze mała uwaga. Plik "newcert pkcs12.p12" użyty w filmie to tak naprawdę plik newcert.p12 wygenerowany komendą ./CA.pl -pkcs12 patrz opis generowania certyfikatów punkt.3. W pliku tym oprócz certyfikatu prywatnego jest umieszczony również certyfikat Głównego Urzędu Certyfikacji ROOT CA. Jeżeli nie masz w jednym pliku certyfikatu CA musisz go zaimportować do zakładki Główny Urząd Certyfikacji w mmc.exe.

 

Do komunikacji możesz wykorzstać dowolny certyfikat( komputera,imienny). Byle był podpisany przez ten sam Główny Urząd Certyfikacji ROOT CA.



Podziel się tą informacja z innymi:
Poprawiony: środa, 30 grudnia 2009 07:38