Intro
Meningkatnya permintaan VPN huruf ajaib dan alasannya, jauh dari teknologi jaringan, bahkan tidak menarik untuk diajak bercanda.
Hai, apakah Anda pandai komputer? bantu saya tentang vpn?
Bahkan, saya bahkan senang bahwa orang-orang mulai mempelajari dasar-dasar jaringan komputer (apa vpn, apa yang terjadi, dan mengapa berbagai situs mulai membukanya?), Dan, jika mungkin, membantu. Saya mencoba untuk mendorong proses mengkonfigurasi sendiri server VPN saya, tetapi saya mengerti bahwa tidak semua orang harus menjadi administrator sistem , jadi beberapa teman hanya menyarankan membeli server dan memberikannya kepada saya untuk konfigurasi.
Tetapi setiap programmer harus malas agar tidak mengulangi hal yang sama berulang kali. Melakukan tindakan yang sama berulang kali mengasah keterampilan, tetapi membunuh semua minat pengembangan dan kreativitas (dan waktu).
Maka, dengan menyiapkan server VPN ketiga, saya menyadari bahwa itu perlu untuk mengotomatisasi semua ini dan membuat pengguna ramah , sehingga setelah instruksi singkat bahkan pengguna yang paling biasa dapat berbagi kunci ovpn dengan teman atau kerabat. Dan bahkan lebih baik - untuk menginstal sistem, pengguna dapat secara mandiri dengan keterampilan dan pengetahuan minimal.
Jadi proyek VPNFace lahir - satu set skrip server untuk mengelola kunci pengguna dari server OpenVPN, dan panel kontrol web untuk mereka. Dan setelah beberapa hari pengembangan, saya mendapati diri saya berpikir bahwa sekitar 25% dari fungsionalitas yang akan diletakkan tidak akan pernah diklaim oleh "pengguna biasa" yang sama ini, dan awalan Lite ditambahkan ke namanya, dan konsep utama proyek berubah dari desainer tujuan umum menjadi berpikiran sempit. alat , yang pada saat yang sama juga secara signifikan mengurangi waktu pengembangan sebelum rilis.
Tentu saja - yah, itu tidak pernah terjadi seperti itu - mengapa manajer OpenVPN lain? Sejujurnya - pikiran tentang proyek lain dari manajer VPN muncul di benak saya ketika inti utama sudah bekerja, dan saya melihat segala macam hal kecil. Awalnya saya kesal karena saya sangat bodoh dan bahkan tidak melakukan studi minimum (karena saya tidak suka memproduksi sepeda khususnya), tetapi setelah mempelajari proyek-proyek di atas, saya menyadari bahwa tambang saya juga memiliki ceruk pasar sendiri.
Fitur Utama:
- Minimalisme fungsional: pengguna biasa, ketika berinteraksi dengan vpn sebagai administrator, hanya memerlukan beberapa fungsi - buat kunci, kunci, dan buka kunci. Dia tidak mungkin berpikir tentang membuat server VPN lain jika dia punya server yang berfungsi, atau naik untuk mengubah data pusat sertifikat. Hanya sedikit orang yang membutuhkan grafik lalu lintas yang indah, dan fungsionalitas server perusahaan, untuk tujuan tenang menggunakan telegram .
- Minimalisme perangkat lunak: satu-satunya program yang dibutuhkan pengguna adalah klien OpenVPN resmi, tersedia di semua sistem dan perangkat. Panel kontrol kunci adalah aplikasi web yang berjalan di browser. Otorisasi administratif dilakukan oleh kunci vpn.
- Konfigurasi semi-tetap: 80 persen pengguna memerlukan hal yang sama, dan mereka tidak peduli apa alamat IP di dalam jaringan (mereka bahkan tidak tahu bahwa mereka ada di sana), 15% lainnya memerlukan sedikit lebih banyak, tetapi, sama, satu dan sama juga, 5% sisanya menulis hal-hal serupa sendiri, menerapkan semua yang mereka butuhkan, sehingga Anda tidak bisa khawatir tentang mereka. Namun demikian, panel dapat dihubungkan secara manual ke server yang sudah openvpn, atau memperbaiki data sertifikat sebelum instalasi standar.
- Detasemen absolut ke perusahaan hosting atau layanan pihak ketiga lainnya - ada cukup banyak salinan dalam perselisihan tentang hosting paling ajaib, ini tetap sepenuhnya menjadi pilihan pengguna. Sistem operasi server lebih penting untuk skrip - ditulis di bawah sistem Ubuntu / Debian, tetapi semua host memilikinya. Sistem akan berdiri dengan tenang baik di jaringan rumah internal maupun di perusahaan.
- proses instalasi yang paling disederhanakan pada server yang baru dibeli bersih: jika sesuatu dapat dilakukan tanpa partisipasi pengguna, ini dilakukan dengan menggunakan hardcode. Karena Lite. Ya, itu tidak mungkin untuk mencapai installer seperti Google Outline, itu memerlukan koneksi pengguna melalui ssh untuk memulai instalasi, dan pembelian independen dari server, tetapi itu mungkin untuk mencapai bahwa pengetahuan tentang "bagaimana menghubungkan melalui ssh" adalah salah satu yang paling sulit. Dengan "pengaturan default", pengguna dikonfigurasikan dengan konfigurasi "standar" tanpa pertanyaan.
Panel Kontrol Kunci
Selama instalasi default, tiga server VPN dibuat: administrator, Internet, dan gelap - tidak sulit menebak dari namanya, yang pertama berfungsi untuk akses administrator ke server dan panel kontrol tombol (dan ssh, jika perlu), yang kedua - segera melepaskan pengguna ke Internet, dan yang ketiga secara transparan mengambil semua lalu lintas yang mungkin ke jaringan tor (lalu lintas udp kecuali DNS tidak pergi ke mana pun, dan DNS pergi ke tor)

