Docker дээр OpenVPN-г 2 секундын дотор ажиллуул

Сайн байна уу, Хабаровскийн оршин суугчид! Та үнэхээр өөр хот, улс, тив рүү зөөвөрлөхийг үнэхээр хүсч байсан нөхцөл байдалтай тулгарч байсан уу? Надад ийм хэрэгцээ байнга тулгардаг тул хаана ч, хэдхэн секундын дотор ажиллуулж болох өөрийн VPN сервертэй болох боломж маш яаралтай байсан.Энэ нийтлэлд би өөрийн байхдаа бодож байсан төслийнхөө талаар ярихыг хүсч байна. бэлэн шийдлийг хайж байгаа бол энэ тохиолдолд Docker нь хамгийн бага тохиргоо, аюулгүй байдлын хүлээн зөвшөөрөгдсөн түвшний OpenVPN серверийг хурдан тохируулах боломжийг танд олгоно.

Docker дээр OpenVPN-г 2 секундын дотор ажиллуул

Эрьт урьдын түүх

Энэ үйлчилгээг физик сервер эсвэл виртуал хувийн сервер, эсвэл өөр контейнер удирдлагын систем доторх чингэлэгийн зай ч бай аль ч машин дээр ажиллуулах чадвар маш чухал байсан. Миний харц тэр даруй Докер руу тусав. Нэгдүгээрт, энэ үйлчилгээ түгээмэл болж байгаа тул илүү олон үйлчилгээ үзүүлэгчид урьдчилан суулгасан бэлэн шийдлүүдийг санал болгож байна; хоёрдугаарт, терминал дээрх нэг командыг ашиглан үйлчилгээг татан авч ажиллуулах боломжтой зургийн төвлөрсөн хадгалалт байдаг. Ийм төсөл аль хэдийн байх ёстой гэсэн санаа төрж, би маш их хайсан. Гэхдээ миний олж мэдсэн төслүүдийн ихэнх нь хэтэрхий төвөгтэй байсан (та байнгын өгөгдөл хадгалах зориулалттай контейнер үүсгэж, өөр өөр параметр бүхий програмтай контейнерийг хэд хэдэн удаа эхлүүлэх шаардлагатай байсан), эсвэл эрүүл мэндийн баримт бичиггүй эсвэл бүрмөсөн орхигдсон. Хүлээн зөвшөөрөгдөх зүйл олдсонгүй. , Би таны төсөл дээр ажиллаж эхэлсэн. Баримт бичгийг судлах, код бичих, дибаг хийхээс өмнө нойргүй хоносон байсан ч эцэст нь миний үйлчилгээ өдрийн гэрлийг харж, чиглүүлэгчийн монохром LED самбарын бүх өнгөөр ​​гялалзаж эхлэв. Тиймээс би танаас хайрлаж, ивээхийг хүсч байна - Docker-OpenVPN. Би бүр лого (дээр, зүсэхээс өмнө) хүртэл гаргаж ирсэн, гэхдээ би дизайнер биш (цаашид) учраас үүнийг хатуу бүү шүүмжил.Би энэ төслийг хэрэгжүүлэхдээ байршуулах хурдыг, хамгийн багадаа тохиргоо болон аюулгүй байдлын зөвшөөрөгдөх түвшин. Туршилт, алдааны үр дүнд би эдгээр шалгууруудын оновчтой тэнцвэрийг олсон боловч зарим газар аюулгүй байдлын үүднээс байршуулалтын хурдыг золиослох шаардлагатай болсон бөгөөд би хамгийн бага тохиргооны хувьд зөөврийн төлбөр төлөх шаардлагатай болсон: одоогийн тохиргоонд, Нэг сервер дээр үүсгэсэн контейнерийг нөгөө серверт шилжүүлж, эхлүүлэх боломжгүй. Жишээлбэл, үйлчилгээ эхлэхэд бүх клиент болон серверийн сертификатууд үүсдэг бөгөөд үүнд 2 секунд зарцуулагдана. Гэсэн хэдий ч Hellman Defi файлыг бүтээхэд зориулж бүтээх хугацаа шаардлагатай байсан: энэ нь докерын дүрсийг бүтээх явцад бүтээгдсэн бөгөөд 10 хүртэл минут үргэлжлэх боломжтой. Би ийм шийдлийн аюулгүй байдлын аудитыг нэр хүндтэй нийгэмлэгээс авахыг үнэхээр хүсч байна.

