Статията има за цел да помогне на тези хора които ползват 
 Linux ядро 2.6.x и искат да изградят VPN сървър ползвайки 
 софтуер различен от стандартния IPSec модул включен в ядрата 
 2.6.x . Понеже новата версия на FreeSwan 2.06 е премахнала 
 опцията transport като тип на връзката и няма възможност за 
 поддръжка на L2TP (по ранните версии на FreeSwan не се подържат 
 от 2.6.x ядра) , инструмента към който се насочих е 
 OpenSwan . 
 
 Инструменти който ви трябват са:
 Openswan 2.1.2
 OpenSSL 0.9.7
 l2tpd 0.69
 
 Инструментите са тествани на Debian 3.0r2 unstable с ядро 
 2.6.7 
 
 Забележка:
 Предполага се , че сте се занимавали с Linux и можете да 
 компилирате и инсталирате ядро!
 
 Сценарият е следния: 
 
 Работите като Системен Администратор в частна фирма мрежата 
 на която се състои от 40-50 компютъра и един сървър примерно 
 който служи за gateway и firewall, и шефът ви иска 
 работниците в извън работно време независимо от това къде се 
 намират да могат да достъпват по някакъв начин вътрешната 
 мрежа на фирмата. 
 
 1.Настройка на ядрото:
 Ядрото трябва да е компилирано с поддръжка на IPSec,ESP,AH,PF_KEY и 
 PPP 
 
 CONFIG_NET_KEY=y
 CONFIG_INET_AH=y
 CONFIG_INET_ESP=y
 CONFIG_XFRM_USER=y
 CONFIG_PPP=y
 CONFIG_PPP_MULTILINK=y
 CONFIG_PPP_FILTER=y
 CONFIG_PPP_ASYNC=y
 CONFIG_PPP_SYNC_TTY=y
 CONFIG_PPP_DEFLATE=y
 CONFIG_PPP_BSDCOMP=y
 
 Инсталирате opeswan,openswan-modules-source:
 apt-get install openswan openswan-modules-source
 (важи само за Debian), след което отивате в 
 директория /usr/src/kernel-patches/all/openswan и прилагате 
 поправката в ядрото:
 
 make kpatch
 
 след което компилирате и инсталирате ядрото. 
 
 2. Генериране на X509 Сертификати.
 Първо защо ползвам сертификати а не preshared keys , защото 
 се предполага , че клиентите които ще ползват VPN сървъра ще 
 са с операционна система Windows, но Windows 2000 не подържа 
 preshared keys, също така недостатъка поне според сценария 
 който съм описал, ако се ползват preshared keys трябва и да 
 се опише ip address от който ще се свърже клиента, а това 
 противоречи на сценария "Да ползват сървъра независимо от 
 това каде са". 
 
 Инсталиране на OpenSSL за Debian:
 apt-get install openssl libssl0.9.7 libssl-dev .
 Инструментите CA.pl CA.sh с които ще се генерират 
 сертификатите се намират в /usr/lib/ssl/misc  
 
 Конфигурация на OpenSSL.
 За конкретният случай има само едно нещо което трябва да се 
 включи в конфигурационния файл на OpenSSL и това е
 unique_subject = no
 
 Следва генериране на CA Trust Certificate и CA private key
 cd /usr/lib/ssl/misc
 ./CA.sh -newca
 
 След което ще бъдете подканени да въведете парола за частният 
 ключ и информация за него . В следствие на горната команда ще 
 бъде създадена директория demoCA (ако не сте я променили 
 изрично в openssl.cnf) Частният ключ по подразбиране е 
 cakey.pem и седи 
 в /usr/lib/ssl/misc/demoCA/private/cakey.pem, 
 a CA Trust Certificate седи по подразбиране 
 в /usr/lib/ssl/misc/demoCA/cacert.pem 
 
 Следва генериране на private key за OpenSwan:
 /usr/lib/ssl/misc/CA.sh -newreq
 в следствие на което , ще се създаде файл с име newreq.pem . 
 Следва самоподписване:
 /usr/lib/ssl/misc/CA.sh -sign
 в следствие на което ще бъдете запитани дали да се подпише 
 сертификата отговаряте с "y".
 Забележка:
 При всеки подпис ще бъдете подканвани да въведете паролата на 
 CA private key тоест cakey.pem който генерирахме. 
 
 Следва създаване на сертификат за самия клиент който става по 
 същият начин както и за OpenSwan.
 
