Hirdetés

Virtuális Magán Hálózat (VPN) szerver IPSec IKEv2 Strongswan alapokon

Nemrégen írtam egy bejegyzést VPN szerver készítésről OpenWRT vagy LEDE alatt. Akkor az Openvpn megoldását használtam. Most pedig egy IPSec alapú VPN szerver konfigurálási lépéseit szeretném megmutatni Openwrt routeren (de ez akár alkalmazható LEDE rendszerű routereken is) StrongSwan szerver programmal, IKEv2 (Internet Key Exchange Version 2) tunneling protokollal.

Nemrég ismerkedtem meg én is ezzel a VPN megoldással, így a szerver bekonfigurálásának szinte nulla ismerettel álltam neki. Még mindig vannak vakfoltok a dolgot illetően számomra is, így ha rendelkezel nagyobb tapasztalattal, várom kommentben a te konfigurációd leírását is.

A VPN hálózatom felépítése:

A cél, hogy a telefonnal be tudjak jelentkezni a StrongSwan klienssel a belső hálózatba, mintha közvetlen oda kapcsolódnék, az internetet böngészve is úgy látszódjon, hogy onnan netezem (természetesen, valójában mobilnetet használok),

I. A szükséges csomagok letöltése

- Az ábrán is látható Tplink routerre SSH segítségével kell bejelentkezni. (Nálam ez az 192.168.1.250-es LAN címmel történik)
- Frissítsük a csomag adatbázist a szokásos update paranccsal, majd jöhetnek a csomagok

Hirdetés

opkg update
opkg install strongswan-full openssl-util

A csomagok elég sok helyet foglalnak a routeren, így szükség lehet az Openwrt-t egy külső meghajtóra (pl pendrive vagy USB HDD, SSD stb) telepíteni

II. A certifikációs fájlok elkészítése

cd /etc/
ipsec pki --gen --type rsa --size 4096 --outform der > ipsec.d/private/strongswanKey.der
chmod 600 ipsec.d/private/strongswanKey.der

ipsec pki --self --ca --lifetime 3650 --in ipsec.d/private/strongswanKey.der --type rsa --dn "C=CN, O=Btz Company, CN=Btz Root CA" --outform der > ipsec.d/cacerts/strongswanCert.der
openssl x509 -inform DER -in ipsec.d/cacerts/strongswanCert.der -out ipsec.d/cacerts/strongswanCert.pem -outform PEM

ipsec pki --print --in ipsec.d/cacerts/strongswanCert.der

ipsec pki --gen --type rsa --size 2048 --outform der > ipsec.d/private/vpnHostKey.der
chmod 600 ipsec.d/private/vpnHostKey.der

ipsec pki --pub --in ipsec.d/private/vpnHostKey.der --type rsa | ipsec pki --issue --lifetime 730 --cacert ipsec.d/cacerts/strongswanCert.der --cakey ipsec.d/private/strongswanKey.der --dn "C=CN, O=Btz Company, CN=btzdomainneve.com" --san btzfomainje.com --san 192.168.1.250 --san @192.168.1.250 --flag serverAuth --flag ikeIntermediate --outform der > ipsec.d/certs/vpnHostCert.der

Természetesen, ahova én BTZ-t vagy btzdomainneve.com-ot írtam és ahol én a saját 192.168.1.250-es LAN IP címet írtam, ott mindenki helyettesítse be a saját nevét, Domain nevét, szervereszköze LAN IP címét.

Különböző felhasználóknak a nevek átírásával hozhatunk létre certifikációs fájlokat
ipsec pki --gen --type rsa --size 2048 --outform der > ipsec.d/private/BtzKey.der
chmod 600 ipsec.d/private/BtzKey.der

ipsec pki --pub --in ipsec.d/private/BtzKey.der --type rsa | ipsec pki --issue --lifetime 730 --cacert ipsec.d/cacerts/strongswanCert.der --cakey ipsec.d/private/strongswanKey.der --dn "C=CN, O=Btz Company, CN=btz@emailcine.com" --san "btz@emailcime.com" --outform der > ipsec.d/certs/BtzCert.der

openssl rsa -inform DER -in ipsec.d/private/BtzKey.der -out ipsec.d/private/BtzKey.pem -outform PEM

openssl x509 -inform DER -in ipsec.d/certs/BtzCert.der -out ipsec.d/certs/BtzCert.pem -outform PEM

openssl pkcs12 -export -inkey ipsec.d/private/BtzKey.pem -in ipsec.d/certs/BtzCert.pem -name "Btz's VPN Certificate" -certfile ipsec.d/cacerts/strongswanCert.pem -caname "Btz Root CA" -out Btz.p12

A certfájlokat odaadjuk a felhasználónak.

III. A StrongSwan bekonfigurálása

