Následující návod popisuje způsob, jak snadno a rychle nastavit síťový tunel založený na IPsecu mezi Linuxem (Debian) a Mikrotikem. Podobných návodů je na Internetu hodně, nicméně nikde jsem nenašel ucelenou variantu týkající se právě uvedené kombinace s Mikrotikem a situací, kdy na obou stranách tunelu existuje více subnetů.
Doposud jsem si při spojování různých lokalit vystačil s OpenVPN. Je to velmi jednoduchá a snadno fungující VPN, která má širokou podporu napříč různými zařízeními a operačními systémy. Jenže v podání Mikrotiku je trochu potíž v tom, že podporuje autentizaci pouze SHA1 (MD5 nepočítám) a maximální přenosová rychlost končí na 30-40Mbitech (CloudCore board). Tato rychlost roky bohatě stačila a naráželo se spíše na limity internetové konektivity. IPsec je na tom řádově lépe, neboť díky HW podpoře šifrování u některých router boardů je dosažitelná rychlost mezi dvěma body 470-480Mbit - a to při použití hashovací funkce SHA256 + šifrování AES-256-CBC.
Problematika IPsecu je poměrně obsáhlá a v rámci tohoto návodu jsou některé věci záměrně zjednodušeny nebo zamlčeny. Ostatně cílem je IPsec tunel rozjet, teorii si každý může nastudovat sám :-)
* Fáze slouží k autentizaci, vyjednání parametrů pro šifrování kanálu a výměnu klíčů. Parametry pro fázi 1 a šifrování kanálu mohou být různé (jak v Linuxu, tak v Mikrotiku se nastavují na dvou místech), avšak pro větší blbuvzornost doporučuji vše stejné.
** Některé Routerboardy mají hardwarovou podporu SHA1, SHA256 a AES-CBC. Čili šifrování a dešifrování je poté rychlé bez zátěže CPU.
*** Velikost DH (i robustnost hashovací funkce) má zásadní vliv na dobu spojení ipsec tunelu. Linux a Mikrotik musí počítat šifrovací klíče a to docela trvá. Při použití uvedených parametrů je to ještě snesitelných 6-15 sekund. V případě DH mod8192 stoupne tato doba na 20-40 sekund dle výkonu routerboardu.
dmIPSec
s IP 172.30.255.1/30, na Mikrotiku brigde brIPsec
bez připojených fyzických rozhraní s IP 172.30.255.2/30. Smysl dummy a brigde je v tom, že na obou stranách je potřeba mít nastavenou nějakou IP adresu, ale není potřeba, aby byla dostupná na fyzickém rozhraní.greClient1
a jsou mu tedy přiděleny jiné IP
adresy 172.30.255.129/30 a 172.30.255.130/30. Tyto adresy jsou také bránami pro směrování.
Co se týče adres 172.30.255.x, tak smysl dělení do /30 je ten, že se jedná o servisní IP a snahou je minimalizovat možnost kolize s IP adresami provozních podsítí.
Adresy pro IPsec:
Subnet | Linux | Mikrotik | |
---|---|---|---|
Klient1 | 172.30.255.0/30 | 172.30.255.1 | 172.30.255.2 |
Klient2 | 172.30.255.4/30 | 172.30.255.5 | 172.30.255.6 |
Klient3 | 172.30.255.8/30 | 172.30.255.9 | 172.30.255.10 |
Adresy pro GRE:
Subnet | Linux | Mikrotik | |
---|---|---|---|
Klient1 | 172.30.255.128/30 | 172.30.255.129 | 172.30.255.130 |
Klient2 | 172.30.255.132/30 | 172.30.255.133 | 172.30.255.134 |
Klient3 | 172.30.255.136/30 | 172.30.255.137 | 172.30.255.138 |
Tímto systémem lze do jednoho C-čka (172.30.255.0/24) umístit 32 IPsec a GRE tunelů.
Předpokladem je nainstalovaný Debian, funkční SSH a přístup jako root. Instalace strongSwanu:
apt-get install strongswan openssl
StrongSwan má následující konfigurační soubory:
/etc/ipsec.conf /etc/ipsec.secrets /etc/ipsec.d/
# Vytvoreni privatniho klice openssl genrsa -out LINUX_private.pem 4096 # Vytvoreni verejneho klice openssl rsa -in LINUX_private.pem -pubout > LINUX_public.pem
LINUX_private.pem
nakopírujeme do adresáře /etc/ipsec.d/private/
LINUX_public.pem
nakopírujeme do adresáře /etc/ipsec.d/certs/
LINUX_public.pem
vykopírujeme ven z Linuxu, budeme ho importovat do Mikrotiku.Obsah souboru /etc/ipsec.conf
:
# Spolecne nastaveni pro vsechna pripojeni conn %default type=tunnel esp=aes256-sha256-modp4096! ike=aes256-sha256-modp4096! ikelifetime=12h keylife=1h rekeymargin=9m keyingtries=%forever keyexchange=ikev1 authby=pubkey left=1.1.1.1 leftsigkey=LINUX_public.pem # Spojeni na Mikrotik1 conn klient1 right=2.2.2.2 rightsigkey=CLIENT1_public.pem leftsubnet=172.30.255.1/32 rightsubnet=172.30.255.2/32 auto=start
Soubor obsahuje sekci společnou pro všechna spojení %default
a sekce pro jednotlivé peery. Ve společné sekci je uveden typ tunelu,
šifrování a hashovací funkce, způsob autentizace, veřejná IP adresa Linuxu a jeho veřejný klíč. Reference na klíč soukromý je v souboru
níže. V klientské sekci je veřejná IP adresa Mikrotiku, název souboru s veřejným klíčem (ten se musí teprve dodat) a policy. Klientská sekce se
pak může kopírovat dle počtu klientů. Soubory s klíči se hledají v /etc/ipsec.d/certs/
.
Obsah souboru /etc/ipsec.secret
:
# Jmeno souboru s privatnim klicem pro vsechna odchozi autentizacni spojeni # Pozor: dvojtecka na zacatku radku je spravne : RSA LINUX_private.pem
Soubor s klíčem se hledá v /etc/ipsec.d/private/
.
# Vytvoření dummy rozhraní ip link add name dmIPsec type dummy ip link set dev dmIPsec up # Pridani IP do dummy rozhrani - klient1 ip addr add 172.30.255.1/30 dev dmIPsec # Vytvoreni a spusteni GRE tunelu - klient1 ip tunnel add greClient1 mode gre local 172.30.255.1 remote 172.30.255.2 ip link set dev greClient1 up ip address add 172.30.255.129/30 dev greClient1