Създаваме и CRL(Certifikate Revokation List)
 openssl ca -config /etc/ssl/openssl.cnf -genrcl -out crl.pem
 Копирате създаденият CRL файл в /etc/ipsec.d/crls.
 За да отмените сертификат
 openssl ca -revoke /etc/ipsec.d/client-cert.pem
 Using configuration from /usr/lib/ssl/openssl.cnf
 Enter pass phrase for /usr/lib/ssl/misc/asCA/private/CAkey.pem:
 DEBUG[load_index]: unique_subject = "no"
 Revoking Certificate 02.
 Data Base Updated
 
 
 Преди да генерирате клиентският сертификат преименувайте 
 newreq.pem и newcert.pem на нещо значимо за вас примерно:
 mv newcert.pem openswan-cert.pem
 mv newreq.pem openswan-priv.pem
 
 Важно:
 newreq.pem е частният ключ , а newcert.pem е подписаният 
 сертификат. 
 
 След като преименувахме сертификата за Openswan правим 
 същото и с клиентският сертификат.
 mv newreq.pem client-priv.pem
 mv newcert.pem client.priv.pem
 
 И копираме сертификатите на техните места:
 cp demoCA/cacert.pem /etc/ipsec.d/cacerts/
 cp openswan-priv.pem /etc/ipsec.d/private/
 cp client-priv.pem /etc/ipses.d/private/
 cp openswan-cert.pem /etc/ipsec.d/
 cp client-cert.pem /etc/ipsec.d/
 
 Понеже PKCS12 е най масово използван формат за съхранение на 
 потребителски сертификати тук ще изгенерираме такъв 
 сертификат който ще се даде на потребителят използващ VPN 
 сървъра. 
 
 Генериране на PKCS12.
 openssl pkcs12 -export -in /etc/ipsec.d/client-cert.pem \
 
 -inkey /etc/ipsec.d/private/client-priv.pem \
 -certfile /usr/lib/ssl/misc/demoCA/cacert.pem 
 -out /etc/ipsec.d/client.p12
 
 Сертификата се дава на клиента в този формат и паролта с 
 която е заключен самият client.p12 
 
 3. Конфигуриране на OpenSwan
 Конфигурационният файл се намира в директория /etc , а самият 
 файл се казва ipsec.conf 
 
 Конфигурация: 
 
 version 2.0
 config setup
          interfaces=%defaultroute
          klipsdebug=all
          plutodebug=dns
          uniqueids=no
 
 conn %default
         keyingtries=1
         compress=yes
         disablearrivalcheck=yes
         authby=rsasig
         leftrsasigkey=%cert
         rightrsasigkey=%cert
         leftcert=/etc/ipsec.d/freeswan-cert.pem
         left=%defaultroute
 
 conn l2tp
         type=transport
         pfs=no
         leftprotoport=udp/0
         rightprotoport=udp/1701
         right=%any
         auto=add
 
 conn block
        auto=ignore
 conn clear
        auto=ignore
 conn private
        auto=ignore
 conn private-or-clear
        auto=ignore
 conn clear-or-private
        auto=ignore
 conn packetdefault
        auto=ignore
 
 include /etc/ipsec.d/examples/no_oe.conf
 
 Добавяме следният ред в /etc/ipsec.secrets
 
  : RSA openswan-priv.pem "password"
    където password е паролата на ключа
 
 4. Конфигурация на l2tpd за Debian
 Инсталираме l2tpd посредством
 apt-get install l2tpd
 
 и редактираме файла /etc/l2tpd/l2tpd.conf
 [global]
 port = 1701 # Порта на който слуша самия демон
 listen-addr = x.z.y.u # Адреса на самия gateway
 
 [lns default]
 ip range = 192.168.7.2 - 192.168.7.245 # range от адреси, който ще бъдат присвоявани на клиентите
 
 local ip = 192.168.7.1 #  Локалният адрес на l2tpd
 require chap = yes     # Задължителна CHAP автентичност
 refuse pap = yes       # Отхвърляне на PAP
 require authentication = yes # Задължително удостоверяване
 hostname = some.example.com # хост на сървъра
 ppp debug = yes
 pppoptfile = /etc/ppp/options.l2tpd # Файл с опции
 length bit = yes
 
 След това създавате файла /etc/ppp/options.l2tpd
 
 ipcp-accept-local
 ipcp-accept-remote
 ms-dns  192.168.1.12
 ms-wins 192.168.1.15
 auth
 crtscts
 idle 1800
 mtu 1400
 mru 1400
 nodefaultroute
 nodetach
 debug
 lock
 connect-delay 5000
 
 Сървърът е готов за ползване.
 Препоръчително е за клиентската част да се използва 
 SSHSentinel за Windows2000 за WindowsXP версията на 
 SSHSentinel трябва да е 1.3 или по висока.