Přehled
Tento příspěvek popisuje postup, jak nainstalovat a hostovat server OpenVPN pomocí Docker. To znamená, že budeme moci použít Docker k instalaci serveru OpenVPN a jeho spuštění jako služby, generování konfigurací připojení klientů a certifikátů, které pak můžeme použít k připojení více klientů na náš server VPN. Tato metoda funguje na jakékoli distribuci Linuxu, která má nainstalovaný a spuštěný Docker.
POZNÁMKA – Toto nastavení je pro prostředí bez hesla, což znamená – klient nebude používat uživatelské jméno a heslo pro připojení k serveru, místo toho bude používat klientské certifikáty pro připojení.
Pokud se vám řešení nelíbí nebo dáváte přednost jiné metodě, stejný proces jsme pokryli také s Wireguard a Docker. Můžete se na to podívat v tomto příspěvku.
Předpoklady:
– Docker nainstalován a spuštěn – pokud není nainstalován, zkontrolujte tento příspěvek pro pokyny k instalaci Docker na Debian a Ubuntu
– Kontejner Docker, který přejdeme k uživateli – ODKAZ (podívejte se také na další informace, pokud je potřeba)
Instalace kontejneru Docker serveru OpenVPN
1. Prvním krokem je vytvoření kontejneru objemu dat pro OpenVPN, aby mohl ukládat všechna data, konfigurační soubory a certifikáty. Doporučuje se přidat předponu „ovpn-data-“ a na konec přidat další požadované slovo. Například by to mělo vypadat nějak takto – ovpn-data-example. A slovo příklad nahradíte čím chcete.
V terminálu tedy spusťte příkaz:
OVPN_DATA="ovpn-data-example"
Nyní vytvoříme kontejner objemu dat:
docker volume create --name $OVPN_DATA
Poznámka – pokud jste Dockeru nepřidali zvýšená oprávnění na hostitele Linuxu, budete muset přidat sudo pokaždé, když budete chtít spouštět příkazy dockeru.
2. Poté si stáhněte soubor obrázku dokovacího zařízení OpenVPN s argumentem pro jeho nastavení tak, aby používal veřejnou IP adresu vašeho serveru (hostitele) nebo název vaší domény prostřednictvím protokolu UDP (lze také použít protokol TCP):
docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://VPN.SERVERNAME.COM
Nahraďte VPN.SERVENAME.COM svou veřejnou IP adresou nebo názvem domény, který jste si zaregistrovali a nasměrovali na váš server. Toto je nastavení, pokud hostujete svůj server v cloudu (jako AWS, Azure, UpCloud, Digital Ocean, Linode atd.).
Pro možnost vlastního hostování doma – to platí také v případě, že máte statickou veřejnou IP adresu, a navíc budete muset provést přesměrování portů na vašem routeru (modemu), aby ukazoval na váš hostitel (server). Pokud nemáte statickou IP adresu, budete muset použít dynamický DNS.
Generování a načítání certifikátu CA a klientských certifikátů
3. Nyní musíme iniciovat náš systém PKI, abychom vygenerovali certifikát CA pro náš server a také klientské certifikáty:
docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn ovpn_initpki
Následuj instrukce. Pokud plánujete nainstalovat OpenVPN na cloudový server, který má omezené zdroje (například 1 CPU a 1 GB RAM), může vygenerování certifikátu serveru CA chvíli trvat (cca 15 minut).
Když spustíte PKI pro OpenVPN, nejprve vás požádá o zadání hesla pro certifikát CA.
DŮLEŽITÁ POZNÁMKA – Heslo CA si někam zapište, budete ho potřebovat později během procesu nastavení a pokaždé, když generujete klientský certifikát.
Dále vás požádá o zadání názvu CA. Můžete zadat cokoli.
Proces generování CA bude chvíli trvat.
Po dokončení vygeneruje soukromý klíč a znovu požádá o zadání přístupové fráze CA, kterou jste zadali dříve. Dvakrát vás vyzve k zadání hesla.
Vygenerovaný certifikát CA bude platný po dobu následujících 3 let.
Spusťte službu serveru OpenVPN
4. Spuštěním příkazu Docker spusťte kontejner OpenVPN:
docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
Poznámka – argument v příkazu -p 1194:1194/udp – také důležitá součást tohoto nastavení. Tento argument nastaví naše OpenVNP, na kterém portu naslouchat a používat k navázání komunikace mezi serverem a klientem. V příkazu výše je nastaveno použití portu 1194 (levé číslo pro kontejner Docker a pravé číslo pro hostitelský server), protože OpenVPN ve výchozím nastavení používá číslo portu 1194 přes protokol UDP. Změňte toto číslo, pokud plánujete použít jiné číslo portu.
Vygenerujte klientský certifikát a extrahujte konfigurační soubor klienta z kontejneru na hostitele
5. Spuštěním tohoto příkazu vygenerujete certifikát pro klientské zařízení:
docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass
Argument CLIENTNAME v příkazu výše můžete nahradit tím, co chcete. To je pro název souboru certifikátu a pro identifikaci klienta. Příkaz také vygeneruje certifikát bez hesla. Certifikát bude umístěn v domovském adresáři uživatele v souborovém systému hostitelů (uživatelské jméno, které používáte k přihlášení k hostiteli prostřednictvím SSH), NIKOLI v kontejneru Docker.
Při generování klientských certifikátů vás OpenVPN vyzve k zadání přístupového hesla CA.
POZNÁMKA – Vygenerované certifikáty, jak je vidět na obrázcích, vydrží 3 roky od doby, kdy jste je vytvořili.
6. Spuštěním tohoto příkazu zkompilujte konfigurační soubor připojení OpenVPN a načtěte jej z kontejneru Docker na hostitelský server
docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn
Poté budete potřebovat klienta FTP, SFTP nebo SCP pro připojení k hostitelskému serveru a stažení souboru OpenVPN a jeho použití pro připojení k serveru VPN.
Připojte se k serveru OpenVPN
Abyste se mohli připojit k vašemu serveru VPN, budete muset nainstalovat klienta OpenVPN. Existují klientské aplikace pro Windows a Android – OpenVPN connect. V aplikaci stačí importovat soubor openvpn jako nový profil a připojit se.
Samozřejmě existuje klient pro linux. Správce sítě na Linuxu podporuje OpenVPN, ale požaduje import všech certifikátů samostatně. Pro jednoduchost tedy doporučuji nainstalovat i klienta aplikace. V distribucích Debian a Ubuntu:
$ sudo apt install openvpn
Jakmile je nainstalován, přejděte do umístění, kde je umístěn soubor certifikátu, a spusťte příkaz:
$ sudo openvpn ./CLIENTNAME.ovpn
Výsledek úspěšného připojení by měl vypadat takto
Ujistěte se, že máte otevřené vhodné porty pro váš server
Také důležitá poznámka, aby to fungovalo. Pokud to plánujete hostit v cloudu nebo pokud jste na svůj server nainstalovali bránu firewall, musíte otevřít a povolit porty, které jste svému OpenVPN serveru přiřadili.
V tomto případě je server v cloudu a potřeboval jsem otevřít porty 1194 pro protokol UDP na firewallu.
Připojit více klientů
Pomocí tohoto nastavení můžete připojit více klientů. Jednou z metod je použití jednoho certifikátu na více zařízeních, ale tato metoda je méně bezpečná. K tomu budete potřebovat přístup ke konfiguračnímu souboru serveru OpenVPN umístěného v kontejneru Docker a přidat argument:
duplicate-cn
Doporučuji vystavit/vygenerovat nový samostatný certifikát pro každého klienta. Abyste toho dosáhli, musíte zopakovat několik příkazů:
Znovu spusťte svazek dockeru pro OpenVPN.
OVPN_DATA="ovpn-data-example" docker volume create --name $OVPN_DATA
Poté vygenerujte nový klientský certifikát, ale místo CLIENTNAME:
použijte jiný názevdocker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass
a samozřejmě načtěte konfigurační soubor OpenVPN a stáhněte si soubor:
docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn
Shrnutí
Zabývali jsme se procesem instalace OpenVPN pomocí Dockeru, hostováním OpenVPN pomocí Dockeru, spuštěním systému PKI, generováním certifikátu CA a klientského certifikátu a postupem připojení. Osobně se mi toto nastavení líbí, zaprvé kvůli snadnému použití, správě a tomu, jak má nastavení docela vysokou bezpečnost na straně serveru i klienta. Všechny rekvizity a uznání patří KyleMannovi za vybudování tak úžasné image Dockeru.