Program kecil yang menghubungkan VPN yang sudah ada memerlukan pengontrol, bukan implementasi VPN baru. Mesin yang didukung seharusnya menangani negosiasi dan lalu lintas terowongan; program Anda seharusnya menyatakan permintaan pengguna dan menjelaskan hasilnya dengan jujur. Di Linux, antarmuka NetworkManager D-Bus memberi pengontrol itu model konkret untuk diikuti.

Empat pemeriksaan mencegah pengontrol mencampur profil tersimpan, permintaan aktivasi, dan sesi yang berjalan.

Pemeriksaan satu: identitas mana yang dipilih

Pertahankan UUID profil sebagai identitas tetap, dan selesaikan melalui manajer saat Anda memerlukan jalur objek. Nama tampilan bisa dipakai bersama oleh dua profil, dan jalur bus saat runtime bukan preferensi pengguna yang masuk akal untuk disimpan. Tuliskan pilihan itu dalam konfigurasi Anda sendiri, bukan dalam komentar tentang entri mana yang kedua dalam daftar.

Verifikasi apa yang dikembalikan manajer sebelum Anda menyebutnya cocok. UUID yang tidak lagi ada menghasilkan kegagalan pencarian, dan itu jalur kode yang berbeda dari profil yang ada dan menolak diaktifkan.

Pemeriksaan dua: apa yang dikembalikan panggilan aktivasi

Panggilan aktivasi yang didokumentasikan mengambil jalur objek koneksi yang ada, jalur perangkat, dan objek tertentu. Panggilan itu mengembalikan jalur koneksi aktif, dan respons tersebut adalah pegangan, bukan hasil kesiapan. Jangan setel tanda siap aplikasi Anda dari nilai baliknya; berlanggananlah pada status dan alasan koneksi aktif.

Untuk VPN, objek tertentu memilih koneksi dasar yang aktif. Melewatkan jalur akar menyerahkan pilihan perangkat kepada NetworkManager, yang memilih perangkat yang sedang menjadi default. Itu keputusan konteks perutean, bukan bidang kata sandi, dan itu mengubah perangkat tempat terowongan dilapisi.

Jangan ambil contoh umum tambah-dan-aktifkan lalu berharap itu membuat profil VPN. Pembantu yang didokumentasikan mengecualikan koneksi VPN, jadi penyediaan atau impor profil adalah langkah terpisah yang ditinjau. Itu penting karena penyediaan memerlukan otorisasi dan tinjauan yang tidak diberikan tombol sambung. Perlakukan impor sebagai tindakan administratif dengan baris log sendiri dan penyetuju sendiri.

Pemeriksaan tiga: bagaimana status direpresentasikan

Koneksi aktif bergerak melalui aktivasi, aktif, penonaktifan, dan nonaktif, dan bidang alasan mengatakan mengapa. Memadatkan semua itu ke dalam nilai Boolean bernama loggedIn menghilangkan informasi yang dibutuhkan pengguna dan yang akan ditanyakan dukungan. Tampilkan setidaknya apakah koneksi tertunda, terbentuk, atau hilang, dan simpan string alasan untuk kasus kegagalan.

Kaitkan balasan asinkron dengan permintaan yang menghasilkannya. Penyelesaian terlambat dari percobaan lama tidak boleh menimpa tindakan pengguna yang lebih baru, dan tekanan Connect ganda harus diabaikan atau diperlakukan sebagai batal-dan-coba-lagi dengan kebijakan yang terlihat.

Pemeriksaan empat: apa yang terjadi setelah mulai ulang

Saat manajer dimulai ulang atau pengontrol Anda tersambung lagi ke bus, bangun ulang status teramati dari pemiliknya. Jangan terus menampilkan sesi tersimpan sebagai aktif karena jalur objek lama masih di memori. Sinyal perubahan status ada justru agar pengontrol dapat menyinkronkan ulang alih-alih menebak.

Pilih apa arti menutup pengontrol. Membiarkan koneksi milik mesin yang ada tetap hidup bisa benar, dan membongkar sesi yang sengaja berumur pendek juga bisa benar. Membiarkan koneksi milik mesin yang ada tetap hidup bisa benar; membongkar sesi yang sengaja berumur pendek juga bisa benar. Tuliskan kontrak kepemilikan itu ke dalam antarmuka alih-alih menganggap keluarnya proses melakukan tindakan jaringan. Pengguna tidak seharusnya menebak apakah menutup jendela akan memutus terowongan mereka. Letakkan jawabannya di teks antarmuka, bukan hanya di komentar kode.

Jaga wewenang dan rahasia pada pemiliknya

Izin kembali sebagai ya, auth, atau tidak, dan antarmuka harus mencerminkan perbedaan antara diizinkan, diizinkan setelah autentikasi, dan ditolak. Menjalankan pengontrol sebagai root tidak menerapkan kebijakan izin; itu menghapus pertanyaannya.

Kredensial menjadi milik agen rahasia yang didukung atau integrasi klien untuk metode autentikasi yang dikonfigurasi. Kata sandi di kode sumber, di argumen, atau di log adalah temuan, dan otorisasi administratif lokal bukan peristiwa yang sama dengan autentikasi di gerbang.

Terakhir, laporkan status koneksi secara terpisah dari tugas yang ingin dilakukan pengguna. Terowongan bisa aktif sementara nama privat atau aplikasi tetap tidak tersedia, dan kegagalan kedua itu layak mendapat pesan dan statusnya sendiri. Pengontrol yang menyebut dengan tepat lapisan mana yang gagal lebih berguna daripada yang mengatakan VPN mati.

Artikel terkait