OpenVPN pro mírně pokročilé

4. 2. 2015
Doba čtení: 3 minuty

Sdílet

Generoval jsem klíče na jedné 10 let staré instalaci OpenVPN a přemýšlel jsem při tom, kolik toho mezitím umí nového a přitom je často používána tím deset let starým způsobem. Je možné, že o některých nových vlastnostech vůbec nevíte, nebo jste se je báli použít. Možná vás pár novinek zaujme.

První je moje oblíbené vkládání klíčů přímo do konfiguračního souboru. Tím dosáhneme toho, že uživatel dostává jeden jediný soubor (typicky s příponou .ovpn) a může se připojit velmi jednoduše bez vymýšlení, kam soubor dal, a jestli není potřeba nastavit nějaké cesty k ostatním souborům. Syntaxe je následující:

<ca>
-----BEGIN CERTIFICATE-----
.......
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
....
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
.....
-----END PRIVATE KEY-----
</key>

Jinak řečeno místo parametrů ca, cert a key, které odkazují na soubory vložíte obsah souboru přímo do konfiguračního souboru OpenVPN. Zvláště pro uživatele na Microsoft Windows je to velké zjednodušení.

Není problém tyto parametry různě kombinovat, pokud např. chcete mít privátní klíč lépe chráněný v zvláštním souboru a nebo pokud vložíte do konfiguračního souboru jen certifikát certifikační autority a necháte v souborech klíče uživatelů. Podporovány jsou následující parametry: ca, cert, dh, extra-certs, key, pkcs12, secrettls-auth.

Když zmiňuji Microsoft Windows, tam můžete klíče uživatelů vložit do systémového úložiště certifikátů, které je přeci jen chráněno lépe než soubory na disku a certifikát odkázat z konfiguračního souboru pomocí jeho otisku a nebo jména následujícím způsobem:

cryptoapicert "THUMB:<cert_thumb>"

nebo

cryptoapicert "SUBJ:<cert_subject>"

Hodnotu pro THUMB lze získat asi jen po importu certifikátu do úložiště a zobrazení jeho vlastností (v češtině se položka jmenuje „Kryptografický otisk“). Pokud použijeme SUBJ, je situace jednodušší. Ten si můžeme zobrazit přes příkaz openssl:

$ openssl x509 -in certifikat.crt -noout -subject

Lomítka a názvy položek ve výpise nahradit čárkami, např.:

/C=CZ/ST=Czech Republic/L=Prague/O=Root.cz/CN=root1

převedeme na

CZ, Czech Republic, Prague, Root.cz, root1

a do konfiguračního souboru tedy vložíme

cryptoapicert "SUBJ:CZ, Czech Republic, Prague, Root.cz, root1"

Dodatek: Jak správně podotkl Ind v diskuzi pod článkem, THUMB lze zjistit i bez klikání následujícím způsobem:

$ openssl x509 -sha1 -fingerprint -in cert.pem \
-out /dev/null | sed 's/:/ /g' | tr '[:upper:]' '[:lower:]'

Jedná se o SHA1 otisk zbavený dvojteček a převedený na malé znaky.

Další konfigurační volba připomínající HTML tag se používá pro sdružování parametrů pro spojení s vzdáleným serverem. Můžeme totiž narazit na sítě, které blokují různé porty a tak si připravíme na straně serveru více OpenVPN démonů s různými konfiguracemi. A uživatele pak vyšleme do světa s konfiguračním souborem, který umí všechna připojení najednou a postupně je vyzkouší, dokud spojení neproběhne úspěšně. Může to vypadat např. takto:

<connection>
remote vpn.firma.cz 1194 udp
</connection>

<connection>
remote vpn.firma.cz 443 tcp
</connection>

<connection>
remote 1.1.1.1 443 tcp
</connection>

V tomto případě se použije v první řadě klasické spojení na port 1194 protokolem udp, pokud není úspěšné, tak se zkusí port pro https a tcp spojení a na závěr se pro klienty, kteří nemají přístup k DNS zkusíme spojit na IP adresu naší brány bez použití DNS. Vždy je ale dobré tam mít jako preferovanou variantu s použitím DNS, protože pokud přestěhujete VPN server, nebudete muset hned obíhat všechny klienty a odpadnou vám jen ti, kteří se z nějakého důvodu spojují přímo na IP adresu.

ict ve školství 24

Na závěr snad ještě osobní zkušenost, OpenVPN už umí IPv6 a opravdu to funguje. Jen krátká ukázka konfigurace:

tun-ipv6
server-ipv6 2a01:ffff:aaaa:bbbb::/64
push "route-ipv6 2000::/3"
push "tun-ipv6"

Routu 2000::/3 klientům posílám, protože jsou často v síti, kde IPv6 nefunguje na 100 %, takže je lepší jim stáhnout všechen IPv6 provoz do tunelu. Je to obdobné řešení jako redirect-gateway pro IPv4 provoz.

Autor článku

Dan Ohnesorg pracuje jako systémový administrátor, správce sítí a příležitostný programátor v jazycích, pro které se nedá najít nikdo, kdo by je znal.