Menyambungkan pengawal kecil ke VPN NetworkManager
Pengaktifan mengembalikan pemegang, bukan sesi sedia. Simpan profil, permintaan dan sambungan aktif secara berasingan, dan bina semula keadaan selepas mula semula.
Program kecil yang menyambung VPN sedia ada memerlukan pengawal, bukan pelaksanaan VPN baharu. Enjin yang disokong sepatutnya mengendalikan rundingan dan trafik terowong; program anda sepatutnya menyatakan permintaan pengguna dan menerangkan hasilnya dengan jujur. Pada Linux, antara muka NetworkManager D-Bus memberi pengawal itu model konkrit untuk diikuti.
Empat pemeriksaan menghalang pengawal daripada mengelirukan profil tersimpan, permintaan pengaktifan dan sesi yang berjalan.
Pemeriksaan satu: identiti mana yang dipilih
Kekalkan UUID profil sebagai identiti kekal, dan selesaikannya melalui pengurus apabila anda memerlukan laluan objek. Nama paparan boleh dikongsi oleh dua profil, dan laluan bas semasa jalan bukan keutamaan pengguna yang wajar untuk disimpan. Tulis pilihan itu dalam konfigurasi anda sendiri, bukan dalam komen tentang entri mana yang kedua dalam senarai.
Sahkan apa yang dikembalikan pengurus sebelum anda menyebutnya padanan. UUID yang tidak lagi wujud menghasilkan kegagalan carian, dan itu laluan kod yang berbeza daripada profil yang wujud dan enggan diaktifkan.
Pemeriksaan dua: apa yang dikembalikan panggilan pengaktifan
Panggilan pengaktifan yang didokumenkan mengambil laluan objek sambungan sedia ada, laluan peranti dan objek tertentu. Ia mengembalikan laluan sambungan aktif, dan respons itu ialah pemegang, bukan hasil kesediaan. Jangan tetapkan bendera sedia aplikasi anda daripada nilai pulangan; sebaliknya langgan keadaan dan sebab sambungan aktif.
Untuk VPN, objek tertentu memilih sambungan asas yang aktif. Menghantar laluan akar menyerahkan pilihan peranti kepada NetworkManager, yang memilih peranti yang sedang lalai. Itu keputusan konteks penghalaan dan bukan medan kata laluan, dan ia mengubah peranti tempat terowong dilapisi.
Jangan ambil contoh umum tambah-dan-aktifkan lalu harap ia mencipta profil VPN. Pembantu yang didokumenkan mengecualikan sambungan VPN, jadi penyediaan atau import profil ialah langkah berasingan yang disemak. Itu penting kerana penyediaan memerlukan kebenaran dan semakan yang tidak diberikan butang sambung. Layan import sebagai tindakan pentadbiran dengan baris log sendiri dan penyetuju sendiri.
Pemeriksaan tiga: bagaimana keadaan diwakili
Sambungan aktif bergerak melalui pengaktifan, aktif, penyahaktifan dan dinyahaktifkan, dan medan sebab memberitahu mengapa. Memadatkan semuanya ke dalam nilai Boolean bernama loggedIn menghilangkan maklumat yang diperlukan pengguna dan yang akan ditanya oleh sokongan. Tunjukkan sekurang-kurangnya sama ada sambungan menunggu, terbentuk atau hilang, dan simpan rentetan sebab untuk kes kegagalan.
Kaitkan balasan tak segerak dengan permintaan yang menghasilkannya. Penyempurnaan lewat daripada percubaan lama tidak boleh menimpa tindakan pengguna yang lebih baharu, dan tekanan Connect berganda harus diabaikan atau dianggap sebagai batal-dan-cuba-semula dengan dasar yang kelihatan.
Pemeriksaan empat: apa yang berlaku selepas mula semula
Apabila pengurus dimulakan semula atau pengawal anda bersambung semula ke bas, bina semula keadaan yang diperhatikan daripada pemilik. Jangan terus memaparkan sesi cache sebagai aktif kerana laluan objek lama masih dalam ingatan. Isyarat perubahan keadaan wujud semata-mata supaya pengawal dapat menyegerakkan semula dan bukannya meneka.
Pilih apa maksud menutup pengawal. Membiarkan sambungan sedia ada milik mesin kekal hidup boleh jadi betul, dan merobohkan sesi jangka pendek yang sengaja dibuat juga boleh jadi betul. Membiarkan sambungan sedia ada milik mesin kekal hidup boleh jadi betul; merobohkan sesi jangka pendek yang sengaja dibuat juga boleh jadi betul. Tulis kontrak pemilikan itu ke dalam antara muka dan bukannya menganggap keluar proses melakukan tindakan rangkaian. Pengguna tidak sepatutnya meneka sama ada menutup tetingkap akan memutuskan terowong mereka. Letakkan jawapan dalam teks antara muka, bukan hanya dalam komen kod.
Simpan kuasa dan rahsia pada pemiliknya
Kebenaran kembali sebagai ya, auth atau tidak, dan antara muka harus mencerminkan perbezaan antara dibenarkan, dibenarkan selepas pengesahan dan ditolak. Menjalankan pengawal sebagai root tidak melaksanakan dasar kebenaran; ia menghapuskan soalan itu.
Kelayakan tergolong dalam ejen rahsia yang disokong atau integrasi klien untuk kaedah pengesahan yang dikonfigurasikan. Kata laluan dalam kod sumber, dalam argumen atau dalam log ialah penemuan, dan kebenaran pentadbiran setempat bukan peristiwa yang sama dengan pengesahan di get laluan.
Akhir sekali, laporkan keadaan sambungan secara berasingan daripada tugas yang ingin dilakukan pengguna. Terowong boleh aktif sementara nama peribadi atau aplikasi kekal tidak tersedia, dan kegagalan kedua itu wajar mendapat mesej sendiri dan status sendiri. Pengawal yang menyatakan dengan tepat lapisan mana yang gagal lebih berguna daripada yang mengatakan VPN sudah mati.