Pelayar yang menggunakan VPN Linux yang sudah terbentuk tidak membuka /dev/net/tun. Ia membuka soket, dan kernel menentukan antara muka mana yang dilalui paket soket itu. Proses yang mencipta terowong melakukan kerja berbeza daripada proses yang trafiknya dibawanya. Memisahkan kedua-dua peranan itu menjawab kebanyakan soalan kebenaran sebelum ia ditanya.

Ikut satu paket dari soket ke terowong

Aplikasi biasa memanggil connect atau send, dan kernel mencari laluan ke destinasinya. Jika laluan yang dipilih menunjuk ke antara muka terowong, paket itu dimasukkan ke baris gilir peranti yang dibaca daemon VPN. Daemon menyulitkannya dan menghantarnya keluar melalui antara muka fizikal. Setiap anak panah dalam huraian itu ialah tempat soalan kebenaran boleh dijawab.

Tiada apa-apa dalam laluan itu yang memerlukan aplikasi mengetahui peranti. Daemon memegang penerang fail dan melakukan operasi antara muka, manakala aplikasi hanya melihat API rangkaian biasa.

Lukis kedua-dua bahagian sekali, dan soalan kebenaran menjadi lebih mudah diletakkan. Bahagian atas ialah dunia aplikasi, dan bahagian bawah milik daemon.

Tentukan siapa yang memerlukan peranti dan siapa yang tidak

Mencipta atau menyertai antara muka TUN memerlukan akses peranti serta keupayaan untuk mengkonfigurasinya, sebab itulah perkhidmatan VPN yang disokong bermula dengan kuasa pentadbiran rangkaian atau menggunakan pembantu istimewa. Keperluan itu milik daemon. Ia tidak berkata apa-apa tentang pelayar, klien pangkalan data atau alat pemindahan fail. Perkhidmatan yang memerlukan keupayaan itu memerlukannya untuk langkah persediaannya sendiri, bukan untuk kliennya.

Setelah laluan dan dasar tersedia, proses biasa menggunakan laluan yang terhasil melalui panggilan soket biasanya. Ia tidak memerlukan nod peranti, dan tidak memerlukan root.

Menukar kebenaran peranti bukan cara memberi aplikasi akses destinasi. Ia hanya memindahkan sempadan peranti ke tempat lain.

Semak ruang nama tempat aplikasi benar-benar berjalan

Kontena, atau ruang nama rangkaian kedua, memberikan prosesnya set antara muka dan jadual laluan yang berasingan. Terowong pada hos tidak muncul di situ secara automatik, dan tiada perubahan kebenaran peranti yang mengubahnya. Aplikasi hanya akan menyalurkan melalui apa sahaja yang disediakan ruang nama itu. Itulah sebabnya imej kontena tidak boleh mewarisi terowong hos secara tidak sengaja.

Semak dengan ip netns list dan ip -n NAME route, atau dengan memeriksa pautan ruang nama proses itu. Jawapannya biasanya kelihatan dalam satu arahan.

Dua pengguna pada hos yang sama juga boleh diberi laluan berbeza melalui dasar. Itu keputusan rangkaian, bukan bukti pemilikan peranti.

Pisahkan keupayaan daripada dasar rangkaian

Sesetengah alat memerlukan lebih daripada soket. Menangkap paket memerlukan soket mentah, dan menukar laluan memerlukan kuasa pentadbiran. Itu operasi berasingan dengan pemberian berasingan, dan memberikan satu tidak sepatutnya dibaca sebagai keperluan menyeluruh untuk menggunakan VPN.

Program yang melaksanakan terowongnya sendiri ialah kes ketiga. Ia benar-benar membuka TUN kerana mengambil peranan daemon, sebab itulah ia memerlukan keistimewaan daemon.

Namakan operasi sebelum menamakan keistimewaannya. Kedua-duanya biasanya lebih mudah dipisahkan daripada yang kelihatan.

Sahkan pemisahan dengan dua akaun

Sambungkan terowong sebagai perkhidmatan, kemudian jalankan aplikasi sebagai pengguna biasa dan sahkan ia mencapai sumber peribadi. Semak ip route get untuk destinasi dari shell pengguna itu untuk melihat antara muka mana yang dipilih. Jika laluan betul dan sambungan masih gagal, masalahnya dasar, bukan keistimewaan.

Reka bentuk yang terhasil ialah keistimewaan minimum dengan sempadan yang jelas: satu komponen memiliki persediaan dan sumber terowong, beban kerja mengekalkan akaun biasa mereka, dan dasar rangkaian memutuskan apa yang boleh melalui. Menjalankan semuanya sebagai root meruntuhkan peranan itu tanpa menjelaskan apa-apa.

Artikel berkaitan