Anda perlu memutuskan seberapa banyak mesin yang layak didapat laboratorium VPN Anda. VM gateway terrutekan di antara dua segmen VirtualBox mereproduksi penerjemahan alamat, jalur kembali, dan posisi firewall yang di belakangnya duduk klien sungguhan. Satu segmen khusus host memberi Anda satu pintu terkendali dan tidak lebih. Versi gateway membutuhkan tiga tamu dan tabel perutean yang Anda rawat; versi khusus host membutuhkan satu tamu dan satu kebijakan. Tiga pertanyaan memisahkan keduanya, dan yang ketiga menentukan apakah pengujian Anda bisa lulus sama sekali.

Jawab tiga pertanyaan sebelum Anda mengkloning apa pun

Mulailah dari apa yang harus diamati server VPN. Jika server harus melihat alamat sumber yang bukan milik tamu uji, sesuatu harus menerjemahkan di antara keduanya, dan sesuatu itu harus berupa perute yang Anda kendalikan. Jaringan khusus host memberi host sebuah adaptor di segmen tamu, bukan penerjemah. Saat tamu kemudian perlu menjangkau sesuatu di luar, Anda memasang adaptor NAT, dan mesin NAT VirtualBox sendiri menulis ulang sumbernya tanpa bertanya kepada Anda.

Berikutnya, tanyakan apakah tamu boleh menjangkau apa pun selain melalui terowongan. Jawaban itu memilih internal atau khusus host, dan itulah pertanyaan yang dilewati sebagian besar tulisan laboratorium. Terakhir, tanyakan apa yang harus terjadi saat terowongan putus, karena itu menentukan kebijakan bukan topologi, dan laboratorium yang hanya membuktikan jalur bahagia hampir tidak menguji apa pun.

What the test requiresRouted gateway VMHost-only guest
Server sees a translated source addressYes, from your own MASQUERADE ruleNo, VirtualBox NAT does it instead
The guest has exactly one egressYes, while the second adapter faces the tunnelOnly until a NAT adapter is attached
Policy is testable during a tunnel failureRules live in one placeRules live on each guest

Hubungkan ketiga peran dengan jaringan internal

Gunakan tiga tamu dan dua segmen bernama, dengan gateway sebagai satu-satunya mesin yang memiliki adaptor di keduanya:

VBoxManage modifyvm lab-client --nic1 intnet --intnet1 WAN
VBoxManage modifyvm lab-server --nic1 intnet --intnet1 LAN
VBoxManage modifyvm lab-gw --nic1 intnet --intnet1 WAN --nic2 intnet --intnet2 LAN

Tidak ada langkah pembuatan terpisah untuk jaringan internal. String di --intnet1 adalah segmennya: dua mesin hanya berbagi segmen itu jika namanya cocok persis, dan tidak ada apa pun di host yang terpasang padanya. Sifat terakhir itulah alasan laboratorium berulang dengan bersih, karena rute host, klien VPN-nya sendiri, dan firewall-nya tidak dapat menjangkau para tamu secara tidak sengaja. Segmen internal juga tidak memiliki server DHCP kecuali Anda menambahkannya, jadi alamat statis adalah jalur terpendek.

Beri klien hanya alamat WAN-nya, dengan gateway default yang menunjuk ke alamat WAN gateway. Server mendapat alamat LAN dan memakai alamat LAN gateway sebagai gateway default-nya. Tamu yang menyimpan dua alamat pada satu segmen, atau memiliki rute nyasar ke segmen lain, punya jalur memutari perute, dan pengujian di bawah akan berbohong kepada Anda.

Saya menyimpan berkas teks di samping nama VM berisi keempat alamat dan kedua nama segmen, dan menempelkannya ke setiap shell. Berminggu-minggu kemudian, ketika perubahan profil merusak sesuatu, berkas itu adalah pembeda antara men-debug profil dan men-debug ingatan saya sendiri.

Pilih internal atau khusus host untuk segmen yang tidak boleh bocor

Mode khusus host membuat adaptor virtual pada host itu sendiri, biasanya vboxnet0, dan memberi host alamat di segmen tamu. Itu nyaman untuk administrasi dan fatal untuk uji isolasi, karena host kini dapat menjangkau tamu secara langsung dan setiap layanan di sisi host menjadi jalur yang mungkin. Mode internal tidak memiliki adaptor host sama sekali. Kedua mode mudah tertukar di panel pengaturan jaringan, jadi periksa perbedaan yang didokumentasikan, bukan labelnya (lihat halaman detail jaringan VirtualBox).

Untuk tamu yang harus memakai terowongan, internal adalah default yang lebih aman, dengan gateway sebagai satu-satunya jalan keluar. Jika Anda mempertahankan khusus host, perlakukan adaptor host sebagai jalur manajemen dan katakan itu dengan lantang: host boleh menjangkau tamu, dan tamu tidak boleh dapat memakai host sebagai jalan keluar.

