Dua lab dapat memodelkan topologi VPN yang sama dan gagal dengan cara yang sangat berbeda: yang satu hidup di namespace jaringan, yang lain di rute host itu sendiri. Versi namespace menyimpan setiap antarmuka, rute, dan soket dalam konteks yang dapat Anda hapus, sedangkan versi host lebih cepat dimulai dan meninggalkan status di belakang. Status sisa itulah sebabnya lab kedua sulit diulang sebulan kemudian. Bandingkan pembersihan lebih dulu, karena itu menentukan apakah Anda dapat menjalankan eksperimen dua kali.

Dua cara membangun lab yang sama, dan kapan masing-masing menang

Dalam lab rute host Anda menambahkan antarmuka terowongan dan rute ke mesin tempat Anda bekerja, sehingga eksperimen berbagi nasib dengan shell, manajer paket, dan setiap koneksi lain. Dalam lab namespace setiap peran mendapat tumpukan antarmuka, alamat, rute, dan soketnya sendiri, dan menghapus namespace menghilangkan semuanya. Tidak ada model yang lebih benar, karena keduanya menjawab pertanyaan berbeda. Pilih namespace saat subjeknya adalah perutean dan penerusan, dan lab host saat subjeknya adalah bagaimana satu klien desktop terintegrasi.

AspectNamespace labHost-route lab
IsolationFull stack per roleShares the host stack
CleanupDelete named namespacesManual route and rule removal
RealismStrong for routingNeeded for GUI clients

Mencampur keduanya adalah kesalahan yang biasa: lab namespace yang diuji terhadap klien yang hanya ada di host tidak membuktikan apa pun tentang salah satu pengaturan. Putuskan pertanyaan apa yang Anda ajukan sebelum membuat tautan pertama.

Satu konteks per peran, terhubung dengan sengaja

Buat satu namespace per peran dan pindahkan setiap ujung setiap pasangan veth ke konteks yang memilikinya. Empat perintah pertama cukup untuk melihat bentuknya:

ip netns add client
ip netns add gateway
ip link add veth-c type veth peer name veth-g
ip link set veth-c netns client

Beri lab rentang yang tidak tumpang tindih dengan apa pun di host, dan catat sebelum mulai namespace mana yang memiliki alamat mana. Lab yang berfungsi membutuhkan dua jalur terpisah: jalur luar agar titik akhir VPN mencapai pasangannya, dan jalur balik untuk sumber daya yang dilindungi. Modelkan keduanya sebagai dua keputusan, karena lab yang hanya membangun separuh keluar lulus uji jabat tangan dan gagal uji aplikasi.

Peran penerusan adalah tempat lab menjadi menarik

Salah satu peran harus meneruskan, yang berarti mengaktifkan penerusan di dalam namespace itu dan menambahkan aturan yang dibutuhkan desain. Status penerusan bersifat per namespace, jadi pengaturan host tidak relevan bagi lab dan pengaturan lab tidak bocor keluar, seperti yang dijelaskan dokumentasi namespace jaringan. WireGuard mendokumentasikan bahwa antarmuka dan soket luarnya dapat hidup di namespace berbeda, yang merupakan trik berguna dan cara luar biasa untuk membingungkan diri sendiri. Jangan menganggap memindahkan antarmuka memindahkan setiap bagian koneksi dengan cara yang sama.

Periksa penghitung penerusan setelah paket uji, karena aturan yang tidak pernah cocok dan aturan yang menjatuhkan terlihat identik di tabel rute. Hanya penghitung yang memisahkan keduanya.

Catat garis dasar, lalu rusak satu rute

Mulailah dengan mencatat apa yang ada, dengan konteks tertulis di samping setiap baris. Baca namespace, lalu rute yang akan diambil tujuan uji di dalam salah satunya, lalu penghitung pada tautan yang membawanya:

ip netns list
ip -n client route get 10.0.0.5
ip -n gateway -s link show veth-g

Perintah ketiga adalah yang dilewati orang, dan di situlah buktinya: penghitung jatuh dan galat memberi tahu Anda apakah paket sama sekali mencapai peran penerusan. Catat tiga tampilan yang sama setelah perubahan, dan biarkan diff menjadi buktinya, bukan ingatan Anda. Lalu rusak tepat satu hal, entah dengan menghapus rute atau menambahkan aturan penolakan di jalur penerusan, dan konfirmasi gejala yang Anda prediksi: jabat tangan selesai tanpa balasan, atau kegagalan resolusi alih-alih waktu habis. Lab yang hanya menunjukkan keberhasilan mengajarkan sangat sedikit.

Pembersihan adalah yang membuat jalannya berikutnya dapat diulang

Jaga pembersihan tetap dalam lingkup sumber daya yang Anda beri nama, karena pengaturan ulang firewall menyeluruh atau penghapusan rute host bukanlah reproduktibilitas, melainkan insiden kedua. Simpan topologi, perintah persisnya, dan pengamatan yang Anda harapkan, agar jalannya berikutnya mereproduksi kegagalan yang sama alih-alih menebak konteks mana yang menyimpan status sebelumnya. Tanpa catatan itu, lab adalah cerita, bukan prosedur.

Gunakan kredensial yang dibuat secara lokal untuk lab, dan jauhkan akun produksi dari contoh bersama. Lalu hapus setiap namespace dan pastikan tampilan host tidak berubah, yang merupakan seluruh alasan memilih model ini. Lab yang tidak dapat Anda hapus dengan bersih adalah perubahan host dengan langkah tambahan.

Artikel terkait