Aktualizovaná verze článku o konfiguraci OpenVPN je k nalezení na BCVlogu: OpenVPN – propojení kanceláře a počítačů v terénu.
OpenVPN je jednoduše použitelná, robusní a velmi konfigurovatelná implementace VPN umožňující bezpečně propojit dvě a více sítí. Komunikace přez OpenVPN je šifrována pomocí SSL.
Projekt OpenVPN je Open Source a je šířen pod licensí GNU/GPL
Popis instalace a nastavení OpenVPN píšu vzhledem k OS Linux, ale podporované operační systémy jsou i MS Windows 2000/XP, MacOS X, OpenBSD, FreeBSD NetBSD a také Solaris. Kompletní výpis vlastností OpenVPN je k nalezení na stránkách projektu.
Instalace
Download
OpenVPN je ke stažení na adrese prdownloads.sourceforge.net/openvpn/, použil jsem verzi 2.0_beta10 a přeložil jsem si ji ze zdrových souborů. Aplikace závisí na knihovně LZO (dá se skompilovat i bez ní, ale proč se ochuzovat o kompresi?) a také potřebujete halvičkové soubory OpenSSL.
Kompilace
Zkompilujte a nainstalujte knihovnu LZO (klasika: ./configure --prefix=/usr && make && checkinstall
), poté spusťte jako uživatel root ldconfig
.
Překlad OpenVPN je také velmi jednoduchý:
tar -xjf openvpn-2.0_beta10.tar.gz cd openvpn-2.0_beta10 ./configure --prefix=/usr make checkinstall
Před tím než nainstalujete do systému balíček vytvořený checkinstallem, otestujte funkčnost šifrování (pořád jsme v adresáři se zdrojovýmy kódy OpenVPN):
./openvpn --genkey --secret key ./openvpn --test-crypto --secret key
Dál otestujeme navázání spojení pomocí TLS/SSL:
V jednom terminálu spustíme:
./openvpn --config sample-config-files/loopback-client
V druhém terminlu spustíme:
./openvpn --config sample-config-files/loopback-server
tun/tap
OpenVPN spoužívá pro komunikaci virtuální síťové zařízení tun
nebo tap
.
Podpora pro tun/tap
je v linuxu součástí jádra, pokud používáte jádro z distribuce tak není co řešit. Pokud si překládáte jádro sami, nezapomeňte volbu(pro jádro řady 2.6):
Device Drivers ---> Networking support ---> <M> Universal TUN/TAP device driver support
Minimálně v distribuci Slackware budete muset vyrobit vyrobit zařízení /dev/net/tun
:
mknod /dev/net/tun c 10 200
a nahrád modul zpřístupňující funkce tun do jádra:
modprobe tun
Nastavení
Firewall
Nastavte si maškarádu a povolte forward paketu.
Tunel bez zabezpečení
Tento tunel není nijak zabezpečen, komunikace probíhá protokolem UDP na portu 5000.
Na serveru 1 spusťte:
openvpn --remote server2.cz --dev tun1\ --ifconfig 192.168.2.1 192.168.2.2 --verb 9
Na serveru 2 spusťte:
openvpn --remote server1.cz --dev tun1\ --ifconfig 192.168.2.2 192.168.2.1 --verb 9
Funkčnost otestujete pomocí pingu na druhou stranu tunelu:
server 1: ping 192.168.2.2 server 2: ping 192.168.2.1
Tunel zabezpečený pevným klíčem
Nejdřív si vygenerujeme klíč, kterým zabezpečíme spojení:
openvpn --genkey --secret klic.key
Klíč musíte mít na obou počítačích na kterých končí tunel, přenos klíče by měl probbí9hat nějakým bezpečným způsobem.
První počítač:
openvpn --remote server2.cz --dev tun1 \ --ifconfig 192.168.2.1 192.168.2.2 --verb 5 --secret klic.key
Druhý počítač:
openvpn --remote server1.cz --dev tun1 \ --ifconfig 192.168.2.2 192.168.2.1 --verb 5 --secret klic.key
TLS/SSL
Předchozí varianty jsem popsal abych ukázal žejsou možné a funkční, ale nějak jsem pro ně nenašel vhodné využití. Protože trochu cestuji a chci se připojovat z notebooka z libovolného místa a chci to mít bezpečné, používám TLS/SSL.
SSL certifikáty
Pro to abysme mohli používat následující nastavení potřebujeme SSL certifikáty a klíče podepsane od jedné CA. Balíček OpenVPN obsahuje skripty s jednoduchou CA (adresář easy-rsa/
), kterou použijeme.
V adresáři easy-rsa/
najdete soubor vars
, který si musíte upravit v závislosti na tom kam jste si easy-rsa/
nakopírovali. Doporučuji abyste si přečetli README
, ktere je v tom adresáři, je tam totiž kompletní popis výroby klíče.
Nastavení
Nastavení OpenVPN pro použití TLS/SSL mám v konfiguračních souborech, samozřejmě že to lze napsat jako prametry programu jako v minulých příkladech, ale to se mi moc nelíbí.
/etc/openvpn/
Všechny soubory, ktere zde budu popisovat jsou v adresáři /etc/openvpn
, který má práva 700
a majitele uživatele root
.
SSL certifikáty – Server
Na server si umístíme certifikát CA (ca.crt
) a certifikát a klíč serveru (server.crt
a server.key
), které jsme si vygenerovali podle README v adresáři easy-rsa/
, také bsyte neměli zapomenout na soubor dh1024.pem
nebo dh2048.pem
, záleží kterej jste si vyrobili.
server.conf
Tento soubor obsahuje nastaveni OpenVPN na straně serveru(pokud se kouknete do dokumentace k OpenVPN, zjistíte co která položka znamená.):
dev tun ifconfig 192.168.2.1 192.168.2.2 up ./server.up tls-server dh dh2048.pem #nebo dh dh1024.pem ca ca.crt cert server.crt key server.key port 5000 comp-lzo ping 15 ping-restart 45 ping-timer-rem persist-tun persist-key verb 3
Parametry ifconfigu jsou ifconfig <lokalni IP> <vzdalena IP>
, jsou to koncove adresy tunelu. Server běží na UDP portu 5000.
server.up
Soubor server.up
je shell skript, přidává routu do VPNky.
route add -net 192.168.2.0 netmask 255.255.255.0 add gw $5
start.sh
start.sh
je skript, který nahazuje VPNku, pro vypnutí VPN stačí killnout proces openvpn
#!/bin/bash dir=/etc/openvpn echo 1 > /proc/sys/net/ipv4/ip_forward openvpn --cd $dir --daemon --config server.conf
SSL certifikáty – Klient
Na klientský počítač umístíme certifikát CA (ca.crt
) a certifikát a klíč klienta (klient.crt
a klient.key
), které jsme si vygenerovali podle README v adresáři easy-rsa/
.
klient.conf
dev tun remote 147.32.119.186 # VPN server ifconfig 192.168.2.2 192.168.2.1 up ./klient.up tls-client ca ca.crt cert klient.crt key klient.key port 5000 #user nobody #group nobody comp-lzo ping 15 ping-restart 45 ping-timer-rem persist-tun persist-key verb 3
klient.up
Soubor klient.up
je shell skript, který po nahození VPNky upravuje routovací tabulku klienta, musíte si napsat svůj v závislosti na vašich podmíkách na síti. Jako příklad zde ukážu svůj skript, kterým se připojuji když síťuji přez modem:
#!/bin/bash route add 147.32.119.186 ppp0 # routa na VPN server route del default # smažu výchozí gw route add default gw 192.168.2.1 # vše budu routovat přez VPNku
V případě, že chcete všechen provoz tlačit přez VPNku, musíte přidt routovací pravidlo na VPN server.
start.sh
Jako klientský počítač mám notebook, který má vypnutý syslog a snažím se aby co nejméně zapisoval na disk. Proto mám /tmp
přimountovaný jako tmpfs
a OpenVPN nechavám logovat do souboru /tmp/openvpn.log
#!/bin/bash dir=/etc/openvpn modprobe tun echo 1 > /proc/sys/net/ipv4/ip_forward openvpn --log /tmp/openvpn.log --cd $dir --daemon --config klient.conf
Zdravim. Mam problem s OpenVPN na nekterych systemech Windows. Specialne Windows XP. Pri stejne konfiguraci nekterym klientum OpenVPN funguje a nekterym to pise chybu TLS Error: TLS key negotiation failed. Dochazi k timeoutu.
Pouzivam interface TAP a TCP komunikaci. Server nevyzaduje klientsky ceritfikat.
Zde je cast konfigurace klienta:
———–
proto tcp-client
remote XXX.XXX.XXX.XXX 1194
dev tap
nobind
persist-key
tls-client
ca ca.pem
ns-cert-type server
verb 3
cipher AES-256-CBC
auth SHA1
pull
auth-user-pass
auth-nocache
redirect-gateway
————-
Neresil jste nekdo podobny problem s TLS na Windowsech?
Zdravím vás, vím že je plno napsaných návodů na openVPN a prošel jsem jich opravdu hodně ale nepodařilo se mi ani spustit server openVPN. Mohl by někdo napsat někdo opravdu jednoduchý polopatický návod na tuto VPN? Diky
Dobry den,
Nastavil jsem openvpn aby jse authentifikovala vuci ldap pomocou user/heslo. Bohuzel uz ale nebere clienty, ktery chteji pouzit certifikat. Vyzaduje jenom user/heslo.
Nevite jak mu rict aby to bral “cert neco username” ?
Dekuju za radu
plugin /usr/local/lib/openvpn-auth-ldap.so /etc/openvpn/auth_ldap.cfg
client-cert-not-required
username-as-common-name