2019. november 14., csütörtök

Gyorskeresés

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

Írta: | Kulcsszavak: StrongSwan . IKEV2 . IPSec . Openwrt . LEDE . EAP . VPN . HowTo . Server

[ ÚJ BEJEGYZÉS ]

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

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

Hozzászólások

(#1) kmisi99


kmisi99
(addikt)

Ismét jó leírás, bár nekem még így is annyira komplikált, hogy nincs kedvem belevágni, pedig marha jó lenne távolról hozzáférni a fájljaimhoz. Van a fiókban egy régebbi tplink routerem, lehet azt megpróbálom felokosítani így.

(#2) btz válasza kmisi99 (#1) üzenetére


btz
(addikt)

Ezzel kevesebbet szenvedtem, mint az Openvpn-el. Igaz eddig csak ez az egy leírás alapján működött a dolog. Most próbálok egy másik konfigot EAP-TLS-el, de az nem akar működni.
Lényegében csak 3-4 fájlba kell beleírni, a saját adatainkal behelyettesíteni, ott ahol a saját adatunk kell (pl a tanúsítványoknál) és működik a dolog. Plusz a tűzfal beállítása, de az evidens minden szerver programnál, hogy portot kell neki nyitni.

ⓑⓣⓩ

(#3) kmisi99 válasza btz (#2) üzenetére


kmisi99
(addikt)

Ja, nem tűnik túl bonyolultnak, de soha életemben nem foglalkoztam openwrt-vel.
Gondolom mindenek előtt, egy fix openwrt bekonfigolt rendszer kell, utána kell a VPN-es dolgokat konfigolni.
Szóval egy hétvégét lehet rászánok, és akkor végre tökéletes lesz a hálózatom.

[ Szerkesztve ]

(#4) btz válasza kmisi99 (#3) üzenetére


btz
(addikt)

Valahol el kell kezdeni :D
Ehhez a VPN-hez kell pendrive is a csomagokhoz, mert 12MB-t foglal. 4MB van kb egy átlagos soho routeren. Egy régi 500MB-s pen is megteszi ~500 forintért lehet kapni.

ⓑⓣⓩ

(#5) kmisi99 válasza btz (#4) üzenetére


kmisi99
(addikt)

Na szép, akkor a másik fiók routeremmel ki se tudom vitelezni, mert azon nincs USB. A 1041nd-t pedig féltem kihúzni a szolgálat alól. Bár a fiók routerrel játszogathatok, hogy az alap beállításokat megcsináljam, és ha jól működik akkor jöhet a rendes router.

(#6) btz válasza kmisi99 (#5) üzenetére


btz
(addikt)

Ha nincs rajta USB, akkor ez a VPN módszet felejtős rá, de lehet, hogy az Openvpn is.

ⓑⓣⓩ

(#7) kmisi99 válasza btz (#6) üzenetére


kmisi99
(addikt)

Igen, de a 1043nd-n van USB, csak, arra értettem, hogy a ratyi routeren gyakorlom be az openwrt alapjait, hogy ne azzal csesszem az időt, mikor a 1043nd alól kirántom a forgalmat.
Ezzel a VPN-el amúgy totál olyan mintha belső LAN ban lennék? Azaz a fájl szerveremet ugyan úgy elérem, és nyitogathatnék meg fájlokat?

Bár a ~10mbit feltöltési sebességem nem tudom mennyire lenne elég, hogy nézzem róla távolról a sorozataimat. Ha úgy számolok, hogy egy sorozat rész 1GB és 1 óra hosszú, akkor 1024MB/3600 másodperc=~280KB/S sávszélesség kell, hogy le tudja játszani folyamatosan a videót, bár gondolom a gyakorlatban ez másképp megy. :DDD

Ilyesmit próbáltál már, hogy pl egy távoli wifiről, otthon lévő szerveren lévő filmet sorozatot megnézed?

[ Szerkesztve ]

(#8) btz válasza kmisi99 (#7) üzenetére


btz
(addikt)

Nekem SFTP van, így érem el a szükséges fájlokat, ma voltam épp a helyi pláza wifin keresztül leteszteltem, mindent elérek, akár videót is megnézhetnék.

ⓑⓣⓩ

(#9) btz válasza btz (#8) üzenetére


btz
(addikt)

Dlna-t, Samba-t nem próbáltam, de annak is mennie kell.

ⓑⓣⓩ

(#10) kmisi99 válasza btz (#9) üzenetére


kmisi99
(addikt)

Köszi a válaszokat, akkor lehet bele vágok, ha lesz rá hangulatom, marha jó lenne, ha össze jönne, már csak valami szar pendrive-ot kell túrnom, itthon csak 16GB-os van. :DDD
Bár valahol valamelyik régi telefonban van egy 256mb os micro sd, egy gagyi olvasó meg 1-2$ kínából.

További hozzászólások megtekintése...
Copyright © 2000-2019 PROHARDVER Informatikai Kft.