Sveiki, Habrovskas iedzÄ«votÄji! Vai esat kÄdreiz saskÄruÅ”ies ar situÄciju, kad patieÅ”Äm vÄlÄjÄties bÅ«t virtuÄli pÄrvestam uz citu pilsÄtu, valsti vai kontinentu? Man Ŕī vajadzÄ«ba rodas diezgan bieži, tÄpÄc iespÄja iegÅ«t savu VPN serveri, kuru var palaist jebkurÄ vietÄ, pÄris sekundÄs, bija diezgan steidzama. Å ajÄ rakstÄ es vÄlos pastÄstÄ«t par savu projektu, kuru es iecerÄju, kad biju meklÄ gatavu risinÄjumu, Å”ajÄ gadÄ«jumÄ Docker attÄlu, kas ļautu Ätri iestatÄ«t OpenVPN serveri, ar minimÄliem iestatÄ«jumiem un pieÅemamu droŔības lÄ«meni.
AizvÄsture
SpÄja palaist pakalpojumu jebkurÄ datorÄ ā vai tas bÅ«tu fizisks serveris vai virtuÄls privÄtais serveris, vai pat konteineru telpa citÄ konteineru pÄrvaldÄ«bas sistÄmÄ ā bija ļoti svarÄ«ga. Mans skatiens uzreiz nokrita uz Dokeru. PirmkÄrt, Å”is pakalpojums gÅ«st popularitÄti, un tÄpÄc arvien vairÄk pakalpojumu sniedzÄju nodroÅ”ina gatavus risinÄjumus ar tÄ iepriekÅ”Äju uzstÄdÄ«Å”anu; otrkÄrt, ir centralizÄta attÄlu krÄtuve, no kuras varat lejupielÄdÄt un palaist pakalpojumu, izmantojot vienu komandu terminÄlÄ«. Man radÄs doma, ka Å”Ädam projektam jau vajadzÄtu pastÄvÄt, un es cÄ«tÄ«gi meklÄju. Bet lielÄkÄ daļa projektu, ko es atklÄju, bija vai nu pÄrÄk apgrÅ«tinoÅ”i (vajadzÄja izveidot konteineru pastÄvÄ«gai datu glabÄÅ”anai un vairÄkas reizes palaist konteineru ar aplikÄciju ar dažÄdiem parametriem), vai arÄ« bez saprÄtÄ«gas dokumentÄcijas, vai arÄ« pilnÄ«bÄ pamesti. Neatrodot neko pieÅemamu , Es sÄku strÄdÄt pie jÅ«su projekta. Bija bezmiega naktis pirms dokumentÄcijas izpÄtes, koda rakstÄ«Å”anas un atkļūdoÅ”anas, taÄu galu galÄ mans pakalpojums ieraudzÄ«ja dienasgaismu un sÄka mirdzÄt ar visÄm marÅ”rutÄtÄja vienkrÄsainÄ LED paneļa krÄsÄm. TÄpÄc es lÅ«dzu jÅ«s mÄ«lÄt un atbalstÄ«t - Docker-OpenVPN. Es pat izdomÄju logotipu (augÅ”Ä, pirms griezuma), bet nevÄrtÄjiet to stingri, jo es neesmu dizainers (vairs) RealizÄjot Å”o projektu, es par prioritÄti izvirzÄ«ju izvietoÅ”anas Ätrumu, minimÄlo iestatÄ«jumus un pieÅemamu droŔības lÄ«meni. MÄÄ£inot un kļūdoties, es atradu Å”o kritÄriju optimÄlo lÄ«dzsvaru, tomÄr dažviet man nÄcÄs upurÄt izvietoÅ”anas Ätrumu droŔības labad, un par minimÄlajiem iestatÄ«jumiem man bija jÄmaksÄ par pÄrnesamÄ«bu: paÅ”reizÄjÄ konfigurÄcijÄ konteineru, kas izveidots vienÄ serverÄ«, nevar pÄrsÅ«tÄ«t un palaist citÄ. PiemÄram, visi klienta un servera sertifikÄti tiek Ä£enerÄti, kad pakalpojums sÄkas, un tas aizÅems apmÄram 2 sekundes. TomÄr Hellman Defi faila Ä£enerÄÅ”ana bija jÄÅem vÄrÄ izveides laikÄ: tas tiek izveidots dokera attÄla veidoÅ”anas laikÄ un var ilgt lÄ«dz 10 minÅ«tÄm. Ä»oti vÄlÄtos saÅemt Å”Äda risinÄjuma droŔības auditu no cienÄ«jamÄs sabiedrÄ«bas.
ŠŠ°ŠæŃŃŠŗ
Lai sÄktu pakalpojumu, mums ir nepiecieÅ”amas vairÄkas lietas:
Serveris: fiziskais vai virtuÄlais. TeorÄtiski ir iespÄjams darboties režīmÄ docker-in-docker, bet es neesmu plaÅ”i pÄrbaudÄ«jis Å”o iespÄju;
PatiesÄ«bÄ Docker. Daudzi mitinÄÅ”anas pakalpojumu sniedzÄji nodroÅ”ina gatavus risinÄjumus ar Docker;
PubliskÄ IP adrese.
Ja visa informÄcija ir norÄdÄ«ta, viss, kas mums jÄdara, ir jÅ«su servera konsolÄ palaist Å”Ädu komandu:
UzmanÄ«gs lasÄ«tÄjs varÄtu bÅ«t pamanÄ«jis, ka servera IP adrese tiek noteikta automÄtiski, izmantojot ipify.org. Ja kÄda iemesla dÄļ tas nedarbojas, varat norÄdÄ«t adresi manuÄli. Ja visas iepriekÅ”ÄjÄs darbÄ«bas tika veiktas pareizi, tad konsolÄ vajadzÄtu redzÄt kaut ko lÄ«dzÄ«gu:
Sun Jun 9 08:56:11 2019 Initialization Sequence Completed
Sun Jun 9 08:56:12 2019 Client.ovpn file has been generated
Sun Jun 9 08:56:12 2019 Config server started, download your client.ovpn config at http://example.com/
Sun Jun 9 08:56:12 2019 NOTE: After you download you client config, http server will be shut down!
MÄs esam tuvu mÄrÄ·im: tagad mums ir jÄkopÄ example.com (jÅ«su gadÄ«jumÄ tÄ bÅ«s jÅ«su servera adrese) un ielÄ«mÄjiet to pÄrlÅ«kprogrammas adreses joslÄ. PÄc Enter nospieÅ”anas tiks lejupielÄdÄts fails client.ovpn, un pats http serveris pazudÄ«s aizmirstÄ«bÄ. Ja rodas Å”aubas par Å”o risinÄjumu, varat izmantot Å”Ädu triku: palaidiet iepriekÅ”Äjo komandu un pievienojiet karogus zp un paroli. Tagad, ielÄ«mÄjot Ä£enerÄto saiti pÄrlÅ«kprogrammas logÄ, jÅ«s saÅemsiet zip arhÄ«vu ar paroli. Kad jums ir klienta konfigurÄcijas fails, varat izmantot jebkuru piemÄrotu klientu. Es izmantoju Tunnelblick for Mac.
Video pamÄcÄ«ba
Å ajÄ video pamÄcÄ«bÄ ir ietverti detalizÄti norÄdÄ«jumi par pakalpojuma izvietoÅ”anu DigitalOcean.
PS Ja Å”is projekts jums Ŕķiet noderÄ«gs, lÅ«dzu, pieŔķiriet tam zvaigznÄ«ti vietnÄ GitHub, dakÅ”a un pastÄstiet draugiem. PlaÅ”i atzinÄ«gi tiek vÄrtÄti arÄ« ieguldÄ«tÄji un droŔības auditi.PPS Ja Å”is raksts nonÄks Habr, tad es plÄnoju rakstÄ«t nÄkamo par to, kÄ es palaižu docker-in-docker un docker-in-docker-in-docker, kÄpÄc es to izdarÄ«ju un kas no tÄ iznÄca. EDIT1:
Izlabotas kļūdas publikÄcijÄ,
Atbildot uz komentÄriem, es nolÄmu ievietot Å”o informÄciju Å”eit: lai strÄdÄtu ar iptables, ir nepiecieÅ”ams priviliÄ£Ätais karogs
EDIT2:
Uzlabota attÄla palaiÅ”anas komanda: tagad tai nav nepiecieÅ”ams priviliÄ£Ätais karogs