VirtualBox VPN laboratuvarı: ağ geçidi VM mi yoksa yalnızca ana makine ağı mı
VirtualBox VPN laboratuvarı için yönlendirilmiş bir ağ geçidi VM'i ile yalnızca ana makine segmenti arasında seçim yapın, sonra tünel düştüğünde konuğu kapalı başarısızlığa uğratın.
VPN laboratuvarınızın ne kadar donanımı hak ettiğine karar vermelisiniz. İki VirtualBox segmenti arasında yönlendirilmiş bir ağ geçidi VM'i, adres çevirisini, dönüş yolunu ve gerçek bir istemcinin arkasında oturduğu güvenlik duvarı konumunu yeniden üretir. Tek bir yalnızca ana makine segmenti size bir denetimli kapı verir ve başka hiçbir şey vermez. Ağ geçidi sürümü üç konuk ve sürdürdüğünüz bir yönlendirme tablosu ister; yalnızca ana makine sürümü bir konuk ve bir ilke ister. Üç soru bunları ayırır ve üçüncüsü testinizin baştan geçip geçemeyeceğine karar verir.
Herhangi bir şeyi klonlamadan önce üç soruya yanıt verin
VPN sunucusunun neyi gözlemlemesi gerektiğiyle başlayın. Sunucu, test konuğunun olmayan bir kaynak adresi görmek zorundaysa, ikisi arasında bir şeyin çeviri yapması gerekir ve o şey sizin denetlediğiniz bir yönlendirici olmalıdır. Yalnızca ana makine ağı, ana makineye konuğun segmentinde bir bağdaştırıcı verir, çevirici değil. Konuk daha sonra dışarıda bir şeye ulaşması gerektiğinde bir NAT bağdaştırıcısı bağlarsınız ve VirtualBox'ın kendi NAT motoru size sormadan kaynağı yeniden yazar.
Ardından konuğun tünel dışında herhangi bir şeye ulaşıp ulaşamayacağını sorun. Bu yanıt iç veya yalnızca ana makineyi seçer ve çoğu laboratuvar yazısının atladığı soru budur. Son olarak tünel düştüğünde ne olması gerektiğini sorun, çünkü bu topolojiyi değil ilkeyi belirler ve yalnızca mutlu yolu kanıtlayan bir laboratuvar neredeyse hiçbir şeyi test etmemiştir.
| 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 |
Üç rolü iç ağlarla bağlayın
Üç konuk ve iki adlandırılmış segment kullanın, ağ geçidi her ikisinde de bağdaştırıcısı olan tek makine olsun:
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
İç ağ için ayrı bir oluşturma adımı yoktur. --intnet1 içindeki dize segmentin kendisidir: iki makine onu yalnızca ad tam olarak eşleşirse paylaşır ve ana makinedeki hiçbir şey ona bağlı değildir. Bu son özellik laboratuvarın temiz biçimde yinelenmesinin nedenidir, çünkü ana makinenin yolları, kendi VPN istemcisi ve güvenlik duvarı konuklara kazara ulaşamaz. İç segmentte ayrıca bir tane eklemedikçe DHCP sunucusu yoktur, bu yüzden statik adresler en kısa yoldur.
İstemciye yalnızca kendi WAN adresini verin, varsayılan ağ geçidi ağ geçidinin WAN adresini göstersin. Sunucu bir LAN adresi alır ve ağ geçidinin LAN adresini kendi varsayılan ağ geçidi olarak kullanır. Bir segmentte iki adres tutan veya diğer segmente sapmış bir yolu olan konuğun yönlendiricinin etrafından dolaşan bir yolu vardır ve aşağıdaki testler size yalan söyleyecektir.
VM adlarının yanında dört adres ve iki segment adı içeren bir metin dosyası tutar ve her kabuğa yapıştırırım. Haftalar sonra bir profil değişikliği bir şeyi bozduğunda, o dosya profili ayıklamakla kendi belleğimi ayıklamak arasındaki farktır.
Sızmaması gereken segment için iç veya yalnızca ana makine seçin
Yalnızca ana makine kipi ana makinenin kendisinde sanal bir bağdaştırıcı oluşturur, genellikle vboxnet0, ve ana makineye konuğun segmentinde bir adres verir. Bu yönetim için kullanışlı, yalıtım testi için ölümcüldür, çünkü ana makine artık konuğa doğrudan ulaşabilir ve ana makine tarafındaki her hizmet olası bir yol olur. İç kipte ana makine bağdaştırıcısı hiç yoktur. İki kip ağ ayarları panelinde kolayca karıştırılır, bu yüzden etiketi değil belgelenmiş farkı denetleyin (VirtualBox ağ ayrıntıları sayfasına bakın).
Tüneli kullanması gereken bir konuk için iç kip daha güvenli varsayılandır, ağ geçidi tek çıkıştır. Yalnızca ana makineyi korursanız, ana makine bağdaştırıcısını bir yönetim yolu olarak görün ve bunu yüksek sesle söyleyin: ana makine konuğa ulaşabilir ve konuk ana makineyi çıkış olarak kullanamamalıdır.
VBoxManage modifyvm lab-client --nic1 hostonly --hostonlyadapter1 vboxnet0
Kanıtlayabileceğiniz yalıtım, yapılandırdığınız yalıtımdır. Tek bir iç bağdaştırıcısı, ağ geçidinde varsayılan yolu olan ve NAT bağdaştırıcısı olmayan konuğun ağ geçidini atlayan bir yolu yoktur. Yalnızca ana makine bağdaştırıcısı ve NAT bağdaştırıcısı olan konuğun iki yolu vardır ve bunlardan yalnızca biri test etmek istediğiniz yoldur.
Ağ geçidinde yönlendirin ve çevirin, sonra kapalı olarak başarısız olmasını sağlayın
VirtualBox segmentler arasında iletmez; bunu konuk yapar. VPN sunucusu VM'i ağ geçidinin arkasındayken iletmeyi etkinleştirin ve istemcinin trafiğini sunucuya doğru çıkarken çevirin:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Bu kuralla sunucu istemcinin yerine ağ geçidinin LAN adresini görür ve gerçek bir istemcinin bir operatör NAT'ı arkasından bir uç noktaya görünüşü tam olarak böyledir. sysctl değerini /etc/sysctl.d/ içinde ve kuralı dağıtımın kullandığı güvenlik duvarı hizmetinde saklayın, yoksa yeniden başlatma laboratuvarı sessizce yönlendirilmiş ama çevrilmemiş bir duruma geri döndürür.
İletme yetkilendirme değildir. ACCEPT varsayılan FORWARD ilkesi altında, varsayılan yolu ağ geçidini gösteren konuk, tünel olsun veya olmasın, yönlendirme tablosunun seçtiği arayüzden çıkar. Ağ geçidinde paket kurulumu için bir NAT bağdaştırıcısı da varsa, o bağdaştırıcı tünelin düştüğü anda çalışan şifrelenmemiş bir çıkıştır ve sizin yalnızca VPN testiniz hiçbir zaman yalnızca VPN testi olmamıştır.
Sunucu uzaktaysa ve tüneli ağ geçidi kendisi sonlandırıyorsa, aynı karar internet'e ulaşan NIC'i değil tünel arayüzünü gösterir:
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
Tünelin kendi dış taşımasını ve bant dışı yönetim yolunu iletilen trafikten ayrı tutun. Ağ geçidini onarmanın tek yolu ayıkladığınız tünelden geçmekse, laboratuvar bir kilitlenme alıştırmasına dönüşür. Bir seri konsol, yalnızca ana makine yönetim bağdaştırıcısı veya bilinen iyi bir durumun anlık görüntüsü, bozuk bir yönlendiriciyi elle kurtarmaktan daha ucuzdur.
Yolu ana makineden değil konuktan doğrulayın
Dışarı doğru çalışın. İstemcinin ağ geçidinin WAN adresine ulaştığını, ardından ağ geçidi üzerinden sunucuya ulaştığını, ardından VPN bağlantı noktasına giden bağlantının çıkıp geri döndüğünü doğrulayın. Ağ geçidinin iki arayüzünde yakalama, yanıtın gelip gelmediğini ve dönüş yolunda atılıp atılmadığını gösterir; bunu yalnızca istemcide yakalama ayırt edemez:
tcpdump -ni eth0 udp port 1194
tcpdump -ni tun0 udp port 1194
Ardından çıkışı kanıtlayın. Konuktan bir adres yansıtma hizmetine hangi kaynağı gördüğünü sorun ve ağ geçidinin kendi çıkış adresiyle karşılaştırın; yanıt ana makinenin adresiyle eşleşiyorsa tünelin etrafından dolaşan bir yol vardır. Konuğun gerçekte hangi çözümleyiciyi kullandığını denetleyin ve IPv6'yı ayrıca denetleyin, çünkü IPv6 açıkken tünelin yalnızca IPv4 taşıdığı segment tasarım gereği sızar, kazara değil.
Son olarak, bilerek kırın. Tüneli durdurun veya dış bağlantı noktasını engelleyin ve konuktan yeni bir bağlantı açın. Başarısız olmalı ve nedeni adlandırabileceğiniz bir şey olmalı: yol yok, bir reddetme kuralı var veya çözümleyici ölü. Tüneli yeniden başlatın ve konuğun ağı yeniden kurmadan iyileştiğini doğrulayın. Hamachi veya ZeroTier gibi bir mesh VPN laboratuvarı paylaşıyorsa, köprülenmiş bağdaştırıcının mesh'i değil bağdaştırıcı adını izlediğini unutmayın, bu yüzden istemci kendi sanal bağdaştırıcısını kurduktan sonra köprünün yeniden yönlendirilmesi gerekir.
VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>
Konuğun tünelini ana makineyle paylaşmak sorunu yansıtır. Ana makinenin varsayılan yolunu konuğa yöneltmek işe yarar, konuğun içindeki vekil sunucu da işe yarar; ana makine üzerinden NAT, ana makinenin başlattığı trafik için konuğun tünelini taşımaz. Segment adlarını ve güvenlik duvarı kurallarını tek bir yerde saklayın, çalışan durumun anlık görüntüsünü alın ve sunucunun gözlemlediği kaynak adresini kaydedin. Bir sonraki profil değişikliği o zaman yeniden kurulmuş bir laboratuvar yerine tek bir betik çalıştırmaya mal olur.