Ilunsad ang OpenVPN sa Docker sa loob ng 2 segundo

Kumusta, mga residente ng Khabrovsk! Nakaranas ka na ba ng sitwasyon na talagang gusto mong madala sa ibang lungsod, bansa o kontinente? Mayroon akong madalas na pangangailangang ito, kaya ang pagkakataong magkaroon ng sarili kong VPN server, na maaaring ilunsad kahit saan, sa loob ng ilang segundo, ay lubos na kagyat. Sa artikulong ito gusto kong pag-usapan ang tungkol sa aking proyekto, na naisip ko noong naghahanap ng isang handa na solusyon, sa kasong ito Docker isang imahe na magbibigay-daan sa iyo upang mabilis na mag-set up ng isang OpenVPN server, na may minimum na mga setting at isang katanggap-tanggap na antas ng seguridad.

Ilunsad ang OpenVPN sa Docker sa loob ng 2 segundo

prehistory

Ang kakayahang patakbuhin ang serbisyo sa anumang makina - maging isang pisikal na server, o isang virtual na pribadong server, o kahit isang espasyo sa lalagyan sa loob ng isa pang sistema ng pamamahala ng lalagyan - ay kritikal. Bumaba agad ang tingin ko kay Docker. Una, ang serbisyong ito ay nakakakuha ng katanyagan, at samakatuwid ay parami nang parami ang mga provider na nagbibigay ng mga handa na solusyon kasama ang paunang pag-install nito; pangalawa, mayroong isang sentralisadong imbakan ng mga imahe mula sa kung saan maaari mong i-download at patakbuhin ang serbisyo gamit ang isang utos sa terminal. Dumating sa akin ang ideya na dapat na magkaroon ng ganoong proyekto at naghanap ako nang husto. Ngunit karamihan sa mga proyektong nakita ko ay masyadong masalimuot (kailangan mong lumikha ng isang lalagyan para sa permanenteng pag-iimbak ng data at ilunsad ang lalagyan na may application nang maraming beses na may iba't ibang mga parameter), o walang matino na dokumentasyon, o ganap na inabandona. Hindi nakakahanap ng anumang bagay na katanggap-tanggap , nagsimula akong magtrabaho sa iyong proyekto. May mga walang tulog na gabi bago ang pag-aaral ng dokumentasyon, pagsulat ng code at pag-debug, ngunit sa huli ay nakita ng aking serbisyo ang liwanag ng araw at nagsimulang kumislap sa lahat ng mga kulay ng monochrome LED panel ng router. Kaya, hinihiling ko sa iyo na mahalin at pabor - Docker-OpenVPN. Gumawa pa ako ng logo (sa itaas, bago ang hiwa), ngunit huwag mong husgahan ito nang mahigpit, dahil hindi ako isang taga-disenyo (na). Noong ipinatupad ko ang proyektong ito, inuna ko ang bilis ng pag-deploy, isang minimum na mga setting at isang katanggap-tanggap na antas ng seguridad. Sa pamamagitan ng pagsubok at pagkakamali, natagpuan ko ang pinakamainam na balanse ng mga pamantayang ito, gayunpaman, sa ilang mga lugar kailangan kong isakripisyo ang bilis ng pag-deploy para sa kapakanan ng seguridad, at kailangan kong magbayad para sa portability para sa isang minimum na mga setting: sa kasalukuyang pagsasaayos, isang container na kapag ginawa sa isang server ay hindi mailipat at mailunsad sa isa pa. Halimbawa, ang lahat ng mga sertipiko ng kliyente at server ay nabuo kapag nagsimula ang serbisyo at aabutin ito ng humigit-kumulang 2 segundo. Gayunpaman, ang henerasyon ng Hellman Defi file ay kailangang isama sa oras ng pagbuo: ito ay nilikha sa panahon ng pagbuo ng docker na imahe at maaaring tumagal ng hanggang 10 minuto. Gusto ko talagang makatanggap ng security audit ng naturang solusyon mula sa respetadong komunidad.

Ilunsad

Upang simulan ang serbisyo kailangan namin ng ilang bagay:

  1. Server: pisikal o virtual. Sa teoryang posible na tumakbo sa docker-within-docker mode, ngunit hindi ko pa nasubukan ang opsyong ito;
  2. Talagang Docker. Maraming hosting provider ang nagbibigay ng mga handa na solusyon kasama ang Docker na nakasakay;
  3. Pampublikong IP address.

Kung ang lahat ng mga detalye ay nasa lugar, ang kailangan lang nating gawin ay patakbuhin ang sumusunod na command sa console ng iyong server:

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/openvpn

Maaaring napansin ng isang matulungin na mambabasa na awtomatikong tinutukoy ang IP address ng server ipify.org. Kung sa ilang kadahilanan ay hindi ito gumana, maaari mong tukuyin ang address nang manu-mano. Kung ang lahat ng mga naunang hakbang ay nakumpleto nang tama, dapat tayong makakita ng katulad sa console:

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!

Malapit na tayo sa layunin: ngayon kailangan nating kopyahin example.com (sa iyong kaso ito ang magiging address ng iyong server) at i-paste ito sa address bar ng iyong browser. Pagkatapos mong pindutin ang Enter, ang client.ovpn file ay mada-download, at ang http server mismo ay mawawala sa limot. Kung may pagdududa ang solusyon na ito, maaari mong gamitin ang sumusunod na trick: patakbuhin ang nakaraang command at magdagdag ng mga flag zp at password. Ngayon, kung i-paste mo ang nabuong link sa isang browser window, makakatanggap ka ng zip archive na may password. Kapag mayroon ka nang client configuration file, maaari mong gamitin ang anumang naaangkop na client. Gumagamit ako ng Tunnelblick para sa Mac.

Video tutorial

Ang video tutorial na ito ay naglalaman ng mga detalyadong tagubilin para sa pag-deploy ng serbisyo sa DigitalOcean.

PS Kung nakita mong kapaki-pakinabang ang proyektong ito, mangyaring bigyan ito ng bituin sa GitHub, i-fork ito at sabihin sa iyong mga kaibigan. Ang mga nag-aambag at pag-audit ng seguridad ay malawak ding tinatanggap.Pps Kung magtatapos ang artikulong ito sa Habr, plano kong isulat ang susunod tungkol sa kung paano ko inilunsad ang docker-in-docker at docker-in-docker-in-docker, kung bakit ko ito ginawa at kung ano ang lumabas dito.
EDIT1:

  1. Naitama ang mga pagkakamali sa publikasyon,
  2. Bilang pagtugon sa mga komento, nagpasya akong ilagay ang impormasyong ito dito: ang β€”privileged flag ay kailangan upang gumana sa iptables

EDIT2:

  1. Pinahusay ang utos ng paglulunsad ng imahe: ngayon ay hindi na ito nangangailangan ng –privileged flag
  2. Nagdagdag ng link sa gabay sa video sa wikang Ruso: youtu.be/A8zvrHsT9A0

Pinagmulan: www.habr.com

Magdagdag ng komento