Lanĉu OpenVPN en Docker en 2 sekundoj

Saluton, Ĥabrovskanoj! Ĉu vi iam renkontis situacion, kiam vi vere volis esti praktike transportita al alia urbo, lando aŭ kontinento? Mi havas ĉi tiun bezonon sufiĉe ofte, do la ŝanco havi mian propran VPN-servilon, kiu povas esti lanĉita ie ajn, en kelkaj sekundoj, estis sufiĉe urĝa.En ĉi tiu artikolo mi volas paroli pri mia projekto, kiun mi konceptis kiam mi estis serĉante pretan solvon, ĉi-kaze Docker bildon, kiu permesus al vi rapide agordi OpenVPN-servilon, kun minimumo da agordoj kaj akceptebla nivelo de sekureco.

Lanĉu OpenVPN en Docker en 2 sekundoj

antaŭhistorio

La kapablo funkciigi la servon en iu ajn maŝino - ĉu ĝi estas fizika servilo, ĉu virtuala privata servilo, aŭ eĉ kontenerspaco ene de alia kontenera administradsistemo - estis kritika. Mia rigardo tuj falis sur Docker. Unue, ĉi tiu servo gajnas popularecon, kaj tial pli kaj pli da provizantoj provizas pretajn solvojn per sia antaŭinstalado; due, ekzistas centralizita stokado de bildoj de kie vi povas elŝuti kaj ruli la servon uzante unu komandon en la terminalo. Venis al mi la ideo, ke tia projekto jam ekzistus, kaj mi multe serĉis. Sed la plej multaj el la projektoj, kiujn mi trovis, estis aŭ tro ĝenaj (oni devis krei ujon por konstanta konservado de datumoj kaj lanĉi la ujon kun la aplikaĵo plurfoje kun malsamaj parametroj), aŭ sen prudenta dokumentado, aŭ tute forlasitaj. Ne trovi ion akcepteblan. , mi komencis labori pri via projekto. Estis sendormaj noktoj antaŭ studado de dokumentado, skribado de kodo kaj senararigado, sed finfine mia servo vidis la lumon de la tago kaj komencis brili per ĉiuj koloroj de la monokromata LED-panelo de la enkursigilo. Do, mi petas vin ami kaj favori - Docker-OpenVPN. Mi eĉ elpensis emblemon (supre, antaŭ la tranĉo), sed ne juĝu ĝin strikte, ĉar mi ne estas (plu) dezajnisto.Kiam mi efektivigis ĉi tiun projekton, mi prioritatis la rapidecon de deplojo, minimume de agordojn kaj akcepteblan nivelon de sekureco. Per provo kaj eraro, mi trovis la optimuman ekvilibron de ĉi tiuj kriterioj, tamen, en kelkaj lokoj mi devis oferi deplojrapidecon pro sekureco, kaj por la minimumo de agordoj mi devis pagi por porteblo: en la nuna agordo, ujo iam kreita sur unu servilo ne povas esti translokigita kaj lanĉita sur alia. Ekzemple, ĉiuj atestiloj pri kliento kaj servilo estas generitaj kiam la servo komenciĝas kaj tio daŭros ĉirkaŭ 2 sekundojn. Tamen, la generacio de la Hellman Defi-dosiero devis esti prenita en konstrutempon: ĝi estas kreita dum la konstruado de la docker-bildo kaj povas daŭri ĝis 10 minutojn. Mi tre ŝatus ricevi sekurecan revizion de tia solvo de la respektata komunumo.

Lanĉu

Por komenci la servon ni bezonas plurajn aferojn:

  1. Servilo: fizika aŭ virtuala. Estas teorie eble ruli en docker-ene-docker reĝimo, sed mi ne amplekse testis ĉi tiun opcion;
  2. Fakte Docker. Multaj gastigaj provizantoj provizas pretajn solvojn kun Docker surŝipe;
  3. Publika IP-adreso.

Se ĉiuj detaloj estas en la loko, tiam ĉio, kion ni devas fari, estas ruli la sekvan komandon en la konzolo de via servilo:

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

Atenta leganto eble rimarkis, ke la servila IP-adreso estas aŭtomate determinita uzante ipify.org. Se ial ĉi tio ne funkcias, tiam vi povas specifi la adreson permane.Se ĉiuj antaŭaj paŝoj estis plenumitaj ĝuste, tiam ni devus vidi ion similan en la konzolo:

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!

Ni estas proksimaj al la celo: nun ni devas kopii example.com (en via kazo ĝi estos la adreso de via servilo) kaj algluu ĝin en la adresbreton de via retumilo. Post kiam vi premas Enter, la dosiero client.ovpn estos elŝutita, kaj la http-servilo mem malaperos en forgeson. Se ĉi tiu solvo estas en dubo, vi povas uzi la sekvan lertaĵon: rulu la antaŭan komandon kaj aldonu flagojn zp kaj pasvorto. Nun, se vi algluas la generitan ligilon en retumila fenestro, vi ricevos zip-arkivon kun pasvorto. Post kiam vi havas klientan agordan dosieron, vi povas uzi ajnan taŭgan klienton. Mi uzas Tunnelblick por Mac.

Videolernilo

Ĉi tiu videolernilo enhavas detalajn instrukciojn por disfaldi la servon sur DigitalOcean.

PS Se vi trovas ĉi tiun projekton utila, bonvolu doni al ĝi stelon en GitHub, forku ĝin kaj diru al viaj amikoj. Kontribuantoj kaj sekureckontroloj ankaŭ estas vaste bonvenigitaj.PPS Se ĉi tiu artikolo finiĝas sur Habr, tiam mi planas skribi la sekvan pri kiel mi lanĉis docker-in-docker kaj docker-in-docker-in-docker, kial mi faris ĝin kaj kio eliris el ĝi.
REDAKTO1:

  1. Korektitaj eraroj en la publikigo,
  2. Respondante al komentoj, mi decidis meti ĉi tiun informon ĉi tie: la —privileged flago estas necesa por labori kun iptables.

REDAKTO2:

  1. Plibonigita la bildo-lanĉa komando: nun ĝi ne postulas la –privilegian flagon
  2. Aldonis ligilon al la ruslingva videogvidilo: youtu.be/A8zvrHsT9A0

fonto: www.habr.com

Aldoni komenton