Dua ikon koneksi hijau terlihat seperti perbandingan dan biasanya hanya kebetulan. Jika permintaan uji bisa memakai salah satu dari dua tunnel, hasilnya paling baik menjelaskan salah satunya dan paling buruk tidak keduanya. Beri setiap pengamatan konteks jaringan, tujuan yang dimaksudkan, dan ekspektasi yang ditulis sebelum uji dijalankan. Di mesin Linux yang Anda kelola sendiri, namespace jaringan bernama adalah cara termurah untuk membeli pemisahan itu.

Dua lampu hijau bukanlah perbandingan

Namespace memisahkan tabel perutean, antarmuka, dan keadaan tumpukan jaringan, sehingga permintaan yang dimulai di dalam satu namespace tidak dapat diam-diam meminjam tunnel milik namespace lain. Yang tidak dipisahkannya adalah CPU, uplink fisik, atau daemon resolver yang berjalan di host. Di celah terakhir itulah sebagian besar uji ini gagal tanpa ada yang menyadarinya. Pencarian yang keluar dari namespace dan bertanya ke resolver host mengembalikan jawaban yang tidak berhubungan dengan tunnel yang diuji.

Prosedur ini mengandaikan dua namespace uji yang sudah disiapkan dan disetujui, dengan konektivitas luar yang berfungsi dan klien yang didukung. Prosedur ini tidak membuat apa pun, tidak mendaftarkan apa pun, dan tidak mengganti konfigurasi apa pun. Mesin virtual terpisah tetap menjadi pilihan jujur ketika klien membutuhkan sesi desktop penuh atau menolak berjalan di luarnya.

Tetapkan ekspektasi sebelum percobaan pertama

Putuskan per konteks bagaimana keberhasilan terlihat: resolver, nama layanan, alamat yang diharapkan, dan perilaku yang diperlukan saat tunnel putus. Simpan nilai-nilai terencana itu di kolomnya sendiri, karena catatan yang mencampur rencana dan pengamatan adalah fiksi dengan stempel waktu. Daftar periksa di bawah adalah bentuk yang dibutuhkan catatan, dan setiap baris harus dapat diisi sebelum koneksi pertama.

TunnelOwnerClient interface inside the namespaceProof commandRequired on disconnect
vpn-athe identity that owns profile A, recorded by nameits own tun device, never the host'sip -n vpn-a -4 route get 10.55.10.20traffic stops; no host-side fallback
vpn-ba separate owner, even when both run on one boxits own tun device in its own namespaceip -n vpn-b -4 route get 10.55.20.20verified separately, never inferred from A

Pengkabelan resolver perlu barisnya sendiri dalam catatan itu, karena itulah bidang yang paling mungkin berbohong. Berkas yang terikat ke namespace, seperti /etc/netns/vpn-a/resolv.conf muncul di jalur biasanya ketika sebuah perintah dijalankan di dalam namespace, sebagaimana referensi iproute2 tentang namespace menjelaskannya, tetapi konfigurasi peralihan layanan nama dan resolver lokal apa pun yang dijalankannya masih dapat menarik pencarian kembali ke host.

Satu tunnel pada satu waktu, yang lain terputus

Hubungkan A melalui pemiliknya yang sudah ada sementara B tetap mati, lalu periksa kebijakan, rute, dan jalur yang dipilih dari konteks administrasi. Tiga dari perintah di bawah membaca keadaan; hanya yang terakhir menghubungi layanan nama, dan tidak satu pun mengirim permintaan aplikasi.

sudo ip -n vpn-a -4 rule show
sudo ip -n vpn-a -4 route show table all
sudo ip -n vpn-a -4 route get 10.55.10.20
sudo ip netns exec vpn-a getent ahostsv4 svc-a.lab.internal

Pencarian rute menjawab pertanyaan hipotetis tentang tujuan, jadi tidak dapat menunjukkan bahwa layanan menerima lalu lintas. Simpan kedua jenis bukti itu di kolom terpisah, karena rute yang sehat di samping koneksi yang ditolak adalah hasil yang nyata dan umum. Lalu kirim satu permintaan resmi yang tidak berbahaya dengan aplikasi sebenarnya, dijalankan dalam konteks A sebagai pengguna normalnya tanpa hak istimewa dengan validasi sertifikat dan autentikasi aplikasi tetap utuh, dan catat hasilnya bersama alamat sumber yang dilihat layanan. Putuskan A melalui pemiliknya dan ulangi seluruh garis dasar untuk B, sambil mencatat setiap perubahan konfigurasi yang Anda buat, jika tidak kedua garis dasar tidak lagi sebanding.

Keduanya hidup, lalu satu mati pada satu waktu

Keadaan mantap adalah bagian yang mudah. Dengan kedua tunnel terhubung, ulangi pencarian dan permintaan aplikasi setiap konteks, lalu putuskan satu tunnel dan periksa yang lain. Hubungkan kembali dalam urutan terbalik ketika urutan koneksi itu sendiri yang menjadi pertanyaan.

sudo ip netns exec vpn-a tcpdump -ni any port 443 -c 5
sudo ip netns exec vpn-b getent ahostsv4 svc-b.lab.internal
sudo ip -n vpn-b -4 route get 10.55.20.20

Tangkapan menyelesaikan perdebatan yang tidak dapat diselesaikan hasil aplikasi: tangkapan menunjukkan apakah permintaan keluar melalui antarmuka yang Anda harapkan atau melalui sesuatu yang sama sekali lain. Untuk setiap transisi catat tindakan pemilik, stempel waktu, hasil rute, hasil nama, dan hasil aplikasi. Lalu periksa syarat penutupan aman di dalam namespace yang terdampak, karena isolasi bukan tombol pemutus. Namespace menjaga dua tunnel tetap terpisah; ia tidak mencegah salah satunya membawa lalu lintas ketika profilnya menyatakan lalu lintas harus berhenti.

Apa yang bisa dan tidak bisa diklaim catatan ini

Sebuah kelulusan membuktikan pengamatan itu untuk susunan ini, di host ini, pada saat itu. Catatan itu tidak mengatakan apa pun tentang dua klien yang berbagi satu tabel perutean desktop, dan tidak tentang throughput saat kedua tunnel membawa beban. Itu pertanyaan terpisah dengan uji terpisah, dan perbandingan hanya sebaik konteks yang dilekatkan pada setiap baris.

Simpan kegagalan dalam catatan di samping keberhasilan, diberi label tunnel mana yang hidup saat itu. Halaman bersih yang menyembunyikan keadaan pada saat pengukuran lebih buruk daripada halaman jelek yang menunjukkannya. Yang membuat catatan dapat dipakai lagi nanti adalah konteks, bukan skornya.

Dua tunnel di satu mesin dapat dibandingkan dengan jujur, tetapi hanya di dalam sebanyak konteks yang benar-benar Anda kendalikan. Apa pun di luar itu adalah harapan dengan ikon hijau di sampingnya.

Artikel terkait