Lancarkan OpenVPN dalam Docker dalam 2 saat

Hello, penduduk Khabrovsk! Pernahkah anda menghadapi situasi apabila anda benar-benar mahu diangkut secara maya ke bandar, negara atau benua lain? Saya mempunyai keperluan ini agak kerap, jadi peluang untuk mempunyai pelayan VPN saya sendiri, yang boleh dilancarkan di mana-mana sahaja, dalam beberapa saat, agak mendesak. Dalam artikel ini saya ingin bercakap tentang projek saya, yang saya fikirkan semasa saya mencari penyelesaian sedia, dalam kes ini Docker imej yang membolehkan anda menyediakan pelayan OpenVPN dengan cepat, dengan tetapan minimum dan tahap keselamatan yang boleh diterima.

Lancarkan OpenVPN dalam Docker dalam 2 saat

prasejarah

Keupayaan untuk menjalankan perkhidmatan pada mana-mana mesin - sama ada pelayan fizikal, atau pelayan peribadi maya, atau bahkan ruang kontena di dalam sistem pengurusan kontena lain - adalah kritikal. Mata saya segera jatuh pada Docker. Pertama, perkhidmatan ini semakin popular, dan oleh itu semakin banyak pembekal menyediakan penyelesaian siap sedia dengan prapemasangannya; kedua, terdapat storan imej terpusat dari mana anda boleh memuat turun dan menjalankan perkhidmatan menggunakan satu arahan dalam terminal. Idea bahawa projek sebegini sepatutnya sudah wujud datang kepada saya dan saya mencari bersungguh-sungguh. Tetapi kebanyakan projek yang saya dapati sama ada terlalu rumit (anda perlu mencipta bekas untuk penyimpanan data kekal dan melancarkan bekas dengan aplikasi beberapa kali dengan parameter yang berbeza), atau tanpa dokumentasi yang waras, atau ditinggalkan sepenuhnya. Tidak menemui apa-apa yang boleh diterima , saya mula bekerja pada projek anda. Terdapat malam tanpa tidur sebelum mempelajari dokumentasi, menulis kod dan nyahpepijat, tetapi akhirnya perkhidmatan saya melihat cahaya hari dan mula berkilauan dengan semua warna panel LED monokrom penghala. Jadi, saya meminta anda untuk mencintai dan memihak - Docker-OpenVPN. Saya juga menghasilkan logo (di atas, sebelum pemotongan), tetapi jangan menilai dengan tegas, kerana saya bukan pereka (lagi). Apabila saya melaksanakan projek ini, saya mengutamakan kelajuan penggunaan, sekurang-kurangnya tetapan dan tahap keselamatan yang boleh diterima. Melalui percubaan dan kesilapan, saya mendapati keseimbangan optimum bagi kriteria ini, namun, di beberapa tempat saya terpaksa mengorbankan kelajuan penggunaan demi keselamatan, dan saya terpaksa membayar untuk mudah alih untuk tetapan minimum: dalam konfigurasi semasa, a bekas yang dibuat pada satu pelayan tidak boleh dipindahkan dan dilancarkan pada yang lain. Sebagai contoh, semua sijil pelanggan dan pelayan dijana apabila perkhidmatan bermula dan ini akan mengambil masa kira-kira 2 saat. Walau bagaimanapun, penjanaan fail Hellman Defi perlu diambil kira dalam masa binaan: ia dicipta semasa pembinaan imej docker dan boleh bertahan sehingga 10 minit. Saya sangat ingin menerima audit keselamatan bagi penyelesaian sedemikian daripada komuniti yang dihormati.

Pelancaran

Untuk memulakan perkhidmatan kami memerlukan beberapa perkara:

  1. Pelayan: fizikal atau maya. Secara teorinya mungkin untuk dijalankan dalam mod docker-within-docker, tetapi saya belum menguji pilihan ini secara meluas;
  2. Sebenarnya Docker. Banyak penyedia pengehosan menyediakan penyelesaian siap sedia dengan Docker on board;
  3. Alamat IP awam.

Jika semua butiran tersedia, maka yang perlu kita lakukan ialah menjalankan arahan berikut dalam konsol pelayan anda:

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

Pembaca yang penuh perhatian mungkin menyedari bahawa alamat IP pelayan ditentukan secara automatik menggunakan ipify.org. Jika atas sebab tertentu ini tidak berfungsi, maka anda boleh menentukan alamat secara manual. Jika semua langkah sebelumnya telah diselesaikan dengan betul, maka kita akan melihat sesuatu yang serupa dalam konsol:

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!

Kami hampir kepada matlamat: kini kami perlu menyalin example.com (dalam kes anda ia akan menjadi alamat pelayan anda) dan tampalkannya ke dalam bar alamat penyemak imbas anda. Selepas anda menekan Enter, fail client.ovpn akan dimuat turun, dan pelayan http itu sendiri akan hilang. Jika penyelesaian ini diragui, anda boleh menggunakan helah berikut: jalankan arahan sebelumnya dan tambah bendera zp dan kata laluan. Sekarang, jika anda menampal pautan yang dijana ke dalam tetingkap penyemak imbas, anda akan menerima arkib zip dengan kata laluan. Sebaik sahaja anda mempunyai fail konfigurasi klien, anda boleh menggunakan mana-mana klien yang sesuai. Saya menggunakan Tunnelblick untuk Mac.

Tutorial video

Tutorial video ini mengandungi arahan terperinci untuk menggunakan perkhidmatan di DigitalOcean.

PS Jika anda mendapati projek ini berguna, sila berikan bintang pada GitHub, buat garpu dan beritahu rakan anda. Penyumbang dan audit keselamatan juga dialu-alukan secara meluas.PPS Jika artikel ini berakhir pada Habr, maka saya bercadang untuk menulis yang seterusnya tentang cara saya melancarkan docker-in-docker dan docker-in-docker-in-docker, mengapa saya melakukannya dan apa yang terhasil daripadanya.
EDIT1:

  1. Membetulkan kesilapan dalam penerbitan,
  2. Menjawab komen, saya memutuskan untuk meletakkan maklumat ini di sini: bendera β€”privileged diperlukan untuk berfungsi dengan iptables

EDIT2:

  1. Perintah pelancaran imej dipertingkatkan: kini ia tidak memerlukan bendera -privileged
  2. Menambahkan pautan ke panduan video bahasa Rusia: youtu.be/A8zvrHsT9A0

Sumber: www.habr.com

Tambah komen