VBoxManage modifyvm lab-client --nic1 hostonly --hostonlyadapter1 vboxnet0

Isolasi yang dapat Anda buktikan adalah isolasi yang Anda konfigurasikan. Tamu dengan satu adaptor internal, rute default di gateway, dan tanpa adaptor NAT tidak memiliki jalur yang melewati gateway. Tamu dengan adaptor khusus host dan adaptor NAT memiliki dua jalur, dan hanya satu di antaranya yang ingin Anda uji.

Rutekan dan terjemahkan di gateway, lalu buat gagal tertutup

VirtualBox tidak meneruskan antar segmen; tamu yang melakukannya. Dengan VM server VPN di belakang gateway, aktifkan penerusan dan terjemahkan lalu lintas klien saat keluar menuju server:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Dengan aturan itu server melihat alamat LAN gateway alih-alih alamat klien, dan begitulah klien sungguhan di belakang NAT operator terlihat oleh kepala jaringan. Simpan nilai sysctl di /etc/sysctl.d/ dan aturannya di layanan firewall yang dipakai distribusi, atau reboot akan diam-diam mengembalikan laboratorium ke keadaan terrutekan tetapi tidak diterjemahkan.

Penerusan bukan otorisasi. Di bawah kebijakan FORWARD bawaan bernilai ACCEPT, tamu yang rute default-nya menunjuk ke gateway keluar melalui antarmuka mana pun yang dipilih tabel perutean, dengan terowongan atau tidak. Jika gateway juga memiliki adaptor NAT untuk pemasangan paket, adaptor itu adalah jalan keluar tanpa enkripsi yang berfungsi pada saat terowongan putus, dan uji khusus VPN Anda tidak pernah menjadi uji khusus VPN.

Ketika server justru berada jauh dan gateway sendiri yang mengakhiri terowongan, keputusan yang sama menunjuk ke antarmuka terowongan, bukan ke NIC yang mencapai internet:

iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Jauhkan transport luar terowongan itu sendiri dan rute manajemen di luar pita dari lalu lintas yang diteruskan. Jika satu-satunya cara memperbaiki gateway adalah melalui terowongan yang sedang Anda debug, laboratorium menjadi latihan terkunci di luar. Konsol serial, adaptor manajemen khusus host, atau snapshot keadaan baik yang diketahui lebih murah daripada memulihkan perute rusak dengan tangan.

Verifikasi jalur dari tamu, bukan dari host

Bekerjalah ke arah luar. Pastikan klien dapat menjangkau alamat WAN gateway, lalu server melalui gateway, lalu bahwa koneksi ke porta VPN keluar dan kembali. Penangkapan pada kedua antarmuka gateway menunjukkan apakah jawaban tiba dan dibuang di jalur kembali, yang tidak dapat dibedakan oleh penangkapan hanya pada klien:

tcpdump -ni eth0 udp port 1194
tcpdump -ni tun0 udp port 1194

Lalu buktikan jalan keluarnya. Tanyakan dari tamu ke layanan pemantul alamat alamat sumber apa yang dilihatnya dan bandingkan dengan alamat keluar gateway itu sendiri; jika jawabannya cocok dengan alamat host, ada jalur memutari terowongan. Periksa resolver mana yang sebenarnya dipakai tamu, dan periksa IPv6 secara terpisah, karena segmen yang IPv6-nya aktif sementara terowongan hanya membawa IPv4 bocor menurut desain, bukan kebetulan.

Terakhir, rusaklah dengan sengaja. Hentikan terowongan, atau blokir porta luarnya, dan buka koneksi baru dari tamu. Koneksi itu harus gagal, dan alasannya harus salah satu yang dapat Anda sebutkan: tidak ada rute, aturan penolakan, atau resolver mati. Mulai ulang terowongan dan pastikan tamu pulih tanpa membangun ulang jaringan. Jika VPN mesh seperti Hamachi atau ZeroTier berbagi laboratorium, ingatlah bahwa adaptor yang dijembatani mengikuti nama adaptor, bukan mesh, jadi jembatan harus diarahkan ulang setelah klien memasang adaptor virtualnya sendiri.

VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>

Berbagi terowongan tamu dengan host mencerminkan masalahnya. Mengarahkan rute default host ke tamu berhasil, begitu pula proksi di dalam tamu; NAT melalui host tidak membawa terowongan tamu untuk lalu lintas yang dimulai host. Simpan nama segmen dan aturan firewall di satu tempat, ambil snapshot keadaan yang berfungsi, dan catat alamat sumber yang diamati server. Perubahan profil berikutnya lalu hanya membutuhkan satu jalannya skrip alih-alih laboratorium yang dibangun ulang.

Artikel terkait