Ажиллуулах

Үйлчилгээг эхлүүлэхийн тулд бидэнд хэд хэдэн зүйл хэрэгтэй:

  1. Сервер: физик эсвэл виртуал. Онолын хувьд docker-within-docker горимд ажиллах боломжтой, гэхдээ би энэ сонголтыг өргөнөөр туршиж үзээгүй;
  2. Үнэндээ Докер. Олон хостинг үйлчилгээ үзүүлэгчид Докер дээр бэлэн шийдлүүдийг санал болгодог;
  3. Нийтийн IP хаяг.

Хэрэв бүх нарийн ширийн зүйл байгаа бол серверийнхээ консол дээр дараах тушаалыг ажиллуулахад л хангалттай.

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

Анхааралтай уншигч серверийн IP хаягийг ашиглан автоматаар тодорхойлогддогийг анзаарсан байх ipify.org. Хэрэв ямар нэг шалтгааны улмаас энэ нь ажиллахгүй бол та хаягийг гараар зааж өгч болно. Хэрэв өмнөх бүх алхмууд зөв хийгдсэн бол консол дээр үүнтэй төстэй зүйл харагдах болно:

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!

Бид зорилгодоо ойрхон байна: одоо бид хуулбарлах хэрэгтэй example.com (таны тохиолдолд энэ нь таны серверийн хаяг байх болно) мөн хөтчийнхөө хаягийн мөрөнд буулгана уу. Enter товчийг дарсны дараа client.ovpn файлыг татаж авах ба http сервер өөрөө мартагдах болно. Хэрэв энэ шийдэл эргэлзэж байвал та дараах заль мэхийг ашиглаж болно: өмнөх тушаалыг ажиллуулж, туг нэмнэ үү zp болон нууц үг. Одоо, хэрэв та үүсгэсэн холбоосыг хөтчийн цонхонд буулгавал нууц үг бүхий зип архив хүлээн авах болно.Та үйлчлүүлэгчийн тохиргооны файлтай болсны дараа та тохирох клиентийг ашиглаж болно. Би Mac-д зориулсан Tunnelblick ашигладаг.

Видео заавар

Энэхүү видео заавар нь DigitalOcean дээр үйлчилгээг ашиглах дэлгэрэнгүй зааврыг агуулдаг.

PS Хэрэв танд энэ төсөл хэрэгтэй гэж бодож байвал GitHub дээр од өгөөд, сэрээгээд найзууддаа хэлээрэй. Мөн хувь нэмэр оруулагчид болон аюулгүй байдлын аудитыг өргөнөөр хүлээн авдаг.PPS Хэрэв энэ нийтлэл Хабр дээр дуусвал би docker-in-docker болон docker-in-docker-in-docker-ийг хэрхэн эхлүүлсэн, яагаад үүнийг хийсэн, үүнээс юу гарсан талаар дараагийн нийтлэлийг бичихээр төлөвлөж байна.
EDIT1:

  1. Нийтлэлийн алдааг зассан,
  2. Сэтгэгдэлд хариулахдаа би энэ мэдээллийг энд оруулахаар шийдсэн: iptables-тэй ажиллахын тулд давуу эрхтэй туг хэрэгтэй.

EDIT2:

  1. Зургийг эхлүүлэх командыг сайжруулсан: одоо энэ нь давуу эрхтэй туг шаарддаггүй
  2. Орос хэл дээрх видео гарын авлагын холбоосыг нэмсэн: youtu.be/A8zvrHsT9A0

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх