Saya mengevaluasi sistem untuk klien di mana banyak klien OpenVPN terhubung ke server OpenVPN. "Banyak" berarti 50.000 - 10.000.000.
Mengapa saya melakukan itu? Klien didistribusikan sistem tertanam, masing-masing duduk di belakang pemilik sistem router dsl. Server harus dapat mengirim perintah ke klien. Pendekatan naif pertama saya adalah membuat klien terhubung ke server melalui jaringan openvpn. Dengan cara ini, terowongan komunikasi aman dapat digunakan di kedua arah.
Ini berarti bahwa semua klien selalu terhubung ke server. Ada banyak klien yang menyimpulkan selama bertahun-tahun.
Pertanyaannya adalah: apakah server OpenVPN meledak ketika mencapai sejumlah klien? Saya sudah mengetahui batas nomor koneksi TCP maksimum, oleh karena itu (dan untuk alasan lain) VPN harus menggunakan transportasi UDP.
Guru OpenVPN, apa pendapat Anda?
sumber
Jawaban:
Saya ragu bahwa pengaturan yang besar pernah dicoba sebelumnya, sehingga Anda kemungkinan akan mendorong batas ketika mencoba. Saya bisa menemukan artikel tentang penyebaran VPN untuk 400 klien tetapi menilai dari teks, penulis hanya mengandalkan perkiraan kasar tentang berapa banyak klien yang dapat dijalankan per CPU dan tidak memiliki pemahaman tentang bagaimana pengaturannya akan melakukan.
Anda terutama perlu mempertimbangkan dua hal ini:
Bandwidth transfer data Anda akan menggunakan akan memerlukan enkripsi / dekripsi di sisi server VPN, memakan sumber daya CPU
Koneksi klien OpenVPN mengkonsumsi sumber daya, memori dan CPU di server bahkan ketika tidak ada data yang ditransfer
Setiap perangkat keras PC yang layak yang tersedia saat ini harus dengan mudah menjenuhkan tautan Gigabit dengan Blowfish atau AES-128, bahkan perangkat yang disematkan $ 100 mampu memberikan harga mendekati 100 Mbps , sehingga kemacetan CPU akibat intensitas bandwidth tidak boleh menjadi masalah.
Mengingat interval rekeying default 3600 detik, sejumlah 1.000.000 klien akan berarti bahwa server harus mampu menyelesaikan 278 pertukaran kunci rata-rata per detik. Meskipun pertukaran kunci adalah tugas yang agak intensif-CPU, Anda dapat melepasnya ke perangkat keras khusus jika diperlukan - kartu akselerator kriptografi yang tersedia dengan mudah memenuhi dan melampaui jumlah jabat tangan TLS ini. Dan batasan memori seharusnya tidak terlalu merepotkan - biner 64-bit harus mengatasi semua batasan memori virtual yang mungkin akan Anda tekan sebaliknya.
Tetapi keindahan sebenarnya dengan OpenVPN adalah Anda dapat mengukurnya dengan cukup mudah - cukup buat server OpenVPN dalam jumlah sewenang-wenang dan pastikan klien Anda menggunakannya (mis. Melalui DNS round-robin), konfigurasikan protokol perutean dinamis pilihan Anda (biasanya ini adalah RIP karena kesederhanaannya) dan infrastruktur Anda akan mampu mendukung jumlah klien yang sewenang-wenang selama Anda memiliki cukup perangkat keras.
sumber
Saya sebenarnya telah melakukan ini, walaupun dengan "hanya" beberapa ratus koneksi jarak jauh yang serupa di belakang router DSL. Saya tidak bisa berkomentar terlalu banyak tentang masalah rekeying, tetapi beberapa hal praktis yang saya pelajari di sepanjang jalan:
1) Saat mengerahkan klien, pastikan Anda menentukan beberapa server VPN di klien conf, vpn1.example.com, vpn2.example.com, vpn3 ..... Bahkan jika Anda hanya menyediakan satu atau dua di antaranya sekarang, Anda memberi sendiri ruang kepala. Dikonfigurasi dengan benar, klien akan terus mencoba ulang secara acak hingga mereka menemukan yang berfungsi.
2) Kami menggunakan gambar server AWS VPN khusus, dan dapat meningkatkan kapasitas tambahan sesuai permintaan, dan Amazon DNS (R53) menangani sisi DNS dari berbagai hal. Itu benar-benar terlepas dari sisa infrastruktur kami.
3) Di akhir server, gunakan netmask dengan hati-hati untuk membatasi jumlah klien potensial. Itu harus memaksa klien ke server alternatif, mengurangi masalah CPU. Saya pikir kami membatasi server kami hingga 300 atau lebih klien. Pilihan ini agak sewenang-wenang di pihak kami - "firasat" jika Anda suka.
4) Juga di ujung server, Anda harus menggunakan firewall dengan hati-hati. Secara sederhana, kami telah mengonfigurasikan milik kami sehingga klien dapat terhubung ke VPN, tetapi server melarang keras semua koneksi ssh masuk kecuali dari alamat IP yang dikenal. Kita bisa SSH ke klien jika kita sesekali perlu, mereka tidak bisa SSH kepada kita.
5) Jangan mengandalkan OpenVPN yang melakukan koneksi ulang untuk Anda di ujung klien. 9 kali dari 10 itu akan, tetapi kadang-kadang macet. Memiliki proses terpisah untuk mengatur ulang / memulai kembali openVPN di akhir klien secara teratur.
6) Anda memerlukan cara untuk menghasilkan kunci unik untuk klien sehingga Anda dapat menolaknya kadang-kadang. Kami membuat ini secara internal dengan proses server build (PXEboot) kami. Tidak pernah terjadi pada kami, tetapi kami tahu kami bisa melakukannya.
7) Anda akan memerlukan beberapa alat manajemen, skrip untuk memonitor koneksi server VPN Anda secara efektif.
Tidak banyak materi di luar sana tentang bagaimana melakukan ini sayangnya, tetapi mungkin, dengan konfigurasi yang cermat.
sumber
Perbarui 2018
Tidak yakin apa yang telah berubah sejak 2012. Hanya ingin memberikan pembaruan tentang pengalaman saya pada 2018. Kami telah menggunakan jaringan openvpn yang sangat mirip dengan pengaturan OP. Titik akhir kami adalah pcs linux yang ditiup penuh alih-alih perangkat tertanam. Setiap titik akhir memiliki monitor yang digunakan untuk menampilkan informasi dan alarm untuk situs itu dan server kami memungkinkan kami satu titik untuk melakukan remote ke semua titik akhir. Jaringan tidak terlalu aktif tetapi terkadang memiliki 5-10 sesi jarak jauh secara bersamaan.
Dengan menggunakan openvpn saat ini di sekitar 100 klien pada gambar biru dengan satu inti dan 2gb ram, kami menggunakan sekitar 0,7% memori rata-rata dan penggunaan cpu hampir selalu sekitar 0%. Berdasarkan apa yang saya temukan untuk pengujian yang lebih kecil ini, saya pikir satu server dengan spesifikasi yang layak akan dengan mudah menangani 50.000 bersamaan jika memiliki ram untuk mendukungnya. Jika penggunaan ram ditingkatkan secara linear maka 16gb akan mampu menangani 50.000 pengguna dengan cukup tambahan pada mesin openvpn khusus.
Kami tidak pada skala yang cukup besar untuk mengatakan itu dengan keyakinan yang signifikan tetapi saya hanya ingin memberikan pembaruan baru-baru ini karena ketika awalnya menggunakan jaringan kami, saya menemukan ini dan mengharapkan lebih banyak penggunaan sumber daya pada skala ini. Sekarang, saya percaya cpu yang menjalankan ini memang memiliki enkripsi perangkat keras dan saya tidak yakin pada titik apa yang akan menjadi kelebihan lalu lintas, tetapi untuk titik akhir yang tidak banyak berkomunikasi, ini seharusnya tidak menjadi masalah.
Pada 1000000 Anda akan membutuhkan 200gb ram pada satu mesin (jika ditingkatkan secara linear dengan tambahan) sementara ini mungkin saya akan berpikir pada saat itu Anda ingin memiliki 5 mesin masing-masing dengan 64gb ram sehingga Anda tidak memiliki satu poin pun kegagalan. Ini harus memungkinkan pemeliharaan, memulai kembali dan penggantian 1 atau bahkan 2 mesin tanpa masalah yang berarti.
Perkiraan ram saya mungkin terlalu banyak karena saya membagi seluruh penggunaan openvpn dengan jumlah klien di mana hanya sebagian ram itu karena klien.
Kami telah menambahkan 74 titik akhir dalam setahun sejak awalnya digunakan. Saya berharap untuk terus meningkatkan jumlah itu secara signifikan dan akan membuat pembaruan lebih lanjut jika kita mencapai skala yang layak.
sumber
Saya mencari masalah yang sama, meskipun jumlah klien menjadi ratusan mungkin beberapa ribu.
Saya pikir saya tidak bisa membuat semua klien terhubung sepanjang waktu.
Saya sedang berpikir untuk memulai daemon OpenVPN pada klien pada interval waktu yang acak sehingga mereka dapat memeriksa apakah mereka disurvei. Jika mereka mereka mengirim email atau sesuatu yang sedang online dan mengirim paket tetap hidup untuk jangka waktu tertentu sehingga saya dapat terhubung ke mereka.
Jika tidak ada lalu lintas untuk beberapa waktu, daemon akan dihentikan.
Masalah yang saya hadapi saat ini adalah sepertinya tidak mungkin mendapatkan daftar klien VPN yang saat ini terhubung ...
sumber