Hanya satu klien pengurusan: mengapa monitor anda menyingkirkan GUI
Soket pengurusan menerima satu sambungan pada satu masa. Pelanggan kedua sama ada gagal menyambung atau merampas kawalan daripada komponen yang memiliki gesaan.
GUI desktop memegang sambungan pengurusan, jadi skrip pemantauan yang cuba membuka sambungannya sendiri tidak membaca apa-apa atau, lebih buruk, GUI berhenti membalas gesaan. Kesimpulan biasa ialah daemon tidak stabil. Dalam daemon komuniti, hadnya memang disengajakan: antara muka kawalan melayani satu klien pengurusan yang bersambung pada satu masa, dan nombor itu tidak ada kaitan dengan berapa ramai pengguna yang boleh dibawa oleh VPN.
Satu soket, satu pemegang
Saluran pengurusan menerima satu klien yang bersambung. Apabila klien kedua tiba semasa yang pertama aktif, ia menunggu atau ditolak, dan tiada mod pelanggan selari yang tersembunyi di sebalik pilihan. Memutuskan pemegang semasa membolehkan daemon menerima yang seterusnya, dan itu ialah penyerahan, bukan saluran kedua.
Itu menjadikan setiap alat tambahan sebagai pesaing. Jika GUI memiliki sambungan, skrip pengundian gagal menyambung atau hanya berjaya selepas GUI mengalah, dan urutan itu berulang pada penyambungan semula seterusnya. Jika skrip menyambung dahulu, GUI kehilangan laluan kawalannya dan gesaannya berhenti berfungsi. Tiada alat melaporkan konflik itu, kerana setiap satu hanya melihat perintahnya sendiri yang gagal.
| What you need | Mechanism that fits | What it cannot do |
|---|---|---|
| Periodic list of connected clients | Status file written on an interval | Deliver events as they happen |
| Interactive prompts and session control | The single management connection | Serve two controllers at once |
| Multiple consumers of either | One owner process that fans out | Exist without you writing it |
Tentukan komponen mana yang memiliki kawalan
Pilih satu pemegang untuk saluran interaktif dan biarkan hanya itu yang bersambung. GUI yang menguruskan sambungan, skrip yang menjawab gesaan pengesahan, dan pengawal yang menamatkan sesi semuanya dikira sebagai pemegang, dan hanya satu boleh memegang peranan itu.
Apabila GUI memiliki sambungan, gunakan integrasi yang ditawarkan GUI itu daripada bergelut dengannya. Bersaing dengan pemegang untuk soket menghasilkan kegagalan berselang yang kelihatan rawak kepada pengguna, dan orang yang menyahpepijat biasanya hanya melihat separuh kedua perlumbaan itu. Catat proses mana yang bersambung dahulu selepas but semula, kerana urutan itu menentukan siapa yang menang setiap kali. Monitor yang bermula sebelum GUI akan mengekalkan saluran itu sehingga GUI mengalah.
Gunakan petikan keadaan untuk pengumpul
Kebanyakan keperluan pemantauan memerlukan senarai, bukan perbualan. Fail keadaan berkala menjawabnya tanpa menyentuh saluran kawalan, dan ia terus berfungsi selagi GUI kekal bersambung.
status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix
Selang itu ialah belanjawan kesegaran, jadi tetapkan mengikut apa yang sebenarnya diperlukan papan pemuka, bukan pada nilai terkecil yang kelihatan selamat. Petikan yang ditulis setiap beberapa saat murah; skrip yang menyambung semula ke soket kawalan setiap beberapa saat tidak murah, kerana setiap penyambungan semula bersaing dengan pemegang.
Petikan bukan sejarah dan bukan aliran peristiwa. Sambungan yang masuk dan keluar dalam satu selang tidak pernah muncul, jadi keperluan audit tidak dapat dipenuhi dengan mengundi fail yang menimpa dirinya sendiri. Jika anda perlu tahu sama ada pengguna pernah bersambung, petikan itu ialah instrumen yang salah.
Penyerakan ialah reka bentuk, bukan mod
Jika beberapa pengguna benar-benar memerlukan data pengurusan langsung, letakkan satu komponen dipercayai di hadapan soket dan biarkan ia menerbitkan pemerhatian yang dipilih secara sempit kepada yang lain. Komponen itu memiliki penyambungan semula, gesaan pengesahan dan keputusan tentang apa yang selamat didedahkan.
Binanya dengan sengaja: tentukan pertanyaan mana yang dibenarkan, catat siapa yang bertanya, dan elakkan lapisan penyerakan bertukar menjadi panel kawalan jauh secara tidak sengaja. Daemon tidak mempunyai mod berbilang pelanggan untuk dihidupkan, dan tiada baris konfigurasi menciptanya. Anggap pemegang sebagai sebahagian daripada sempadan keselamatan, kerana ia memegang antara muka yang boleh memutuskan sambungan orang. Memulakannya semula sepatutnya menjadi operasi rutin dengan laluan pemulihan yang didokumenkan.
Anggap soket sebagai keistimewaan, bukan metrik
Antara muka pengurusan boleh memutuskan sambungan pengguna, menukar keadaan dan membaca peristiwa yang menamakan orang. Kata lalunya mengesahkan pelanggan dan tidak menyulitkan pengangkutan, jadi pendengar rangkaian mendedahkan perbualan itu kepada sesiapa yang boleh memerhatikannya.
Utamakan soket tempatan atau pendengar yang terhad secara ketat, dan semak proses mana yang sebenarnya dituju pengumpul anda, kerana produk pelayan membawa API pengurusan mereka sendiri yang berkelakuan berbeza. Pengumpul yang dihalakan ke daemon yang salah menghasilkan kesimpulan yang yakin tetapi salah. Sahkan laluan dan proses pemilik sebelum menyahpepijat pertanyaan yang tidak mengembalikan apa-apa.