Makmal VPN VirtualBox: VM gerbang berbanding rangkaian khas hos
Pilih antara VM gerbang yang dihalakan dan segmen khas hos untuk makmal VPN VirtualBox, kemudian buat tetamu gagal tertutup apabila terowong jatuh.
Anda perlu memutuskan berapa banyak jentera yang layak diperoleh makmal VPN anda. VM gerbang yang dihalakan antara dua segmen VirtualBox menghasilkan semula terjemahan alamat, laluan pulang dan kedudukan firewall yang di belakangnya duduk klien sebenar. Satu segmen khas hos memberi anda satu pintu terkawal dan tiada yang lain. Versi gerbang memerlukan tiga tetamu dan jadual penghalaan yang anda selenggara; versi khas hos memerlukan satu tetamu dan satu dasar. Tiga soalan memisahkan kedua-duanya, dan yang ketiga menentukan sama ada ujian anda boleh lulus sama sekali.
Jawab tiga soalan sebelum anda mengklon apa-apa
Mulakan dengan apa yang pelayan VPN mesti perhatikan. Jika pelayan mesti melihat alamat sumber yang bukan milik tetamu ujian, sesuatu mesti menterjemah antara keduanya, dan sesuatu itu mesti penghala yang anda kawal. Rangkaian khas hos memberi hos penyesuai pada segmen tetamu, bukan penterjemah. Apabila tetamu kemudian perlu mencapai sesuatu di luar, anda pasang penyesuai NAT, dan enjin NAT VirtualBox sendiri menulis semula sumber tanpa bertanya kepada anda.
Seterusnya, tanya sama ada tetamu boleh mencapai apa-apa kecuali melalui terowong. Jawapan itu memilih dalaman atau khas hos, dan inilah soalan yang dilangkau oleh kebanyakan tulisan makmal. Akhir sekali, tanya apa yang mesti berlaku apabila terowong jatuh, kerana itu menentukan dasar bukan topologi, dan makmal yang hanya membuktikan laluan bahagia hampir tidak menguji apa-apa.
| What the test requires | Routed gateway VM | Host-only guest |
|---|---|---|
| Server sees a translated source address | Yes, from your own MASQUERADE rule | No, VirtualBox NAT does it instead |
| The guest has exactly one egress | Yes, while the second adapter faces the tunnel | Only until a NAT adapter is attached |
| Policy is testable during a tunnel failure | Rules live in one place | Rules live on each guest |
Sambungkan ketiga-tiga peranan dengan rangkaian dalaman
Gunakan tiga tetamu dan dua segmen bernama, dengan gerbang sebagai satu-satunya mesin yang mempunyai penyesuai pada kedua-duanya:
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
Tiada langkah penciptaan berasingan untuk rangkaian dalaman. Rentetan dalam --intnet1 ialah segmennya: dua mesin berkongsinya hanya jika nama sepadan tepat, dan tiada apa-apa pada hos yang disambungkan kepadanya. Sifat terakhir inilah sebab makmal berulang dengan bersih, kerana laluan hos, klien VPNnya sendiri dan firewallnya tidak boleh mencapai tetamu secara tidak sengaja. Segmen dalaman juga tiada pelayan DHCP melainkan anda menambah satu, jadi alamat statik ialah laluan terpendek.
Beri klien hanya alamat WANnya, dengan gerbang lalai menghala ke alamat WAN gerbang. Pelayan menerima alamat LAN dan menggunakan alamat LAN gerbang sebagai gerbang lalainya. Tetamu yang menyimpan dua alamat pada satu segmen, atau mempunyai laluan sesat ke segmen lain, mempunyai laluan memutari penghala, dan ujian di bawah akan menipu anda.
Saya menyimpan fail teks di sebelah nama VM dengan empat alamat dan dua nama segmen, dan menampalnya ke dalam setiap shell. Beberapa minggu kemudian, apabila perubahan profil merosakkan sesuatu, fail itu ialah perbezaan antara menyahpepijat profil dan menyahpepijat ingatan saya sendiri.
Pilih dalaman atau khas hos untuk segmen yang tidak boleh bocor
Mod khas hos mencipta penyesuai maya pada hos itu sendiri, biasanya vboxnet0, dan memberi hos alamat pada segmen tetamu. Itu mudah untuk pentadbiran dan membawa maut untuk ujian pengasingan, kerana hos kini boleh mencapai tetamu secara langsung dan setiap perkhidmatan di sebelah hos menjadi laluan yang mungkin. Mod dalaman langsung tiada penyesuai hos. Kedua-dua mod mudah dikelirukan dalam panel tetapan rangkaian, jadi semak perbezaan yang didokumenkan, bukan labelnya (lihat halaman butiran rangkaian VirtualBox).
Untuk tetamu yang mesti menggunakan terowong, dalaman ialah lalai yang lebih selamat, dengan gerbang sebagai satu-satunya jalan keluar. Jika anda mengekalkan khas hos, anggap penyesuai hos sebagai laluan pengurusan dan katakan dengan lantang: hos boleh mencapai tetamu, dan tetamu tidak boleh menggunakan hos sebagai jalan keluar.
VBoxManage modifyvm lab-client --nic1 hostonly --hostonlyadapter1 vboxnet0
Pengasingan yang boleh anda buktikan ialah pengasingan yang anda konfigurasikan. Tetamu dengan satu penyesuai dalaman, laluan lalai di gerbang dan tiada penyesuai NAT tidak mempunyai laluan yang memintas gerbang. Tetamu dengan penyesuai khas hos dan penyesuai NAT mempunyai dua laluan, dan hanya satu daripadanya ialah laluan yang anda mahu uji.
Halakan dan terjemah pada gerbang, kemudian buat ia gagal tertutup
VirtualBox tidak memajukan antara segmen; tetamu yang melakukannya. Dengan VM pelayan VPN di belakang gerbang, aktifkan pemajuan dan terjemah trafik klien apabila ia keluar menuju pelayan:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Dengan peraturan itu pelayan melihat alamat LAN gerbang dan bukannya alamat klien, dan begitulah klien sebenar di belakang NAT pengendali kelihatan kepada kepala rangkaian. Simpan nilai sysctl dalam /etc/sysctl.d/ dan peraturan itu dalam perkhidmatan firewall yang digunakan oleh distribusi, atau but semula akan mengembalikan makmal secara senyap ke keadaan dihalakan tetapi tidak diterjemah.
Pemajuan bukan kebenaran. Di bawah dasar FORWARD lalai bernilai ACCEPT, tetamu yang laluan lalainya menghala ke gerbang keluar melalui antara muka yang dipilih jadual penghalaan, dengan terowong atau tidak. Jika gerbang juga mempunyai penyesuai NAT untuk pemasangan pakej, penyesuai itu ialah jalan keluar tidak disulitkan yang berfungsi pada saat terowong jatuh, dan ujian khusus VPN anda tidak pernah menjadi ujian khusus VPN.
Apabila pelayan berada jauh dan gerbang sendiri menamatkan terowong, keputusan yang sama menghala ke antara muka terowong, 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 pengangkutan luar terowong itu sendiri dan laluan pengurusan di luar jalur daripada trafik yang dimajukan. Jika satu-satunya cara untuk membaiki gerbang ialah melalui terowong yang anda nyahpepijat, makmal menjadi latihan berkunci di luar. Konsol bersiri, penyesuai pengurusan khas hos atau syot kilat keadaan baik yang diketahui lebih murah daripada memulihkan penghala rosak dengan tangan.
Sahkan laluan dari tetamu, bukan dari hos
Bekerjalah ke arah luar. Sahkan klien boleh mencapai alamat WAN gerbang, kemudian pelayan melalui gerbang, kemudian sambungan ke port VPN keluar dan kembali. Tangkapan pada kedua-dua antara muka gerbang menunjukkan sama ada jawapan tiba dan digugurkan pada laluan pulang, yang tidak dapat dibezakan oleh tangkapan hanya pada klien:
tcpdump -ni eth0 udp port 1194
tcpdump -ni tun0 udp port 1194
Kemudian buktikan jalan keluar. Tanya dari tetamu kepada perkhidmatan pantulan alamat sumber apa yang dilihatnya dan bandingkan dengan alamat keluar gerbang itu sendiri; jika jawapannya sepadan dengan alamat hos, laluan memutari terowong wujud. Semak penyelesai mana yang sebenarnya digunakan tetamu, dan semak IPv6 secara berasingan, kerana segmen yang IPv6nya diaktifkan sementara terowong hanya membawa IPv4 bocor mengikut reka bentuk, bukan secara tidak sengaja.
Akhir sekali, rosakkannya dengan sengaja. Hentikan terowong, atau sekat port luarnya, dan buka sambungan baharu dari tetamu. Ia mesti gagal, dan sebabnya mesti satu yang boleh anda namakan: tiada laluan, peraturan penolakan, atau penyelesai mati. Mulakan semula terowong dan sahkan tetamu pulih tanpa membina semula rangkaian. Jika VPN jaringan seperti Hamachi atau ZeroTier berkongsi makmal, ingat bahawa penyesuai dijambatani mengikut nama penyesuai, bukan jaringan, jadi jambatan mesti dihalakan semula selepas klien memasang penyesuai mayanya sendiri.
VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>
Berkongsi terowong tetamu dengan hos mencerminkan masalahnya. Menghalakan laluan lalai hos ke tetamu berkesan, begitu juga proksi di dalam tetamu; NAT melalui hos tidak membawa terowong tetamu untuk trafik yang dimulakan hos. Simpan nama segmen dan peraturan firewall di satu tempat, ambil syot kilat keadaan yang berfungsi, dan catat alamat sumber yang diperhatikan pelayan. Perubahan profil seterusnya kemudian hanya memerlukan satu larian skrip dan bukannya makmal yang dibina semula.