Përshëndetje, habrovianë! A keni përjetuar ndonjëherë situatën kur dëshironit me të vërtetë të transportoheshit virtualisht në një qytet tjetër, vend tjetër apo kontinent tjetër? Mua më ndodh mjaft shpesh, prandaj nevoja për të patur një server VPN timin, që mund ta nisja kudo, brenda pak sekondash, ka qenë mjaft e rëndësishme. Në këtë artikull, dëshiroj të flas për projektin tim, që e kam menduar kur kërkoja një zgjidhje gati, në këtë rast një imazh docker, që do të lejonte ngritjen e shpejtë të një serveri OpenVPN, me minimum të konfigurimeve dhe një nivel të pranueshëm sigurie.
Historia e mëparshme
Mundësia për të nisur shërbimin në çdo makinë: qoftë server fizik, apo server virtual privat, apo madje një hapësirë konteinerike brenda një sistemi tjetër të menaxhimit të konteinerëve—ishte kritikisht e rëndësishme. Vëmendja ime ra menjëherë në Docker. Së pari, ky shërbim po fiton popullaritet, dhe si rezultat, gjithnjë e më shumë ofrues ofrojnë zgjidhje gati me instalimin e tij; së dyti—ka një depo të centralizuar imazhesh, nga e cila mund të shkarkoni dhe nisni shërbimin me një komandë në terminal. Mendimi që një projekt i tillë duhet të ekzistonte tashmë më vizitoi, dhe unë vazhdimisht kërkoja. Por, shumica e projekteve që gjeja ishin ose tepër të ngatërruara (duhej të krijohej një konteiner për ruajtjen e përhershme të të dhënave dhe disa herë të nistej konteineri me aplikacionin me parametra të ndryshëm), ose pa dokumentacion të arsyeshëm, ose krejtësisht të braktisura. Pasi nuk gjeta asgjë të pranueshme, fillova punën në projektin tim. Para meje ishin net pa gjumë studimi i dokumentacionit, shkrimi i kodit dhe debugimi, por në fund, shërbimi im pa dritë dhe filloi të shkëlqejë me të gjitha ngjyrat e panelit LED monokrom të router-it. Pra, ju lutem, prisni me dashuri— . Kam e shpikur një logo (më sipër, para ndarjes), por mos e gjykoni rëndë, sepse unë nuk jam dizajner (më parë). Kur e realizova këtë projekt, vendosa në krye shpejtësinë e vendosjes, minimumin e konfigurimeve dhe një nivel të pranueshëm sigurie. Me metoda provë-dhe-gabim, gjeta një balanc të optimizuar të këtyre kritereve, megjithatë, diku më duhej të sakrifikoj shpejtësinë e vendosjes për shkak të sigurisë, dhe për minimumin e konfigurimeve më duhej të paguaj për portabilitet: në konfigurimin aktual, njëherë e krijuar, kontenieri në një server nuk mund të transferohet dhe të nisë në një tjetër. Për shembull, të gjitha certifikatat klient dhe server krijohen gjatë nisjes së shërbimit dhe kjo zgjat rreth 2 sekonda. Megjithatë, gjenerimi i skedarit të Difi Hellman duhej të ishte bërë gjatë ndërtimit: krijohet gjatë ndërtimit të imazhit docker dhe mund të zgjasë deri në 10 minuta. Do të doja shumë të merrja një audit të sigurisë për një zgjidhje të tillë nga komuniteti i nderuar.
Nisja
Për të nisur shërbimin, na nevojiten disa gjëra:
- Server: fizik ose virtual. Teoretikisht, mund të niset në modalitetin docker-in-docker, por nuk kam kryer testime të mëdha mbi këtë opsion;
- Docker-i vetë. Shumë ofrues shërbimesh hostimi ofrojnë zgjidhje të gatshme me Docker ‘në bord’;
- Një adresë IP publike.
Nëse të gjitha detajet janë në rregull, atëherë na mbetet të nisim komandën e mëposhtme në terminalin e serverit tuaj:
docker run --cap-add=NET_ADMIN
-it -p 1194:1194/udp -p 80:8080/tcp
-e HOST_ADDR=$(curl -s https://api.ipify.org)
alekslitvinenk/openvpnLexuesi i kujdesshëm mund të ketë vërejtur se adresa IP e serverit përcaktohet automatikisht me anë të ipify.org. Nëse për ndonjë arsye kjo nuk funksionon, mund të jepni adresën manualisht. Nëse të gjitha hapat e mëparshëm janë kryer siç duhet, duhet të shohim në terminal diçka të ngjashme:
Diel 9 Qershor 2019 08:56:11 Sezoni i Inizializimit përfundoi
Diel 9 Qershor 2019 08:56:12 Skedari Client.ovpn është krijuar
Diel 9 Qershor 2019 08:56:12 Serveri i konfigurimit filloi, shkarkoni konfigurimin tuaj client.ovpn në http://example.com/
Diel 9 Qershor 2019 08:56:12 VËREJTJE: Pas shkarkimit të konfigurimit tuaj client, shërbimi http do të mbyllet!Jemi afër qëllimit: tani duhet të kopjojmë (në rastin tuaj do të jetë adresa e serverit tuaj) dhe ta vendosni në shiritin e adresës së shfletuesit. Pasi të klikoni Enter, skedari client.ovpn do të shkarkohet dhe serveri http do të shkojë në harresë. Nëse ky zgjidhje shkakton dyshime, mund të përdorni trukun tjetër: të nisni komandën e mëparshme dhe të shtoni flag-at zp dhe fjalëkalimin. Tani, nëse e vendosni lidhjen e gjeneruar në dritaren e shfletuesit — do të merrni një arkiv zip me fjalëkalimin. Kur keni skedarin me konfigurimin e klientit, mund të përdorni çdo klient të përshtatshëm. Unë përdor Tunnelblick për Mac.
Video tutorial
Ky video tutorial përmban një udhëzim të detajuar për vendosjen e shërbimit në DigitalOcean.

EDIT1:
- Korrigjova gabimet në publikim,
- Duke iu përgjigjur komenteve, vendosa të nxjerr këtë informacion këtu: flag —privileged është i nevojshëm për të punuar me iptables
EDIT2:
- Përmirësova komandën e nisjes së imazhit: tani nuk kërkon flag —privileged
- Shtova një lidhje në udhëzimin video në gjuhën ruse:
Burimi: habr.com
