VirtualBox NAT yoki ko'prik: VM VPN qayerda tugaydi
NAT mehmonni xost orqasiga yashiradi, shuning uchun xostdagi tunnel uni qoplaydi. Ko'prik mehmonga o'z manzilini beradi, shuning uchun tunnel VM ichida bo'lishi kerak.
Har safar virtual mashina VPN mijozini ishga tushirganda ikki xil savol birga keladi va ularning javoblari farq qiladi. Birinchisi mehmon ichidagi tunnel xostni himoya qiladimi, ikkinchisi xostdagi tunnel mehmonni qoplaydimi. Adapter rejimi ikkalasini ham hal qiladi, VPN dasturining o'zidan ham ko'proq. NAT adapteri xostni ko'rinadigan oxirgi nuqta qiladi, ko'prik adapteri esa mehmonni o'z manzili bilan tarmoqqa qo'yadi.
Shifrlangan sessiyani aslida kim tugatadi
Shifrlangan sessiya uni tugatadigan mashinaga tegishli va mijoz VM ichida ishlaganda bu mehmon. Bu tunneldan faqat mehmonning virtual adapteriga kiradigan trafik o'tadi va gipervayzer hech qachon o'zi boshqa mashinani mehmon orqali yo'naltirmaydi. Shuning uchun mehmon ishlaydigan tunnelni ushlab turishi mumkin, xost esa ochiq tarmoqda kezadi. Aksincha holat simmetrik emas va aynan shu assimetriya ko'pchilik qo'llanmalar xato qiladigan qismdir.
Tashqi tarmoq kimning manzilini ko'rishi adapter rejimi javob beradigan savoldir. Bu hal bo'lgach qamrov siyosat savoli bo'lishdan chiqadi va mexanik masalaga aylanadi. Quyidagi hamma narsa shu ikki faktdan kelib chiqadi.
NAT mehmonni xostga o'xshaguncha qayta yozadi
NAT bilan gipervayzer mehmonning har bir paketini birinchi kommutatorga yetib borishidan oldin xost manziliga qayta yozadi. Keyin bu trafik xostning o'z tarmoq stekiga beriladi, u yerda xostning marshrutlash jadvaliga bo'ysunadi, xostdagi tunnelga tegishli standart marshrut ham shu jumladan. Shuning uchun NAT mehmoni hech qanday sozlashsiz xostdagi tunnel bilan qoplanadi, bu esa mehmondan xostga yo'nalishi taklif qilganining aksidir.
# on the host: adapter mode and NAT DNS behaviour
VBoxManage showvminfo "lab-vm" | grep -i -E "nic|nat"
VBoxManage modifyvm "lab-vm" --natdnshostresolver1 on
O'z mijozini ishga tushirgan mehmon o'sha tunnelni mehmon ichida tugatadi va shifrlangan trafik o'sha qayta yozuv orqali chiqadi, shuning uchun xost dasturlari o'z yo'lini va o'z chiqish manzilini saqlaydi. VirtualBox bu rejimda nomlarni hal qilishga ham ega va --natdnshostresolver1 yoqilmagan bo'lsa mehmon so'rovlarini o'z mexanizmi orqali yuboradi. Uni yoqish mehmon izlanishlarini xost hal qiluvchisiga beradi, bu xostning o'z ko'rishi to'g'ri bo'lganda halni tuzatadi va xuddi shu darajada faqat tunnel ichida mavjud bo'lishi mumkin bo'lgan hal qiluvchini ham beradi. Parametrni o'zgartirishdan oldin VM o'chirilgan bo'lishi kerak va parametr mehmon dasturiga emas, adapterga tegishli.
Ko'prik mehmonga o'z ijarasi va o'z ko'rinishini beradi
Ko'prik mehmon kadrlarini fizik segmentga uzatadi, shuning uchun DHCP unga ijara beradi va tarmoq uni alohida xost deb qabul qiladi. Ko'prikka ulangan har bir mehmon o'z standart marshruti bilan mustaqil tunnelni ushlab turishi mumkin va xostning jadvali hech qachon o'zgarmaydi. Narxi — ko'rinish: mehmon translyatsiyalarga javob beradi, qo'shni jadvallarida ko'rinadi va kommutator porti xavfsizligi hamda simsiz mijozlar izolyatsiyasi ostiga tushadi. Xostdagi tunnel ham bu tartibni qoplamaydi, chunki mehmon kadrlari hech qachon xost stekidan o'tmaydi.
NAT holatidan bu farqni ishora sifatida qoldirishdan ko'ra ochiq aytish kerak. Ko'prikka ulangan mehmon o'z trafigi tunnel ishlatishi kerak bo'lganda har safar o'z mijoziga va o'z hisob ma'lumotlariga muhtoj. Mehmon mahalliy tarmoqqa ko'rinmas bo'lishi kerak bo'lgan joyda NAT yoki boshqariladigan marshrutlash bilan faqat ichki tarmoq yaxshiroq loyihadir.
Nima uchun mehmon xostning shlyuzi bo'la olmaydi
Mehmon tunnelini xostga qarz berishning ikkala yirik gipervayzerda ham qo'llab-quvvatlanadigan kaliti yo'q. Xostda mehmon tunneliga marshrut ham, o'sha tomonga ko'rsatuvchi tarjima qoidasi ham yo'q, shuning uchun mehmon va xost trafigi alohida egalar bilan alohida oqim bo'lib qoladi. Bu yo'nalish adapter rejimidan qat'i nazar ishlamaydi.
Ishlaydigan muqobillar — yo'naltirishlar va proksilar. SSH mahalliy yo'naltirishi xostga o'z sikliga ulanish imkonini beradi, mehmon esa oqimni tunnelga olib kiradi, bu ikkinchi mijozni o'rnatmasdan TCP xizmatlarini qoplaydi. Xostning o'z IP trafigini uning o'rniga mehmon tunnelidan foydalantirish mehmon ichida marshrutizator, shuningdek xostda aniq marshrut va xostda tarjima talab qiladi. Bu belgilash katagi emas, kichik tarmoq loyihasi va qaytish yo'li uchun reja talab qiladi. Mehmon faqat mijozni ishga tushirish uchun bo'lsa, mijozni xostga qo'ying va ortiqcha sakrashni olib tashlang.
ssh -N -f -L 8080:internal-host.example:80 user@lab-vm
Hal qiluvchilar va marshrutlar chegaradan o'tmaydi
DNS variantni olgan adapterga ergashadi, shuning uchun mehmon xostning tunnel hal qiluvchisini meros qilib olmaydi va xost mehmonga yuborilgan serverni hech qachon bilmaydi. Yuborilgan dhcp-option DNS qiymatlari ularni qabul qilgan interfeysga tegishli, shuning uchun mijozsiz ko'prik mehmoni ichki nomlarni hal qila olmaydi. NAT mehmoni odatda gipervayzerning DNS ishlovini ishlatadi va farq har bir muhitda bitta buyruqda ko'rinadi.
# on the host
VBoxManage showvminfo "lab-vm" | grep -i -E "nic|nat"
# inside a Linux guest
ip -4 route
resolvectl status
# inside a Windows guest
Get-DnsClientServerAddress
Ulardan biri xostga ergashadi deb hisoblashdan oldin mehmon ichidagi hal qiluvchi va marshrutni o'qing. Ichki nomlar o'sha yerda hal qilinishi kerak bo'lsa, tunnel hal qiluvchisini mehmonning o'z adapteriga qo'shing, keyin faqat tunnel orqasida mavjud bo'lgan nom bilan tekshiring. Har bir VM uchun adapter rejimini, tunnel egasini va hal qiluvchi manbasini yozib qo'ying, chunki bu uch fakt keyingi deyarli har bir savolga javob beradi. Boshqa gipervayzerlar rejim nomlarini o'zgartiradi va tamoyilni daxlsiz qoldiradi.