Panel kontrol diputuskan untuk dibuat pada AngularJS keenam yang baru ( selama instalasi, versi yang dikompilasi dari panel diunduh, sehingga perpustakaan sudut tidak diperlukan untuk bekerja ). Saya suka konsep aplikasi web, dan saya mencoba mengembangkan ke arah ini, jika memungkinkan. Saya juga ingin mempelajari materi sudut untuk waktu yang lama untuk membuat panel admin Google di berbagai proyek.
Manajemen kunci, sebagaimana telah ditunjukkan, disederhanakan menjadi minimum:
Kunci Baru:

Kunci kunci:

Buka Kunci:

Tombol unduh memberi file ovpn yang sudah selesai untuk koneksi.
Bantuan pengguna minimum ada di panel:

Dan dokumentasi yang dikompilasi termasuk dalam proyek, yang secara default naik untuk subnet administratif di port 81:

Arti dari versi Lite juga membatasi dukungan bahasa - saat ini seluruh proyek hanya ada di Rusia, dan multibahasa bahkan tidak diletakkan dalam kernel.
Sisi server
Sisi server berjalan pada skrip nodejs dan bash. Mengapa ada simpul? Saya menyukainya, dan saya punya banyak proyek untuknya. Memiliki koleksi vpn-manager sepertinya ide yang bagus bagi saya. Skrip instalasi menarik manajer versi simpul , menginstal simpul v10 melalui itu, dan membuat tautan ke folder seluruh sistem untuk layanan yang ditulis di bawah simpuljs untuk bekerja.
Paket yang diinstal pada node juga minimal - selamanya, selamanya layanan untuk meluncurkan proyek sebagai layanan sistem, express - untuk api web, shelljs - untuk mengeksekusi perintah konsol, ip - address dan subnet kalkulator, output warna kapur ke konsol. Tentu saja, daftar ini dapat disingkat dengan perfeksionisme minimalis, tetapi hukum kedua Akin jelas muncul entah dari mana (hukum yang sama dapat diterapkan pada pertanyaan "mengapa nodejs?" Dan beberapa yang lain) dan meskipun ada keinginan untuk minimalis dalam masalah lain, di sini Saya memutuskan untuk tidak masuk terlalu dalam.
Skrip server mengelola server openvpn melalui serangkaian skrip bash dan memerlukan struktur file direktori root tertentu dan konfigurasi file openvpn. Dua file json digunakan sebagai basis data, yang memungkinkan:
- singkirkan interaksi dengan database seperti mongo / sql dan dependensi serta komplikasi terkait
- tanpa masalah, siapkan "pangkalan" (dan struktur direktori dan file) secara manual atau dengan skrip, ketika menginstal pada server yang dikonfigurasikan, ketika installer yang termasuk dalam kit bahkan dapat berbahaya dan proses instalasi standar harus dihindari (kebutuhan untuk instalasi diperiksa secara tepat untuk keberadaan dan isi json file basis data)
Bonus terpisah dari panel kontrol sebagai aplikasi web independen adalah pemisahan fungsionalitas server menjadi seperangkat titik akhir http api yang terpisah, yang membuka kemungkinan mengelola kunci pengguna melalui permintaan http pihak ketiga ke program pihak ketiga.
Instalasi mudah (default)
Diasumsikan bahwa instalasi seperti itu akan berjalan pada server baru yang bersih. Jika server sudah dikonfigurasi untuk beberapa tugas - lebih baik merujuk ke instalasi manual (agar tidak merusak fungsi yang ada).
Saya suka instalasi nvm (manajer versi simpul) di mana pengguna perlu mengeksekusi hanya satu perintah di terminal, yang ia salin dari situs proyek, sehingga installer default bekerja dengan cara yang sama. Saat skrip bash instalasi startup sedang berjalan, paket iptables-persistent akan meminta pengguna untuk menyimpan aturan iptables saat ini.