- Nem sok dolgunk van vele. Megírjuk a konfig fájlt, beállítjuk a naplózást és elindítjuk.
- Az "/etc/strongswan.conf" fájl szerkesztése.
charon {
load_modular = yes
#duplicheck.enable = no
#install_virtual_ip = yes
#dns1 = 8.8.8.8
#dns2 = 8.8.4.4
plugins {
include strongswan.d/charon/*.conf
openssl {
fips_mode = 0
}
}
}

pki {
plugins {
openssl {
fips_mode = 0
}
}
}

include strongswan.d/*.conf

- Hozzunk létre egy /etc/strongswan.d/charon-logging.conf fájlt és írjuk bele, hogy:
charon {
filelog {
/var/log/charon.log {
default = 1
time_format = %Y%m%d%H%M%S
}
}
}

Indítsuk el a StrongSwant
/etc/init.d/strongswan start
chkconfig strongswan on

IV. Az IPSec beállítása

- Az "/etc/ipsec.conf" fájlba írjuk ezt

config setup
#charondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2, mgr 2"
#uniqueids=never

#https://wiki.strongswan.org/projects/strongswan/wiki/ConnSection
conn %default
keyexchange=ikev2
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftsubnet=0.0.0.0/0
leftcert=vpnHostCert.der
right=%any
rightdns=8.8.8.8,8.8.4.4
rightsourceip=%dhcp

conn IPSec-IKEv2
keyexchange=ikev2
auto=add

conn IPSec-IKEv2-EAP
leftsendcert=always
leftid=@btzdomainje.com
also="IPSec-IKEv2"
rightauth=eap-mschapv2
rightsendcert=never
eap_identity=%any

conn CiscoIPSec
keyexchange=ikev1
forceencaps=yes
authby=xauthrsasig
xauth=server
auto=add

A leftid-t is mindenki cserélje a saját Domainjére, ddns címére.
"rightdns=8.8.8.8,8.8.4.4" és "rightsourceip=%dhcp". Ezzel megadjuk, hogy a kliens DHCP szervertől (Nálam ez a szolgáltatói HGW) kapja az IP címet, de használja a Google DNS-t is.

- Az "/etc/ipsec.secrets" fájlba írjuk ezt
# /etc/ipsec.secrets - strongSwan IPsec secrets file
: RSA vpnHostKey.der
felhasznalonev : EAP "felhasznalojelszo"

Ide lehet felvenni EAP felhasználó neveket és jelszavakat, akik a VPN host cert-tel betudnak lépni.

- Az IPSec indítása és működési paramétereinek ellenőrzése:
ipsec start vagy ipsec restart
ipsec statusall

V. Tűzfalazás

- AH, ESP protokollok átengedése, 500-as és 4500-as UDP portok átengedése a VPN routeren

- Mivel nekem HGW is van a hálózatban, ezért az 192.168.1.250-es TPLINk 1043-as routert DMZ-be raktam a Speedport HGW-ben. Emellett a portokat is forwardoltam a Tplinkre.

VI. Kliensoldal

Az írás megszületéséig csak egy Androidos klienssel próbáltam ki a kapcsolódást. Windowsos lehetőségeknek még utána kell néznem. Kérném az ebben járatos olvasókat, ha tudnak ebben segítséget nyújtani, akkor írják le a Windows PC-s kapcsolódási lehetőségeket.
- Androidos használathoz a Google Playről lehet letölteni a StrongSwan VPN Client nevű alkalmazást.
- A programot telepítve és futtatva a CA Certificates menüre kattintunk, majd az Import certificate menüre. Én a Btz.p12 fájlal mindent beimportáltam.

- Az "ADD VPN PROFILE" menüvel hozzáadhatjuk a VPN szerverünk adatain. Username, Servername, Certek stb. A leírás alapján csak IKEv2 Cert Only vagy IKEv2 EAP only módban tud csatlakozni, IKEv2 CERT+EAP módban nem.



- Ha mindent jól csináltunk, akkor a kliensünk kapcsolódik. Innentől kezdve a világon bárhonnan a saját LAN-unkban (belső háló) érezhetjük magunkat.

VII. Folyt köv

- A továbbiakban szeretnék Windows klienssel is kapcsolódni, de még nem tudom, hogy konkrétan miként is lehetne ezt megoldani. Első próbálkozásom egy Windows 7-en kudarcot vallott.
- Másik Openwrt-s routerrel való kapcsolódás. Talán ez könnyebbnek ígérkezik.
- IKEv2 Certificate + EAP (Username/Password) kombós bejelentkezés. Jelenleg ezt a hibát mutatja a logban, ha így akarok kapcsolódni.

Szerver logban pedig ez van a log végén:
20170812220230 13[ENC] parsed IKE_AUTH request 2 [ IDi ]
20170812220230 13[IKE] peer requested EAP, config inacceptable
20170812220230 13[CFG] switching to peer config 'IPSec-IKEv2-EAP'
20170812220230 13[CFG] constraint check failed: EAP identity '%any' required

- IPv6 bevezetése ehhez is. Ebbe bele tartozik, hogy a VPN-en kapcsolódó klienseknek IPv6 címet adjon a DHCP szerver és maga a VPN szerver is elérhető legyen IPv6 címen. Ha már van, akkor működjön ez is, mert az IPv6 forgalom, ha nincs beállítva, akkor nem ezen keresztül megy.

VIII. END

Itt szeretném megköszönni mindenkinek, aki segített a beállításban. Aki használ rajtam kívül ilyesmit, nyugodtan írja le a kommentekben, hogy miként és hogyan teszi ezt. Ha bárkinek észrevétele van, esetleg található a beállításokban következetlenség (tudom, hogy van :D ) az jelezze.
Köszönet annak is, aki ezt mind végig olvasta és a leírás alapján megpróbál beállítani egy IPsec IKEv2 VPN-t StrongSwannal Openwrt vagy LEDE szoftverrel rendelkező routeren. :R

Még van hozzászólás! Tovább