NAT эсвэл гүүрэн VM сүлжээ: VPN траффикийг аль нь зөөдөг вэ?
NAT зочдын хостны туннелийг зээлдэг нь клиент маршрутаар туннель хийж байгаа үед л; гүүрэн зочид өөрсдөө маршрутладаг. Зочдыг туршаад тохирох горимыг сонгоно уу.
Гүүр ба NAT нь нэг зочдыг таны VPN-д холбох хоёр арга биш; тэд туннель орж ирэхээс өмнө зочны пакетууд хэнийх болохыг шийддэг. NAT горимд гипервизор зочны траффикийг дахин бичиж, хост талын кодаас гаргадаг тул зочин хост тэр кодонд өгсөн маршрутаар явна. Гүүрэн горимд зочин физик сегмент дээр өөрийн холбоосын түвшний таних тэмдгийг авч, өөрийн анхдагч гарцыг сонгодог нь хостны туннелийг түүнд ач холбогдолгүй болгодог, хэрэв LAN чиглүүлэгч нь туннель хийж байгаа бол бусад тохиолдолд. Би VM-ийг VPN дээр байна гэж үзэхээ болиод, тэр зочны анхдагч маршрут хаашаа чиглэж байгаа тухай асуулт гэж үзэж эхэлсэн. Доорх туршилт горим бүрт хэдэн минут зарцуулж, таамаглалгүйгээр шийднэ.
NAT зочдыг гипервизорын кодын ард байлгадаг бөгөөд тэнд хостны маршрутууд үйлчилнэ
VirtualBox-д NAT зочин 10.0.2.0/24 дээр сууж, виртуал гарц 10.0.2.2, DNS прокси 10.0.2.3 дээр байх ба физик сүлжээ рүү өөрийн маршрутгүй. Гарах пакетуудыг NAT хөдөлгүүр авч, эх сурвалж нь хост байхаар дахин бичиж, хостны IP стек рүү дамжуулна. Тэндээс зочны траффик хостны урсгал бөгөөд маршрут хайлт очих газраар хийгдэнэ: хост дээр 0.0.0.0/1 ба 128.0.0.0/1 суулгасан бүрэн туннелийн клиент VM байгааг хэзээ ч мэдэхгүйгээр түүнийг барьж авна. Oracle-ийн VirtualBox сүлжээний бүлэг эдгээр анхдагч утгуудыг жагсаасан байдаг, хэрэв угсралт дээрх хаягуудыг баталгаажуулахыг хүсвэл.
libvirt-ийн анхдагч сүлжээ 192.168.122.0/24-өөс мөн адил газарт хүрдэг, тэнд dnsmasq лизинг тарааж, хост дэд сүлжээг маскарад хийдэг тул зочны пакетууд дахин хостны чиглүүлэлтийн шийдвэрт ирдэг. Үл хамаарах зүйл нь траффикийг маршрутаар бус процессоор сонгодог клиент юм. Хэрэв хуваагдсан туннелийн жагсаалтад зөвхөн таны хөтөч байгаа бол NAT хөдөлгүүр тэр жагсаалтад байхгүй бөгөөд зочин туннельгүйгээр машиныг орхино, хостны хөтөч хараахан бүрхэгдсэн мэт харагдана. Нэг дэд сүлжээ, эсрэг үр дүн.
Гүүр нь зочинд физик LAN дээр өөрийн байр суурийг өгдөг
Гүүрэн зочинд бодит адаптерт холбогдсон виртуал сүлжээний карт өгч, өөрийн MAC хаягыг авч, физик сүлжээнээс DHCP лизинг авдаг. Түүний анхдагч гарц нь LAN чиглүүлэгч, гипервизор биш, кадрууд нь тэр адаптераар дамжин утас руу гарна. Хостны туннелийн маршрутууд хостны хүснэгтэд амьдарч, хэзээ ч асуудаггүй, учир нь зочны кадрууд хэзээ ч хостны IP стек рүү ордоггүй.
Энэ нь хоёр тийшээ огтолно. mDNS болон SMB хөтлөлт ажиллаж эхэлдэг, учир нь зочин LAN-ийн нэвтрүүлгийн траффикийг хардаг, мөн зочин хооронд нь хостны галт ханагүйгээр ижил сегментийн бусад машинаас хүрч болно. Гүүр нь мөн одоо байгаа туннелээр зочдыг шахах арга биш: VM-ийг хостны WireGuard эсвэл OpenVPN интерфэйст холбох нь VirtualBox эсвэл libvirt таны төлөө хийдэг зүйл биш. Хэрэв гүүрэн зочин туннелээр гарах ёстой бол туннель тэр LAN дээр хаа нэгтээ дуусах ёстой.
Маргааныг дуусгах туршилт
Хоёр горимд ижил шалгалтуудыг хийж, хариултуудыг бичиж авна уу:
- Хост дээр
curl -s https://ifconfig.meнийтийн v4 хаягыг өгнө. - Зочинд мөн адил команд, нэмж анхдагч гарцын хувьд Linux дээр
ip routeэсвэл Windows дээрGet-NetRoute -DestinationPrefix 0.0.0.0/0. - Шийдэгчийн таних тэмдэг: зочинд
resolvectl statusэсвэлcat /etc/resolv.conf, 10.0.2.3 рүү эсвэл LAN сервер рүү чиглэж байгаа эсэхийг харах. - Хаягийн бүлэг:
ip -6 addr show scope globalба нэг v6 хүсэлт, учир нь v4 туннель зочинд байж болох глобал v6 хаягийн талаар юу ч хэлэхгүй.
Давхцсан нийтийн хаягууд нь зочин хостны зам дээр байгааг илтгэнэ. LAN-ийн ердийн гаралттай давхцсан зочин хаяг нь тийм биш гэдгийг илтгэнэ. Хүмүүсийн алгасах алхам бол хяналт: хостны туннелийг буулгаад зочны хүсэлтийг давтана. Хэрэв зочин хөтлөлтөө үргэлжлүүлбэл, горимын нэр юу ч илтгэсэн, тэр хостны туннелээс хэзээ ч хамааралгүй байсан. NAT горимд хостны туннель буусан үед зочин интернэтээ алдах ёстой, хэрэв клиент туннельгүй траффикийг зөвшөөрөхөөр тохируулаагүй бол, үүнийг тусад нь мэдэх нь зүйтэй.
Хоёр дохио худал хэлдэг. Амжилттай ping хүртээмжийг нотолно, гарах замыг биш. DNS-д 10.0.2.3 прокси хостны шийдэгчээр дамжуулан хариулж болох бөгөөд тэр үед TCP өөр маршрут явдаг, ингэснээр ачаалагддаг хуудас ба хэзээ ч дуусдаггүй нэвтрэлт гардаг.
Аль горим ажилд тохирох вэ
Горим бол чиглүүлэлтийн шийдвэр тул зуршлаас бус шаардлагаас сонгоно уу:
| Requirement | Mode that fits |
|---|---|
| Every guest flow must exit through the host tunnel | NAT, with a host client that tunnels by route, verified from inside the guest |
| The guest needs its own VPN account or profile | Bridged, or NAT with a client running inside the guest, not both |
| The guest must serve SSH, SMB, or a dev server to the LAN | Bridged; NAT needs a port forward, which does not change the outbound path |
| The guest must stay invisible to the LAN | NAT; a bridged guest is another host on the segment |
| The guest needs a real public IPv6 address | Bridged; VirtualBox NAT mode has no IPv6 forwarding |
| Isolation from the LAN with access to the host | Host-only adapter, not NAT |
Эхний мөр бол хүмүүс гацах газар: NAT ба хост дээрх бүрэн туннелийн клиент зочдыг үнэхээр бүрхдэг, гэхдээ клиент маршрутаар туннель хийж, хостны дээд холбоос нь тэр туннель байх хүртэл л. Клиентийг зөвхөн хөтчид зориулсан зөвшөөрлийн жагсаалт руу зөөвөл хаана ч алдаагүйгээр бүрхэлт алга болно. Дөрөвдүгээр мөр бол эсрэг алдаа: тав тухын тулд гүүрэлсэн зочин оффисын LAN дээр чимээгүйгээр SMB эсвэл SSH-д хариулж эхэлдэг.
VPN-д хамаатуулдаг гэмтлүүд
Windows дээр NAT орчуулга VirtualBox-ийн VM процесс дотор ажилладаг тул програм тус бүрийн клиент виртуал машинд зориулсан ерөнхий дүрмийн оронд яг тэр дүрсийг жагсаалтад байлгах хэрэгтэй. Клиентийн шинэчлэлт өөрийн процессын жагсаалтыг дахин бүтээхэд NAT зочид хамгийн түрүүнд бүрхэлтээ алдаж, тайлан нь хост хэвийн байхад LAN-д хүрдэг ч интернэтэд хүрдэггүй VM мэт уншигддаг.
Wi-Fi руу гүүрлэх нь өөр нэг сонгодог тохиолдол. Хандалтын цэгүүд гадны эх MAC-тай кадрыг ховор дамжуулдаг тул wlan0 руу гүүр нь бүрэн бүтэлгүйтэх эсвэл AP дээрх клиентийн тусгаарлалт түүнийг унагаж эхлэх хүртэл ажиллана. VirtualBox сүлжээгүй адаптерыг жагсаалтад нь санал болгоно. Хост Wi-Fi дээр байгаа бөгөөд зочныг гүүрлэх шаардлагатай бол таамаглахын оронд туршихаар төлөвлө.
MTU нь гурав дахь. Гүүрэн зочин LAN-ийн 1500 байтын MTU-г хадгалж, хэрэв өөрийн WireGuard клиентийг 1420 дээр ажиллуулбал том TLS гар барилт гацаж, жижиг хүсэлтүүд амжилттай болно. NAT-ийн дор хостны туннелийн MTU нь хостны асуудал, гэхдээ зочин 1500-д хараахан итгэдэг, don't-fragment биттэй UDP мөн адил алга болно.
Горимыг бичиж аваад адаптер солигдсоны дараа дахин шалга
Горим, гүүрийн ашигладаг хостны интерфэйс, зочны анхдагч гарц, түүний шийдэгч, түүний v4 ба v6 гаралтын хаягуудыг бичиж авна уу. Яг тэр бичлэг дараагийн гэмтлийг хямд болгодог: зөөврийн компьютер докоос Wi-Fi руу шилжихэд гүүрэн зочин гүүрээр дамжин өөр физик адаптер руу шилжиж, өөр дэд сүлжээнд дахин лизинг авч болно, харин NAT зочин 10.0.2.x хаягаа хадгалж, чимээгүйгээр өөр дээд холбоосыг өвлөнө.
Тасалбарыг хаахаас өмнө эдгээр бүрийг баталгаажуулна уу:
- Зочны гаралтын хаяг хостны гаралтын хаягаас ялгаатай, тиймээс хостны туннель дээр биш.
- Шийдэгч нь 10.0.2.3 прокси эсвэл LAN сервер бөгөөд аль нь хариулсныг та мэдэж байна.
- Туннелийн төлөвлөгөө зөвхөн v4 бол зочинд глобал v6 хаяг байхгүй.
- Хостны туннель буусан үед зочин хөтлөлтөө зогсоох, эсвэл энэ нь түүнээс хэзээ ч хамааралгүй байсныг та одоо мэдэж байна.
- Зочин өөрт хамаагүй LAN нэвтрүүлгийн траффикийг хардаггүй.