Salam, Habr sakinləri! Heç vaxt digər bir şəhərə, ölkəyə və ya digər bir qitəyə virtual olaraq köçmək istəyiniz olubmu? Bu cür ehtiyaclarım olduqca tez-tez yaranır, ona görə də, harada olursam da, bir neçə saniyə ərzində aktivləşdirə biləcəyim bir VPN serverə sahib olma imkanım olduqca vacibdir. Bu yazıda, hazır bir həll axtararkən düşündüyüm layihəmdən bəhs etmək istəyirəm, bu halda Docker imici ilə, minimum parametrlərlə və qənaətbəxş təhlükəsizliklə OpenVPN serverini tez bir zamanda qaldıra biləcək bir layihə.
Tarixçə
Xidmətin hər hansı bir cihazda işə salınması imkanı: fiziki server, virtual özəl server və ya tamamilə digər konteyner idarəetmə sistemində konteyner məkânı — kritik cəhətdir. Gözüm dərhal Docker-a yönəldi. Birincisi, bu xidmət populyarlıq qazanır, beləliklə daha çox provayder onun əvvəlcədən quraşdırılmış həlləri təqdim edir; ikincisi, mücərrəd imiclərin mərkəzləşdirilmiş anbarı var, buradan bir komanda ilə terminalda xidməti indirmək və işə salmaq mümkündür. Belə bir layihənin artıq mövcud olmalı olduğu fikri məni ziyarət etdi və əzmlə axtarışa çıxdım. Ancaq, tapdığım əksər layihələr ya çox ağır idi (davamlı məlumat saxlama üçün konteyner yaratmaq və fərqli parametrlərlə proqram konteynerini bir neçə dəfə işə salmaq lazım idi), ya da normal sənədləşmə olmurdu, ya da tamamilə tərk edilmişdi. Yaxşı bir şey tapa bilmədiyim üçün layihəm üzərində işləməyə başladım. Qarşıda sənədləşmə öyrənmək, kod yazmaq və debug etmək üçün yuxusuz gecələr var idi, amma nəticədə xidmətim işıq üzü gördü və marşrutlaşdırıcımın monochrom LED paneli ilə bütün rənglərdə parladı. Beləliklə, xahiş edirəm, sevgi və hörmətlə qarşılayın — . Hətta logotip də düşünmüşdüm (yuxarıda, kətan önündə), amma onu sərt mühakimə etməyin, çünki mən dizayner deyiləm (artıq). Bu layihəni həyata keçirərkən, yerləşdirmə sürəti, minimum parametrlər və qənaətbəxş təhlükəsizlik prioritetim idi. Sınama və səhvlərlə bu meyarların optimal balansını tapdım, amma bəzən təhlükəsizlik üçün yerləşdirmə sürətindən imtina etməli oldum, minimum parametrlər qarşılığında daşınabilirlik ödədim: hazırkı konfiqurasiyada bir serverdə yaradılan konteyneri digərinə köçürüb işə salmaq mümkün deyil. Məsələn, bütün müştəri və server sertifikatları xidmət işə salındıqda yaradılır və bu, təxminən 2 saniyə çəkir. Ancaq, Difi-Hellman faylının yaradıcılığını build-time-a köçürməli oldum: bu, docker imicinin toplanması zamanı yaradılır və 10 dəqiqəyə qədər davam edə bilər. Belə bir həllin təhlükəsizlik auditi üçün çox hörmətli cəmiyyətimdən kömək almak istərdim.
İşə salma
Xidmətin işə salınması üçün bir neçə şeyə ehtiyacımız var:
- Server: fiziki və ya virtual. Teorik olaraq, docker-in içində docker rejimində işləmək mümkündür, lakin bu seçimi geniş miqyasda test etməmişəm;
- Özündə Docker. Bir çox hosting provayderi 'daxil edilmiş' Docker ilə hazır həllər təqdim edir;
- Publik IP ünvanı.
Əgər bütün məlumatlar yerindədirsə, növbəti əmri serverinizin konsolunda icra etməliyik:
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/openvpnDiqqətli oxucu, serverin IP ünvanının avtomatik olaraq müəyyən olunduğunu qeyd edə bilər ipify.org. Əgər hər hansı səbəbdən bu işləmirsə, ünvanı əl ilə göstərmək olar. Əgər əvvəlki bütün addımlar düzgün yerinə yetirilibsə, konsolda aşağıdakı kimi bir şey görməliyik:
Sun Jun 9 08:56:11 2019 Initialization Sequence Completed
Sun Jun 9 08:56:12 2019 Client.ovpn faylı yaradılıb
Sun Jun 9 08:56:12 2019 Konfiqurasiya serveri başlandı, client.ovpn konfiqurasiyanızı http://example.com/ adresindən yükləyin
Sun Jun 9 08:56:12 2019 Qeyd: Client konfiqurasiyanızı yüklədikdən sonra http server bağlanacaq!Hədəfə yaxınlaşırıq: indi (sizin vəziyyətinizdə server ünvanınız olacaq) adresini kopyalayıb brauzerinizin adres çubuğuna yapışdırmalısınız. Enter-ə basdıqdan sonra client.ovpn faylı yüklənəcək və http server qapılacaq. Əgər bu həll şübhə doğurursa, aşağıdakı hiylədən istifadə edə bilərsiniz: əvvəlki əmri icra edin və əlavə flaglar əlavə edin zp və parol. İndi, əgər əldə edilmiş bağlantını brauzer pəncərəsində yapışdırarsanız — şifrəli bir zip arxivini əldə edəcəksiniz. Client konfiqurasiya faylınız olduqda, istənilən uyğun müştəridən istifadə edə bilərsiniz. Mən Mac üçün Tunnelblick istifadə edirəm.
Video dərslik
Bu video dərslik, xidmətin DigitalOcean-da qurulmasına dair ətraflı bir təlimat təqdim edir.

EDIT1:
- Dərcdəki səhvləri düzəltdim,
- Şərhlərə cavab olaraq bu məlumatı buraya çıxarmaq qərarına gəldim: iptables ilə işləmək üçün —privileged flag-ı tələb olunur
EDIT2:
- İmajın işə salma əmrini yaxşılaşdırdım: indi —privileged flag-ı tələb etmir
- Rus dilində video rəhbərə bağlantı əlavə etdim:
Mənbə: habr.com
