Tohle je krátký návod pro nastavení IKEv2 VPN pro router Turris, abych příště nemusel dlouze vzpomínat a řešit, jak jsem posledně vyřešil všechny problémy, aby mi to zatracené VPN konečně fungovalo. A možná to pomůže i někomu dalšímu.
V tomto návodu je předpokládáno, že Turris je dostupný na doméně vpn.turris.tld
a využívá již existující
SSL certifikát vydaný pro tuto doménu jinou CA. Nebudu se tedy již zabývat jak takový certifikát získat,
ani postupem generování klientský certifikátů.
Ověřování klientů bude prováděno pouze pomocí kombinace jména a hesla, SSL certifikát je použit pouze pro ověření, že se připojujeme skutečně ke správnému routeru.
V administračním rozhraní Foris povolíme balíky pro Rozšíření síťové podpory, tím dojde k instalaci všech potřebných balíků a navíc se nám Updater postará o jejich automatickou aktualizaci, oproti situaci, kdy balíky nainstalujeme ručně pomocí opkg.
Nahrajeme do routeru náš certifikát a veřejný certifikát naší CA. Osobně jsem použil certifikát od StartSSL, kde si můžete nechat vygenerovat jeden certifikát pro osobní potřebu zcela zdarma. Odpadá tak nutnost nahrávat vlastní veřejné certifikáty do klientů, kteří se budou připojovat k naší VPN, jelikož certifikáty od StartSSL jsou již ve většině zařízení obsaženy.
/etc/ipsec.d/private/privatekey.pem # Privátní klíč, který jsme použili při žádosti o náš certifikát
/etc/ipsec.d/cacerts/ca.crt # Veřejný certifikát naší CA pro ověření pravosti našeho certifikátu
/etc/ipsec.d/cacerts/intermediate.ca.crt # V závislosti na naší CA jich může být i více
/etc/ipsec.d/certs/vpn.turris.tld.crt # Privátní certifikát pro naši doménu
V souboru /etc/ipsec.secrets
nastavíme uživatelská jména a hesla pro naše klienty a náš privátní klíč
použitý k ověřování:
: RSA privatekey.pem
username : EAP "password"
V souboru /etc/ipsec.conf
pak nastavíme parametry naší VPN:
config setup
# Díky této volbě se bude moci jeden uživatel připojit z více zařízení najednou
uniqueids=no
strictcrlpolicy=no
conn %default
dpdaction=clear
dpddelay=35s
dpdtimeout=2000s
keyexchange=ikev2
auto=add
rekey=no
reauth=no
fragmentation=yes
# left - nastavení serveru
left=%any
leftcert=vpn.turris.tld.crt
leftsendcert=always
leftsubnet=0.0.0.0/0
# right - nastavení klienta
right=%any
eap_identity=%identity
rightsourceip=%dhcp
rightdns=192.168.1.1
conn IPSec-IKEv2-EAP
leftid=vpn.turris.tld
rightauth=eap-mschapv2
rightsendcert=never
Jako DNS server využijeme přímo náš Turris, pokud jste si přenastavili výchozí rozsah IP adres pro LAN, nezapomeňte nahradit adresu 192.168.1.1 za správnou. Ve spoustě návodů je pro DNS uváděno nastavení na Google DNS (8.8.8.8), ale proč bychom to dělali, vždyť máme k dispozici takovou šikovnou mašinku jako je Turris, který podporuje i DNSSEC.
VPN nám nebude fungovat, pokud ve firewallu nepovolíme UDP komunikaci na portech 500 a 4500.
Také jsem si pro VPN vytvořil samostatnou zónu pro firewall, i když už si nejsem úplně jistý z jakých důvodů jsem to vlastně provedl :) Vše by mělo správně fungovat i v případě, že zahrnete ipsec rozhraní do LAN zóny, ale takhle vypadá moje aktuální konfigurace.
Pro fyzické rozhraní ipsec0 (vznikne automaticky spuštěním ipsec služby) jsem si vytvořil síťový interface VPN, kterému jsem přidělil statickou IP 192.168.250.1, stejnou IP nastavíme jako DHCP server, jako adresu DNS pak 192.168.1.1. Prakticky jsem okopíroval nastavení LANu, jen s rozdílem že jsem VPN vyhradil samostatný subnet 192.168.250.0 ;)
Následně na obrazovce Network - Firewall přidáme novou zónu, jméno může být libovolné, já zcela originálně zvolil VPN a jako pokryté sítě zaškrtneme v předchozím kroku vytvořené rozhraní VPN. Poté je důležité nastavit forwading z nové VPN zóny do WANu, jinak se klienti nedostanou se do internetu, a také do LANu, jinak se nedostanou dále než na routeru. A také povolíme forwading z LAN do nové zóny VPN, aby zařízení z domácí sítě byla schopná komunikovat se zařízeními připojenými k VPN.
V dokonalém světě by nám již naše VPN měla krásně fungovat, realita je ale jako obvykle jiná. IPsec se totiž odmítá spustit s tvrzením, že nemůže nahrát některé pluginy. Protože tento návod píšu zpětně s odstupem několika týdnů a nenapsal jsem si konrétní poznámky, je možné že tato sekce návodu nebude úplně kompletní.
Ale pokud si správně pamatuji, problém byl s pluginy nonce a sha1. To jsem vyřešil vytvořením konfiguračních souborů pro tyto pluginy, ve kterých jsem zakázal jejich načtení.
Vytvoříme tedy soubor /etc/strongswan.d/charon/nonce.conf
s obsahem:
nonce {
# Whether to load the plugin. Can also be an integer to increase the
# priority of this plugin.
load = no
}
a soubor /etc/strongswan.d/charon/sha1.conf
:
sha1 {
# Whether to load the plugin. Can also be an integer to increase the
# priority of this plugin.
load = no
}
Tak, nyní by již mělo vše fungovat, na závěr jen povolíme aby ipsec spouštělo automaticky i po restartu:
/etc/init.d/ipsec enable
Je možné, že jsem něco vynechl, pokud budete následovat tento návod a nebude se vám dařit, dejte mi vědět, ať můžu nutné kroky doplnit, díky!
Na závěr chci poděkovat hlavně Ondřeji Caletkovi, neboť jsem při nastavování VPN a firewallu využil spoustu jeho rad z fóra a i nápad na využití certifikátu od StartSSL, namísto generování vlastního, jsem pochytil v nějakém z jeho starších příspěvků na fóru.
Seznam dalších zdrojů, z kterých jsem vycházel:
@jakubskrz Zkoušel jsi to na Turris Omnia nebo na starém?
V Omnii to vypadá, že není nainstlaováno IPsec i se zapnutým Rozšíření síťové podpory (nenašel jsem /etc/ipsec.conf apod). Po vyhledání balíčků co mají v názvu "IPsec" jich to najde hodně, ale není mi jasné které z nich jsou ty pravé. Poradil bys, prosím?
wg
.