OpenVPN část 1
8.12.2015 Zdroj: Root.cz
V tomto článku si popíšeme projekt OpenVPN, pomocí kterého lze velice snadno vytvářet všelijaké VPN (Virtual Private Network).
Při tvorbě VPN máme v současné době několik možností. Můžeme použít nějakou proprietární VPN (například od firmy Cisco), můžeme použít IPSec (ať už přímo z kernelu 2.6, nebo třeba FreeS/WAN), nebo některou otevřenou VPN, která nepoužívá IPSec.
Proprietární řešení jsou většinou poměrně nákladná a hodí se spíše pro větší nasazení. IPSec je naproti tomu výrazně levnější, ale jeho konfigurace není jednoduchá a má problémy při použití NATu. Zájemce lze odkázat na nepřeberné množství článků.
Projekt OpenVPN patří do skupiny opensource VPN, které nepoužívají IPSec. Místo toho je použito SSL/TLS. Mezi jeho hlavní přednosti patří:
Podpora mnoha platforem – Linux, Solaris, OpenBSD, FreeBSD, NetBSD, Mac OS X a
Windows 2000/XP.
Celý program běží v user mode, a není tedy potřeba patchovat
kernel (za předpokladu, že máte zapnutou podporu pro TUN/TAP zařízení)
Podpora režimů 1:1 (tunel) nebo N:1 (režim client/server)
Možnost použití
sdíleného klíče a/nebo SSL certifikátů
Jednoduchá konfigurace a perfektní
logy
Bezpečnost
Vysoká odolnost při použití na nekvalitních linkách
Volitelná komprese
Podpora HTTP a SOCKS proxy. To je výhodné především pro
RoadWarrior režim, klient se tak může připojit téměř odkudkoliv
a mnoho
dalšího…
Co se bezpečnosti týče, umí toho OpenVPN opravdu hodně. Podporovány
jsou režimy se sdíleným klíčem nebo použití SSL/TLS s X.509 certifikáty. Pro
každý směr komunikace je možno použít jiný klíč. Je také možno nastavit velikost
replay-okna, které snižuje možnost prolomení pomocí opětovného přehrání
posílaných dat. Samozřejmostí je použití libovolných šifrovacích algoritmů,
které podporuje použitá SSL knihovna.
OpenVPN standardně používá protokol UDP, ale lze použít i TCP (včetně zmiňovaného použití HTTP a SOCKS proxy). Veškerá komunikace probíhá na jediném portu, a lze tedy snadno nakonfigurovat firewall, aby propouštěl pouze pakety na tomto portu. Stejně tak je možné, aby pakety procházely různými NATy a maškarádami.
Celý OpenVPN démon běží v uživatelském režimu a komunikuje prostřednictvím TAP nebo TUN rozhraní. Takto vytvořená rozhraní všechna přijatá data předávají přímo uživatelskému procesu, který tak může vystupovat v roli síťové karty. Tím odpadá nutnost znovu překládat kernel (podpora TUN a TAP zařízení je ve většině distribucí), a zároveň se tak snižuje závislost na některé platformě.
Instalace OpenVPN je velice jednoduchá. Ze stránek projektu si stáhneme tgz balíček, rozbalíme a použijeme trojici ./configure, make a make install. Pokud chceme používat kompresi, musíme mít nainstalovanou knihovnu LZO. Součástí balíčku je také spouštěcí script sample-scripts/openvpn.init, který můžeme nahrát do /etc/init.d a pomocí chkconfig –add openvpnpřidat. Tento skript potom při startu projde adresář /etc/openvpn a pro všechny nalezené soubory s příponou conf spustí OpenVPN démona. Pro provoz OpenVPN je vhodné založit vlastního uživatele. OpenVPN je možné i chrootovat.
Stručně zmíním i instalaci na Windows. Ta je také velice přímočará, stačí stáhnout správný balíček (u verze 2.0beta doporučuji beta7, novější mi občas zlobily) a spustit. Instalace přidá Virtual TAP síťové zařízení (doporučuji vhodně přejmenovat) a přidá službu OpenVPN. Tím je instalace skončena a po vytvoření konfiguračního souboru můžete vesele OpenVPNkovat :) Volitelně lze místo Windows služby také nainstalovat GUI prográmek OpenVPN GUI, který se zabydlí v trayi, a uživatel má tak lepší přehled nad všemi bežícími i neběžícími VPN.
Nejprve si ukážeme vytvoření jednoduchého tunelu mezi dvěma linuxovými stroji s použitím sdíleného klíče. Jedná se o podobný scénář jako v tomto článku. Máme dva linuxové stroje (s obligátními IP 1.2.3.4 a 5.6.7.8), mezi kterými normálně funguje IP komunikace. Mezi těmito stroji chceme vytvořit šifrovaný a komprimovaný tunel se sdíleným klíčem. Tunel by dokonce nemusel být ani šifrovaný.
Nejprve si pomocí openvpn –genkey –secret /etc/openvpn/secret.key vygenerujeme sdílený klíč. Ten potom nějakou bezpečnou cestou dopravíme i na druhý počítač. Na počítači 5.6.7.8 potom vytvoříme následující konfigurační soubor /etc/openvpn/vpn.conf:
remote 1.2.3.4
ifconfig 10.0.0.2 255.255.255.0
port 5001
proto udp
dev tap0
secret /etc/openvpn/secret.key
ping 10
comp-lzo
verb 5
mute 10
user openvpn
group openvpn
Tento konfigurační soubor pošleme
(nejlépe opět bezpečnou cestou) na počítač 1.2.3.4, změníme v něm řádky remote a
ifconfig
remote 5.6.7.8
ifconfig 10.0.0.1 255.255.255.0
a na obou počítačích
spustíme /etc/rc.d/init.d/openvpn start. V systémech se nám objeví další
zařízení tap0 se zvolenými IP adresami. Veškerá komunikace mezi nimi je potom
transparentně šifrována a/nebo komprimována. Ano, opravdu je to takhle
jednoduché :)
Přestože je nastavení zřejmé a každý si za domácí úlohu jistě vše rád odvodí, stručně popíšu jednotlivé parametry. Parametr remote určuje druhou stranu VPN, ifconfig adresu a netmasku virtuálního síťového rozhraní. Port a proto snad opravdu nepotřebují komentář. Parametr dev určuje typ a číslo virtuálního rozhraní,
secret jméno souboru se sdíleným klíčem. Tento soubor by měl mít
práva
nastavená tak, aby k němu mohl pouze uživatel, pod kterým OpenVPN
běží. Volba
ping určuje intervaly keep-alive pingů,
comp-lzo povoluje kompresi a
parametry verb a
mute upřesňují logování. A konečně user a group
určují, pod jakými efektivními právy má démon běžet. Bližší popis parametrů
najdete v dokumentaci.
Do takto vytvořeného tunelu můžeme pomocí routování
přesměrovat libovolný síťový provoz. OpenVPN automaticky obnovuje spadlé
spojení, takže není potřeba po výpadku linky vše znova restartovat. Při zkoušení
OpenVPN vykazovala velice slušné výsledky. Při vytvoření VPN mezi dvěma počítači
na 100MBit LAN přenosová rychlost dosahovala téměř stejných hodnot jako bez
použítí VPN. Také všechny služby fungovaly naprosto bez problémů (včetně MS
sdílení souborů, které je na podobné síťové čarování poměrně háklivé).
Podobný tunel používám na spojení s počítačem v hostingovém centru a i zde OpenVPN dosahuje skvělých výsledků. Díky zapnuté kompresi lze při přenosu textových souborů (HTML, PHP…) dosáhnout i rychlostí rovnajících se trojnásobku kapacity linky. Naopak při interaktivním přístupu (SSH, VoIP) jsem nepozoroval žádné prodlevy.
V příštím dílu si popíšeme konfiguraci v režimu client/server s připojováním RoadWarrior klientů.