Jalankan VPN di dalam namespace-nya sendiri, jalankan satu aplikasi di sana, dan lalu lintas tetap keluar lewat rute host. Tidak ada yang rusak: namespace hanya mengatur proses yang masuk ke dalamnya, dan kebocoran datang dari proses yang tidak pernah masuk. Antarmuka, alamat, rute, aturan firewall, dan soket adalah yang dimiliki namespace. Berkas, akun, dan layanan yang sudah berjalan bukan, dan dari situlah sebagian besar kejutan berasal.

Apa yang dimiliki namespace, dan di mana soket lahir

Pindahkan antarmuka ke dalam namespace dan host kehilangannya; bangun terowongan di dalam dan host tidak bisa melihatnya. Itulah mekanisme VPN yang dibatasi namespace: perangkat dan rute yang menunjuk ke sana hidup dalam konteks yang hanya bisa dijangkau proses terpilih. Host mempertahankan rute bawaannya, sehingga semua yang di luar tetap tidak tersentuh.

Bagi WireGuard, konteks pembuatan sama pentingnya dengan lokasi saat ini: soket UDP diikat di namespace tempat antarmuka dibuat, bahkan setelah perangkat berpindah ke tempat lain. Tabel perutean mana yang diikuti paket terenkripsi bergantung pada tempat lahir itu. Ketika soket tetap berada dalam konteks tanpa rute ke peer, antarmuka mencari dan jabat tangan tidak pernah keluar. Periksa tempat lahirnya, lalu lokasinya saat ini.

Apa yang tidak diisolasi namespace

Tidak ada yang di sini memisahkan sistem berkas, akun, atau rahasia, dan tidak satu pun dari batas itu muncul karena Anda membuat namespace. Konfigurasi resolver adalah berkas, jadi proses di dalam masih bisa membaca pengaturan yang menunjuk ke resolver host dan mengirim kuerinya lewat rute yang tersirat. Aplikasi yang menyerahkan permintaan ke perantara atau layanan sistem yang sudah berjalan melibatkan proses dalam konteks yang sama sekali berbeda. Keduanya adalah permintaan yang tidak pernah dimaksudkan untuk dijawab oleh batas itu.

Solusinya adalah berkas per namespace di /etc/netns/<name>/resolv.conf, atau bind mount berkas yang disiapkan, yang diarahkan ke resolver yang dapat dijangkau dari dalam. Menyunting /etc/resolv.conf di host tidak mengubah apa pun yang dilihat namespace.

Penempatan proses adalah kendalinya

Isolasi yang Anda dapatkan persis isolasi proses yang Anda jalankan di dalam. Shell yang dijalankan melalui pembantu exec namespace, dan semua yang dihasilkannya, tetap di dalam; aplikasi desktop yang diluncurkan dari sesi host tidak. Buat konteksnya, pindahkan perangkatnya, lalu buktikan kedua sisi:

ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show

Baca wg show pertama dari dalam namespace dan yang kedua dari host, dan perkirakan hanya satu di antaranya mencantumkan peer. Jika keduanya melakukannya, perangkat tidak pernah berpindah; jika tidak ada, ia pergi ke tempat lain. Saat peluncur adalah manajer layanan, berkas unit-lah yang harus disunting, bukan pintasan desktop. Unit tanpa pengaturan namespace menjalankan daemon di konteks host dan membatalkan rancangan itu secara diam-diam.

Uji dari konteks aplikasi

Jalankan pemeriksaan dengan biner dan pengguna yang sama seperti yang dipakai aplikasi, di dalam namespace. Sertakan DNS dan kedua keluarga alamat, karena rute IPv6 yang tidak pernah Anda pikirkan adalah jalan keluar yang umum. Uji dari shell Anda sendiri hanya membuktikan bahwa shell Anda terisolasi.

Lalu jalankan pemeriksaan yang sama di host dan pastikan jawabannya berbeda: alamat terowongan dan jalan keluar yang dimaksud di dalam, rute host dan jalan keluar kantor di luar, serta resolver menurut nama. Beri nama namespace menurut penerapan, bukan protokol, agar skrip pembersihan tidak mencampur dua di antaranya.

Penerusan, kebijakan kegagalan, dan pembersihan

Untuk gateway, aktifkan penerusan secara sengaja dan putuskan apa yang harus terjadi saat terowongan putus. Namespace tidak memblokir rute yang Anda pasang di dalamnya, jadi rute cadangan ke host akan dipakai jika Anda membuatnya. Itu keputusan kebijakan, dan sebaiknya dituliskan sebelum pemadaman mengujinya.

Catat nama namespace, antarmuka, dan siapa pemilik konfigurasi, agar pembersihan hanya menghapus apa yang dibuat penerapan. Mengatur ulang jaringan host selama pengembalian mengubah pembersihan menjadi pemadaman. Halaman network_namespaces(7) singkat dan layak dibaca sebelum Anda merancang jalur itu.

Artikel terkait