Pilihan pengguna tidak ada bedanya, karena setelah menyelesaikan instalasi, tindakan terakhir akan mengkonfigurasi ulang firewall, dan seperangkat aturan baru akan menimpa pemilihan saat ini. Di akhir pekerjaan, skrip akan meminta Anda untuk menyelesaikan instalasi melalui antarmuka web.

Instalasi web dimulai dengan konfirmasi alamat ip publik dari server. Secara default, skrip web mengambil data dari url string browser. Berfokus pada ip ini, kode server mencari antarmuka alamat jaringan untuk konfigurasi firewall dan server openvpn di masa depan.

Setelah menerima data jaringan, penginstal membuat server administrator vpn. Pembuatan kunci kriptografi selama pengaturan direktori root membutuhkan waktu, dan selama pengembangan, pada mesin yang sama, waktu ini bervariasi dari 1 hingga 15 menit.
Ketika server dibuat dan dimulai, penginstal melanjutkan ke langkah kedua, di mana ia meminta pengguna untuk membuat kunci administrator.

Kemudian masuk ke mode siaga untuk menghubungkan administrator vpn. Diharapkan bahwa vpn akan terhubung pada perangkat yang sama dari mana instalasi dilakukan.

Ketika seorang pengguna terhubung ke server administrator vpn, itu menjadi tersedia di alamat 10.1.0.1, dan permintaan jsonp dari halaman installer berhasil melewati sana, yang menjadi sinyal untuk mengarahkan halaman ke alamat internal dan menyelesaikan instalasi.

Pada tahap akhir instalasi, dua server vpn yang tersisa dibuat dan dikonfigurasi (waktu untuk menghasilkan kriptografi * 2), untuk, nginx dan iptalbles. Setelah menerima sinyal untuk menyelesaikan instalasi dari sisi server, skrip akan mengarahkan halaman ke panel kontrol utama.
Instalasi manual
Pemasangan manual panel kontrol pada struktur kerja server OpenVPN memerlukan beberapa langkah dan secara teknis layak oleh administrator linux (dan saya tidak berpikir bahwa orang lain selain mereka mungkin memerlukan instalasi manual):
- persiapan lingkungan nodejs sesuai dengan persyaratan keamanan server saat ini dan pengorganisasian skrip dalam bentuk yang diperlukan (layanan, manual, dll.)
- menyiapkan struktur file data dan direktori server, membuat json "database"
- mengatur proxy nginx pada panel kontrol dan dokumentasi, jika perlu
Detail dan detail teknis dapat ditemukan dalam dokumentasi online .
Kesimpulannya
Saya harap proyek ini berguna bagi seseorang.
Repositori proyek
Repositori kode sumber panel web sudut
Proyek ini didistribusikan di bawah lisensi MIT dan diterbitkan untuk mendukung gerakan DIGITAL RESITANCE.
Gagasan Pengembangan PS di atas atap - dan kencangkan multibahasa, dan singkirkan momen-momen sulit dalam kode, dan tambahkan fungsionalitas untuk membuat server, mengelola perutean dan firewall, mengubah sistem menjadi perancang universal , dll. dll, tetapi bagaimana dan kapan semua ini akan diterapkan? Tanpa petunjuk, masa depan akan muncul.