VirtualBox VPN лаборатори: гарцын VM эсвэл зөвхөн хост сүлжээ
VirtualBox VPN лабораторид зориулж чиглүүлсэн гарцын VM эсвэл зөвхөн хост сегментийг сонгоод, туннел унах үед зочныг хаалттайгаар бүтэлгүйтүүлээрэй.
Таны VPN лаборатори хэдий хэмжээний техник хэрэгсэл авах ёстойг шийдэх хэрэгтэй. Хоёр VirtualBox сегментийн хооронд байрлах чиглүүлсэн гарцын VM нь хаягийн хөрвүүлэлт, буцах зам, бодит клиент суудаг firewall-ийн байрлалыг дахин бүтээдэг. Ганц зөвхөн хост сегмент танд нэг хяналттай хаалга өгөх бөгөөд өөр юу ч биш. Гарцын хувилбар гурван зочин, таны арчилж байгаа чиглүүлэлтийн хүснэгтийг шаарддаг; зөвхөн хост хувилбар нэг зочин, нэг бодлогыг шаарддаг. Гурван асуулт тэдгээрийг ялгах бөгөөд гурав дахь нь таны шалгалт ер нь тэнцэж чадах эсэхийг шийддэг.
Ямар нэг зүйлийг хуулахаасаа өмнө гурван асуултад хариулна уу
VPN сервер юуг ажиглах ёстойгоос эхэл. Хэрэв сервер шалгалтын зочны бус эх хаягийг харах ёстой бол тэдгээрийн хооронд ямар нэг зүйл хөрвүүлэх ёстой бөгөөд тэр зүйл таны хянадаг чиглүүлэгч байх ёстой. Зөвхөн хост сүлжээ нь хостод зочны сегмент дээр адаптер өгдөг, хөрвүүлэгч биш. Дараа нь зочин гадагш ямар нэг зүйлд хүрэх шаардлагатай үед та NAT адаптер холбох ба VirtualBox-ийн өөрийн NAT хөдөлгүүр танаас асуулгүйгээр эх сурвалжийг дахин бичдэг.
Дараа нь зочин туннелээс өөр юунд ч хүрч болох эсэхийг асуу. Тэр хариулт дотоод эсвэл зөвхөн хост гэдгийг сонгох бөгөөд энэ бол ихэнх лабораторийн бичвэрүүд алгасдаг асуулт юм. Эцэст нь туннел унах үед юу болох ёстойг асуу, учир нь энэ нь топологи бус бодлогыг шийддэг бөгөөд зөвхөн азтай замыг нотолсон лаборатори бараг юу ч шалгаагүй.
| 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 |
Гурван үүргийг дотоод сүлжээгээр холбоно уу
Гурван зочин, хоёр нэрлэсэн сегмент ашиглах бөгөөд гарц нь хоёуланд нь адаптертай цорын ганц машин байг:
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
Дотоод сүлжээнд тусдаа үүсгэх алхам байхгүй. --intnet1 доторх мөр нь сегмент өөрөө: хоёр машин зөвхөн нэр яг таарсан үед л хуваалцах бөгөөд хост дээрх юу ч түүнд холбогдоогүй. Энэ сүүлчийн шинж чанар нь лабораторийн цэвэр давталтын шалтгаан, учир нь хост-ийн маршрутууд, түүний өөрийн VPN клиент, firewall нь зочдод санамсаргүй хүрч чадахгүй. Дотоод сегментэд DHCP сервер ч байхгүй, хэрэв та нэмэхгүй бол, тиймээс статик хаягууд хамгийн богино зам.
Клиентэд зөвхөн түүний WAN хаягийг өг, анхдагч гарц гарцын WAN хаяг руу зааж байх ёстой. Сервер LAN хаяг авч, гарцын LAN хаягийг өөрийн анхдагч гарц болгон ашигладаг. Нэг сегмент дээр хоёр хаяг хадгалдаг эсвэл нөгөө сегмент рүү төөрсөн маршруттай зочин чиглүүлэгчийг тойрсон замтай бөгөөд доорх шалгалтууд танд худал хэлнэ.
Би VM-ийн нэрсийн дэргэд дөрвөн хаяг, хоёр сегментийн нэр бүхий текст файл хадгалж, бүх shell-д наадаг. Долоо хоногийн дараа профайлын өөрчлөлт ямар нэг зүйлийг эвдэхэд тэр файл нь профайлыг дибаг хийх ба өөрийн ой санамжийг дибаг хийхийн хоорондох ялгаа болно.
Алдагдах ёсгүй сегментэд дотоод эсвэл зөвхөн хост сонгоно уу
Зөвхөн хост горим нь хост дээр өөрөө виртуал адаптер үүсгэдэг, ихэвчлэн vboxnet0, хостод зочны сегмент дээр хаяг өгдөг. Энэ нь админ хийхэд тохиромжтой, тусгаарлалтын шалгалтад үхэлд хүргэдэг, учир нь хост зочинд шууд хүрч чадах болж, хост талын бүх үйлчилгээ боломжит зам болно. Дотоод горимд хост адаптер огт байхгүй. Хоёр горимыг сүлжээний тохиргооны самбарт амархан андуурдаг тул шошгыг бус, баримтжуулсан ялгааг шалгана уу (VirtualBox сүлжээний дэлгэрэнгүй хуудсыг үзнэ үү).
Туннелийг заавал ашиглах ёстой зочны хувьд дотоод нь илүү аюулгүй анхдагч бөгөөд гарц нь цорын ганц гарц юм. Хэрэв зөвхөн хост горимыг хадгалбал хост адаптерийг удирдлагын зам гэж үзэж, үүнийг чанга хэл: хост зочинд хүрч болно, харин зочин хост-ыг гарц болгон ашиглаж болохгүй.
VBoxManage modifyvm lab-client --nic1 hostonly --hostonlyadapter1 vboxnet0
Таны нотолж чадах тусгаарлалт бол таны тохируулсан тусгаарлалт юм. Нэг дотоод адаптер, гарц дээр анхдагч маршрут, NAT адаптергүй зочинд гарцыг тойрсон зам байхгүй. Зөвхөн хост адаптер, NAT адаптертай зочинд хоёр зам байх бөгөөд тэдгээрийн зөвхөн нэг нь таны шалгахыг хүссэн зам юм.
Гарц дээр чиглүүлж хөрвүүл, дараа нь хаалттайгаар бүтэлгүйтүүл
VirtualBox сегментүүдийн хооронд дамжуулдаггүй; үүнийг зочин хийдэг. VPN серверийн VM гарцын ард байх үед дамжуулалтыг асааж, клиентийн урсгалыг сервер рүү гарах үед хөрвүүл:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Энэ дүрмээр сервер клиентийн оронд гарцын LAN хаягийг хардаг бөгөөд операторын NAT-ийн ард байгаа бодит клиент сүлжээний толгойд яг ийм харагддаг. sysctl утгыг /etc/sysctl.d/ дотор, дүрмийг дистрибутив ашигладаг firewall үйлчилгээнд хадгал, эс бөгөөс дахин ачаалах нь лабораторийг чимээгүйгээр чиглүүлсэн боловч хөрвүүлээгүй төлөвт буцаана.
Дамжуулалт нь зөвшөөрөл биш. ACCEPT-ийн анхдагч FORWARD бодлогын дагуу анхдагч маршрут нь гарц руу заасан зочин туннел байгаа эсэхээс үл хамааран чиглүүлэлтийн хүснэгтийн сонгосон интерфейсээр гардаг. Хэрэв гарц пакет суулгах NAT адаптертай бол тэр адаптер туннел унах мөчид ажиллаж буй шифрлэгдээгүй гарц бөгөөд таны зөвхөн-VPN шалгалт хэзээ ч зөвхөн-VPN шалгалт байгаагүй.
Сервер хол байх ба туннелийг гарц өөрөө дуусгах үед мөн тэр шийдвэр интернетэд хүрэх NIC руу бус, туннелийн интерфейс рүү заана:
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
Туннелийн өөрийн гадаад тээвэр, зурвасаас гадуурх удирдлагын маршрутыг дамжуулж буй урсгалаас тусад нь байлга. Хэрэв гарцыг засах цорын ганц зам нь таны дибаг хийж буй туннелээр дамжих юм бол лаборатори түгжигдэх дасгал болно. Цуваа консол, зөвхөн хост удирдлагын адаптер эсвэл мэдэгдэж буй сайн төлөвийн агшин хувилбар нь эвдэрсэн чиглүүлэгчийг гараар сэргээхээс хямд.
Замыг хост-оос бус, зочноос шалгана уу
Гадагш ажилла. Клиент гарцын WAN хаягт хүрч байгаа, дараа нь гарцаар дамжин серверт хүрч байгаа, дараа нь VPN порт руу холболт гарч буцаж байгааг батал. Гарцын хоёр интерфейс дээрх бичлэг хариу ирж байгаа эсэх, буцах зам дээр хаягдаж байгаа эсэхийг харуулдаг бөгөөд зөвхөн клиент дээрх бичлэг үүнийг ялгаж чадахгүй:
tcpdump -ni eth0 udp port 1194
tcpdump -ni tun0 udp port 1194
Дараа нь гарцыг нотол. Зочноос хаягийн тусгал үйлчилгээнээс ямар эх сурвалж харж байгааг асууж, гарцын өөрийн гарах хаягтай харьцуул; хэрэв хариулт хост-ийн хаягтай таарвал туннелийг тойрсон зам байна. Зочин бодитоор ямар resolver ашиглаж байгааг шалгаж, IPv6-г тусад нь шалга, учир нь IPv6 асаалттай байхад туннел зөвхөн IPv4 зөөдөг сегмент санамсаргүй бус, зохион бүтээлээр алдагддаг.
Эцэст нь санаатайгаар эвд. Туннелийг зогсоох эсвэл түүний гадаад портыг хааж, зочноос шинэ холболт нээ. Энэ нь бүтэлгүйтэх ёстой бөгөөд шалтгаан нь таны нэрлэж чадах нэг байх ёстой: маршрут байхгүй, татгалзах дүрэм байна, эсвэл resolver үхсэн. Туннелийг дахин эхлүүлж, зочин сүлжээг дахин барихгүйгээр сэргэж байгааг батал. Хэрэв Hamachi эсвэл ZeroTier зэрэг mesh VPN лабораторийг хуваалцвал, гүүрэн адаптер нь mesh биш, адаптерийн нэрийг дагадаг гэдгийг сана, тиймээс клиент өөрийн виртуал адаптерийг суулгасны дараа гүүрийг дахин чиглүүлэх ёстой.
VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>
Зочны туннелийг хост-той хуваалцах нь асуудлыг тусгадаг. Хост-ийн анхдагч маршрутыг зочин руу чиглүүлэх нь ажилладаг, зочны доторх proxy ч ажилладаг; хост-оор дамжих NAT нь хост-ийн эхлүүлсэн урсгалд зочны туннелийг зөөдөггүй. Сегментийн нэрс, firewall дүрмийг нэг газар хадгал, ажиллаж буй төлөвийн агшин хувилбар авч, серверийн ажигласан эх хаягийг бич. Тэгвэл дараагийн профайлын өөрчлөлт дахин баригдсан лабораторийн оронд нэг скрипт ажиллуулах зардалтай болно.