Luncurkan OpenVPN di Docker dalam 2 detik

Halo warga Khabrovsk! Pernahkah Anda menghadapi situasi ketika Anda benar-benar ingin dipindahkan ke kota, negara, atau benua lain? Saya cukup sering mengalami kebutuhan ini, jadi kesempatan untuk memiliki server VPN sendiri, yang dapat diluncurkan di mana saja, dalam beberapa detik, sangatlah mendesak. Dalam artikel ini saya ingin berbicara tentang proyek saya, yang saya buat ketika saya masih muda. mencari solusi siap pakai, dalam hal ini Docker, image yang memungkinkan Anda menyiapkan server OpenVPN dengan cepat, dengan pengaturan minimum dan tingkat keamanan yang dapat diterima.

Luncurkan OpenVPN di Docker dalam 2 detik

prasejarah

Kemampuan untuk menjalankan layanan pada mesin apa pun - baik itu server fisik, atau server pribadi virtual, atau bahkan ruang kontainer di dalam sistem manajemen kontainer lain - sangatlah penting. Pandanganku langsung tertuju pada Docker. Pertama, layanan ini semakin populer, dan oleh karena itu semakin banyak penyedia yang menyediakan solusi siap pakai dengan pra-instalasi; kedua, terdapat penyimpanan gambar terpusat di mana Anda dapat mengunduh dan menjalankan layanan menggunakan satu perintah di terminal. Gagasan bahwa proyek semacam itu seharusnya sudah ada muncul di benak saya dan saya mencarinya dengan giat. Tetapi sebagian besar proyek yang saya temukan terlalu rumit (Anda harus membuat wadah untuk penyimpanan data permanen dan meluncurkan wadah tersebut dengan aplikasi beberapa kali dengan parameter berbeda), atau tanpa dokumentasi yang masuk akal, atau ditinggalkan sama sekali. , saya mulai mengerjakan proyek Anda. Ada malam-malam tanpa tidur sebelum mempelajari dokumentasi, menulis kode, dan melakukan debug, tetapi pada akhirnya layanan saya mulai bersinar dan mulai berkilau dengan semua warna panel LED monokrom router. Jadi, saya meminta Anda untuk mencintai dan mendukung - Docker-OpenVPN. Saya bahkan sudah membuat logo (di atas, sebelum dipotong), tapi jangan menilai secara ketat, karena saya bukan seorang desainer (lagi) Ketika saya mengimplementasikan proyek ini, saya mengutamakan kecepatan penerapan, minimal pengaturan dan tingkat keamanan yang dapat diterima. Melalui trial and error, saya menemukan keseimbangan optimal dari kriteria ini, namun, di beberapa tempat saya harus mengorbankan kecepatan penerapan demi keamanan, dan saya harus membayar untuk portabilitas untuk pengaturan minimum: dalam konfigurasi saat ini, a wadah yang pernah dibuat di satu server tidak dapat ditransfer dan diluncurkan di server lain. Misalnya, semua sertifikat klien dan server dibuat saat layanan dimulai dan ini akan memakan waktu sekitar 2 detik. Namun, pembuatan file Hellman Defi harus mempertimbangkan waktu pembuatan: file tersebut dibuat selama pembuatan image buruh pelabuhan dan dapat bertahan hingga 10 menit. Saya sangat ingin menerima audit keamanan atas solusi semacam itu dari komunitas yang dihormati.

Luncurkan

Untuk memulai layanan kita memerlukan beberapa hal:

  1. Server: fisik atau virtual. Secara teoritis dimungkinkan untuk dijalankan dalam mode buruh pelabuhan-dalam-buruh pelabuhan, tetapi saya belum menguji opsi ini secara ekstensif;
  2. Sebenarnya buruh pelabuhan. Banyak penyedia hosting menyediakan solusi siap pakai dengan Docker;
  3. Alamat IP publik.

Jika semua detail sudah ada, maka yang perlu kita lakukan hanyalah menjalankan perintah berikut di konsol server 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 telah memperhatikan bahwa alamat IP server ditentukan secara otomatis menggunakan ipify.org. Jika karena alasan tertentu ini tidak berhasil, maka Anda dapat menentukan alamatnya secara manual. Jika semua langkah sebelumnya diselesaikan dengan benar, maka kita akan melihat sesuatu yang serupa di 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!

Kita sudah dekat dengan tujuan: sekarang kita perlu menyalin example.com (dalam kasus Anda ini akan menjadi alamat server Anda) dan tempelkan ke bilah alamat browser Anda. Setelah Anda menekan Enter, file client.ovpn akan diunduh, dan server http itu sendiri akan terlupakan. Jika solusi ini diragukan, Anda dapat menggunakan trik berikut: jalankan perintah sebelumnya dan tambahkan flag zp dan kata sandi. Sekarang, jika Anda menempelkan tautan yang dihasilkan ke jendela browser, Anda akan menerima arsip zip dengan kata sandi. Setelah Anda memiliki file konfigurasi klien, Anda dapat menggunakan klien apa pun yang sesuai. Saya menggunakan Tunnelblick untuk Mac.

Video tutorial

Tutorial video ini berisi petunjuk rinci untuk menerapkan layanan di DigitalOcean.

PS Jika menurut Anda proyek ini bermanfaat, silakan beri bintang di GitHub, fork, dan beri tahu teman Anda. Kontributor dan audit keamanan juga disambut secara luas.PPS Jika artikel ini berakhir di Habr, maka saya berencana untuk menulis artikel berikutnya tentang bagaimana saya meluncurkan docker-in-docker dan docker-in-docker-in-docker, mengapa saya melakukannya dan apa hasilnya.
EDIT1:

  1. Memperbaiki kesalahan dalam publikasi,
  2. Menanggapi komentar, saya memutuskan untuk meletakkan informasi ini di sini: tanda β€”privileged diperlukan untuk bekerja dengan iptables

EDIT2:

  1. Memperbaiki perintah peluncuran gambar: sekarang tidak memerlukan tanda –privileged
  2. Menambahkan tautan ke panduan video berbahasa Rusia: youtu.be/A8zvrHsT9A0

Sumber: www.habr.com

Tambah komentar