Moje wywody zaczeły sie od przeczytania na tym forum. i zachciało mi sie ipseca na ruterze tak zebym mogl sie z dowolnego urzadzenia polaczyc zaszyfrowanym protokołem do domu. Wzorowałem sie na tym poradniku https://eko.one.pl/?p=openwrt-ipsec Jest on dobry, android łączy sie bez problemu do tak postawionego ipseca. Ale ja chciałem połączyć sie z windowsa ale ten niestety nie wspiera IPSec Xauth PSK- podobno jest dziurawy
i tu zaczely sie moje problemy (przygode z open wrt zaczalem tydzien wczesniej po uwaleniu routera wiec jestem laikiem). Na wszystkie sposoby starałem się połączyć z windowsa ale mi sie nie udawło, zacząłem czytać i drążyć temat. Po wielu niepowodzeniach wkurzyłem sie i zainstalowałem sobie na androidzie aplikacje strongswam. Jej zaleta jest ze obsluguje protokoły takie same jak w windzie i mozna sobie podejrzeć szczegółowy log - to było u mnie przełomem. Okazało sie że instalując strongswana z poradnika https://eko.one.pl/?p=openwrt-ipsec nie instalujemy strongswana z wszystkimi pakietami tylko z tymi potrzebnymi do obsługi protokołu Xauth PSK a ja do windy potrzebowałem obsługi np eap-mschapv2 a z kolei ten pakie potrzebuje pakietu md4. dlaczego pakiet eap-mschapv2? pozwala on na uwierzytelnianie za pomoca loginu i hasla i ja go wybralem:) musiałem więc doinstalować sobie pakiety potrzebne zgodnie z radami znalezionymi na innym forum zacząłem od wypierdaczenia obecnej instalacji strongswana i kmod-ipt-ipsec. Ci co nie instalowali tego nie maja problemu nie musza wywalac:) Po wywaleniu restart urzadzonka. Ten punkt przyjme za wyjsciowy - zaczynamy instalacje strongswana w wersji full-potrzebny extroot.
Instalacja strongswan
opkg update
opkg install strongswan-full strongswan-default strongswan-mod-kernel-libipsec iptables-mod-filter iptables-mod-nat-extra
Bardzo ważne jest zeby wykonało się bez errorów. mi przy pierwszej instalacji ruter sie zawiesil, reset i ponowna instalacja u mnie załatwiła sprawe. Teraz trzeba wygenerować certyfikaty, robimy to ponizszymi komendami:
ipsec pki --gen --outform pem > caKey.pem
ipsec pki --self --in caKey.pem --dn "C=US, O=xxx, CN=xxxx" --ca --outform pem > caCert.pem
ipsec pki --gen --outform pem > serverKey.pem
ipsec pki --pub --in serverKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=US, O=xxx, CN=xxxx.dlinkddns.com" --san="xxxx.dlinkddns.com" --flag serverAuth --flag ikeIntermediate --outform pem > serverCert.pem
ipsec pki --gen --outform pem > clientKey.pem
ipsec pki --pub --in clientKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=US, O=xxx, CN=client" --outform pem > clientCert.pem
openssl pkcs12 -export -inkey clientKey.pem -in clientCert.pem -name "client" -certfile caCert.pem -caname "xxxx" -out clientCert.p12
Ważne jest zeby w miejsca gdzie ja wstawilem xxxx.dlinkddns.com wstawic swoj adres po jakim bedziemy sie laczyc do ipseca. Kopiujac uwazaj bo tu pozawijały sie linie! Wygenerowanie niektorych kluczy bedize trwalo dluzej wiec trzeba byc cierpliwym
Certy o nazwie clientCert.p12 caCert.pem kopiujemy na urządzenia klienckie. Wazne jest ze w windowsie dodajemy certy poprzez mmc certyfikaty i wazne nie wybieramy konto uzytkownika tylko konto komputera. client cert dajemy do osobistych a cacaert do zaufane główne urzedy certyfikacji
Przenosimy certy w odopwiednie miejsce
mv caCert.pem /etc/ipsec.d/cacerts/
mv serverCert.pem /etc/ipsec.d/certs/
mv serverKey.pem /etc/ipsec.d/private/
mv clientCert.pem /etc/ipsec.d/certs/
mv clientKey.pem /etc/ipsec.d/private/
mv caKey.pem /etc/ipsec.d/private/
Pliki konfiguracyjne:
/etc/ipsec.conf
config setup
conn %default
left=%any
leftsubnet=0.0.0.0/0
leftid=@vpn.moj.com
right=%any
rightsourceip=%dhcp
auto=add
conn android
keyexchange=ikev1
authby=xauthpsk
xauth=server
conn win
keyexchange=ikev2
leftauth=pubkey
leftcert=serverCert.pem
rightauth=eap-mschapv2
/etc/ipsec.secrets
: RSA serverKey.pem
user : EAP "haslo"
: PSK "pass18"
user : XAUTH "haslo"
/etc/strongswan.conf
charon {
dns1 = 192.168.1.1
plugins {
dhcp {
server = 192.168.1.1
}
}
}
pluto {
}
libstrongswan {
# set to no, the DH exponent size is optimized
# dh_exponent_ansi_x9_42 = no
}
Teraz pora na firewal:)
do pliku /etc/config/firewall dopisujemy nastepujace sekcje
config rule
option src 'wan'
option proto 'esp'
option target 'ACCEPT'
config rule
option src 'wan'
option proto 'udp'
option dest_port '500'
option target 'ACCEPT'
config rule
option src 'wan'
option proto 'udp'
option dest_port '4500'
option target 'ACCEPT'
config rule
option src 'wan'
option proto 'ah'
option target 'ACCEPT'
w konsoli po koleji odpalamy nastepujace polecenia
iptables -I INPUT -m policy --dir in --pol ipsec --proto esp -j ACCEPT
iptables -I FORWARD -m policy --dir in --pol ipsec --proto esp -j ACCEPT
iptables -I FORWARD -m policy --dir out --pol ipsec --proto esp -j ACCEPT
iptables -I OUTPUT -m policy --dir out --pol ipsec --proto esp -j ACCEPT
Tu pojawil sie problem bo po polaczeniu do vpna host vpnowy nie pingowal hosta w sieci lokalnej- dodajemy wiec ruting
do pliku /etc/config/firewall dodajemy wpisy
config zone
option forward 'REJECT'
option name 'vpn'
option output 'ACCEPT'
option network 'ipsec'
option input 'ACCEPT'
config forwarding
option dest 'lan'
option src 'vpn'
config forwarding
option dest 'wan'
option src 'vpn'
config forwarding
option dest 'vpn'
option src 'lan'
No to uruchamiamy:
chmod 755 /etc/init.d/ipsec
/etc/init.d/firewall restart
/etc/init.d/ipsec enable
/etc/init.d/ipsec start
W tym miejscu zakladam ze na hosty klienckie zostaly przegrane certy - pisalem o tym wczenisej
Konfiguracja klienta android jest w poradniku https://eko.one.pl/?p=openwrt-ipsec
Klienta windows konfigurujemy tak: panel sterowania->Centrum sieci i udostępniania-> Skonfiguruj nowe połączenie lub nowa siec-> połącz zmiejscem pracy_ > wybieramy utworz nowe polaczenie-> uzyj mojego polaczenia internetowego vpn
W pole adres internetowy wpisujemy adres naszego vpna . w przypadku moim vpn.moj.com
zaznaczamy checkboxa Nie łącz teraz, tylko skonfiguruj aby mozna bylo polaczyc sie pozniej.
Nastepnie wchodzimy Panel sterowania\Sieć i Internet\Połączenia siecioweodszukujemy nowo powstale virtualne polaczenie i klikamy wlasciwosci.
Zakladka opcje odznaczamy dołacz domene logowania systemu windows
zakladka zabezpieczenia wybieramy w omawianym przypadku IKEv2, wymagaj szyfrowania(rozlacz jesli serwer odmawia)
uzyj protokolu uwierzytelniania rozszerzonego-> bezpieczne haslo eap-mschap v2
w zakladce siec odznaczamy ipv6
klikamy ok
Mozemy sie juz łączyc , powinno pojawic sie okienko z loginem i haslem wklepujemy i jesli wszystko poszlo ok to powinnismy si epolaczyc.
Oczywiscie mozliwosci konfiguracji jest wiele , uzytkownik moze byc uwierzytelniany certem , haslem (omawiany przypadek), haslem i certem (tego przypadku nie udalo mi sie na windzie odpalic, na androidzie dzialalo).
Rozwiazywanie problemow:
ipsec status
ipsec statusall -> zobaczyc czy zaladowaly sie wszystkie potrzebne moduly
To tyle moich wywodow, dodam ze jestem laikiem jesli chodzi o linuxa bawie sie nim troche ponad tydzien wiec wszystkie wskazowki i uwagi sa pożądane.