Хөдөлгөөн үнэхээр VPN-ээр дамжиж байна уу? Үүнийг хэрхэн шалгах вэ
Маршрутын хайлт, эхний алхам, физик адаптер дээрх бичлэг болон гаднаас хаяг шалгах нь асуултын өөр өөр хэсэгт хариулдаг.
Системийн тавиурын дүрснээс хоёр эвдрэл ижил харагдана: туннельд орж буй хөдөлгөөн ба түүнийг чимээгүйхэн тойрч гарч буй хөдөлгөөн. Клиент хоёр тохиолдолд Connected харуулдаг, учир нь Connected нь зөвхөн туннелийн интерфэйс байгаа ба клиент хүссэн маршрутуудаа суулгасан гэсэн үг. Нэг програмын нэг пакет тэдгээр маршрутыг ашигласан эсэх нь тусдаа асуулт бөгөөд стекний өөр газарт хариулдаг. Дөрвөн хэмжилт үүний ихэнхийг шийднэ — маршрутын хайлт, эхний алхам, физик адаптер дээрх бичлэг, гаднаас ажиглалт — харин серверийн өөрийн сессийн харагдац үлдсэнийг хамарна.
Пакет явах маршрутаас эхэл
Маршрутын хүснэгт нь шийдвэр өөрөө, тиймээс бүхэлд нь уншаад таамаглахын оронд нэг очих газрын талаар асуу. Linux дээр ip route get цөм сонгосон интерфэйс болон эх хаягийг нэрлэнэ:
ip route get 203.0.113.10
ip route get 10.20.5.7Windows дээр Find-NetRoute -RemoteIPAddress 203.0.113.10 нь route print -4-аас илүү ашигтай, учир нь өөрөө: ялсан маршрутыг мэдээлдэг, байгаа бүх маршрутыг биш. Гэсэн ч хүснэгтийг түүний 0.0.0.0 мөрийн төлөө нэг удаа уншаарай. Тэнд /1 хос байвал бүрэн туннелийн клиент анхдагч маршрутыг дахин бичсэн гэсэн үг: OpenVPN-ийн redirect-gateway def1 сонголт туннелээр дамжуулан 0.0.0.0/1 болон 128.0.0.0/1-ыг суулгадаг бөгөөд энэ нь физик анхдагч маршрутыг устгахгүйгээр хамгийн урт угтварын тохиролд одоогийн 0.0.0.0/0-ыг ялдаг. Тиймээс хоёр анхдагч маршрут зэрэг оршиж болно, харин бүх зүйл туннельд орсоор байна.
Хоёр дэлгэрэнгүй зүйл хүснэгтийг худал болгоно. Нэгд, анхдагч маршрутын тоо биш, тохирсон угтварыг хар, учир нь интерфэйсийн хэмжүүр эсвэл /1 хос ялагчийг тодорхойлно. Хоёрт, аль хэдийн байгаа холболт тогтоосон замаа хадгална; туннель өргөгдсөний дараа нээлттэй сесс дахин тохируулах хүртэл хуучин маршрутыг ашиглаж болох тул дахин холбогдох нь маршрутын асуудлыг зассан мэт харагддаг. Ажиллаж буй клиент — ps ax | grep openvpn — зөвхөн процесс эхэлснийг нотолно.
Нэг дотоод, нэг нийтийн нэрийг мөрд
Маршрутын хайлт санааг харуулна; зам хүргэлтийг харуулна. Холбогдсон үед заавал дотоод байх нэр болон байх ёсгүй нэрийг мөрдөж, эхний алхмыг харьцуул:
traceroute intranet.corp.example
traceroute 1.1.1.1Хоёуланд нь ижил эхний алхам байна гэдэг нь дотоод нэр туннельд хэзээ ч ороогүй бөгөөд эвдрэл түүнээс дээгүүр байна гэсэн үг, ихэвчлэн нийтийн хаяг руу шийдэгддэг нэр эсвэл хэзээ ч суулгагдаагүй маршрут. Дотоод хөдөлгөөн 10.8.0.1-ээр гарч, нийтийн хөдөлгөөн 192.168.1.1-ээр гарч байвал хуваасан туннель өөрт нь тохируулсан ажлыг яг хийж байна. VPN гарцанд хүрээд зөвхөн хугацаа хэтэрснийг буцаадаг мөр нь ихэвчлэн буцах зам эсвэл серверийн галт ханын асуудал, дутуу дамжуулах маршрут биш.
Шүүсэн ICMP энэ шалгалтыг худал болгоно: хоёр мөрөнд однууд үхсэн туннель мэт харагддаг ба ихэвчлэн галт хана байдаг. Боломжтой газар TCP порт шалга — Linux дээр traceroute -T -p 443 — мөр нь аль шийдэгч хариулсныг хэлэхгүй гэдгийг сана: нэр локалаар шийдэгдээд туннелээр дамжин хүрч болно.
Туннель дээр биш, физик адаптер дээр бич
Физик холбоос нь сүлжээ үнэхээр юу хардагийг харуулдаг цорын ганц газар. Туннель өргөгдсөн үед оффис руу чиглэсэн сесс VPN серверт хаягласан шифрлэгдсэн ачаа хэлбэрээр харагдах ёстой, 10.20.5.7 руу холболт хэлбэрээр биш:
sudo tcpdump -ni eth0 udp port 53
sudo tcpdump -ni eth0 host 10.20.0.5Эхний шүүлтүүр локалаас гарч буй нэрийн шийдлийг барина, энэ нь хамгийн түгээмэл, хамгийн чимээгүй алдагдал — хуудас ачаалсаар байх бөгөөд шийдэгч зөвхөн асуулгыг харсан. Хоёр дахь нь туннель дотроо л байх ёстой дотоод хаяг руу чиглэсэн энгийн хөдөлгөөнийг барина. Windows дээр pktmon драйвергүйгээр ижил ажлыг хийнэ: pktmon filter add -p 53, дараа нь pktmon start --capture --pkt-size 128, дараа нь pktmon stop болон pktmon format pktmon.etl -o capture.txt. Эдгээр тугнууд Windows хувилбаруудын хооронд бага зэрэг ялгаатай тул синтакс дээр итгэхээс өмнө pktmon filter add /?-ыг шалга.
Алдагдлыг олохын тулд физик интерфэйс дээр бич; туннель дээрх бичлэг таны байгаа гэж үзэж буй пакетуудыг агуулна, сервер дээр бол эх нь гарц болох уншигдахгүй гадаад пакетуудыг агуулна. Аливаа интерфэйсийн байтын тоолуур пакетыг дүрсэлдэг, програмыг биш; хөдөлгөөнийг процессд хамааруулахын тулд сокетуудыг процессуудтай холбодог монитор хэрэгтэй.
Гадаад үйлчилгээнээс асуу, дараа нь програм бүрээр дахин асуу
Гарцыг нотолдог цорын ганц шалгалт бол гаднаас ирсэн хариулт: өөрийн харсан эх хаягийг буцаадаг үйлчилгээ. Интерфэйс сонгож болох бүрхүүлээс ажиллуул, хоёр удаа ажиллуул:
sudo curl --interface tun0 https://example.net/ip
sudo curl --interface eth0 https://example.net/ipӨөр хариултууд хоёр замын нотолгоо болон тодорхой програмыг шалгах аргыг өгнө: түүнийг холбох эсвэл нэг маршруттай сүлжээний нэрийн орон зайд ажиллуулж, холын тал ямар хаягийг бүртгэхийг хар. Ижил хариултууд нь сонирхолтой эвдрэл: эсвэл холболт үйлчлээгүй, эсвэл хост болон холын талын хооронд ямар нэгэн зүйл ирэхээс өмнө эх хаягийг дахин бичдэг. Windows дээр curl --interface адаптерын нэрийг биш, хаягийг нь шаарддаг.
VPN хаягийг мэдээлдэг хөтөч тухайн хөтчийг нотолно. Имэйл клиент, багц менежер, нөөцлөлтийн агент эсвэл хоёр дахь хөтчийн профайл тус бүр өөр зам сонгож болно, ялангуяа прокси тохиргоо эсвэл хуваасан туннелийн маршрут тэдний нэгийг хамарсан үед. Хаяг өөрчлөгдөх нь дангаараа алдагдлын нотолгоо биш: ачааллын тэнцвэржүүлэгч харсан гарцын дагуу өөрөөр хариулж болох тул хуудсыг биш, бүртгэсэн эх хаягийг харьцуул.
Түншийг баталгаажуулахын тулд серверийн харагдацыг ашигла
Сервер өөр асуултад хариулна: түнш холбогдсон эсэх, хэр их зөөсөн, сесс дахин эхэлсэн эсэх. Сервер дээр түнш идэвхтэй байхад клиентийн тоолуурууд бараг хөдлөхгүй бол клиентийн хүснэгт юу ч гэсэн програмын хөдөлгөөн туннельд орохгүй байна гэсэн үг. Харин юу ч ажиллахгүй гэж мэдээлж буй хэрэглэгчид олон өгөгдөл зөөж буй түнш өөр мөрдөн шалгалт.
Энд хоёр урхи байна. Масклагдсан туннель урсгал бүрийг гарцаас ирсэн мэт харуулдаг тул лог болон клиент тус бүрийн бүртгэл нэг хаяг дээр нийлдэг. Мөн клиентийг локал хост гэж үздэг тул хэн нэгэн VPN-ээр файл хуулж байгаа эсэх асуултад сервер дээрх файл хуваалцах хөдөлгөөн эсвэл сервер дээрх хост аудит хариулдаг — туннелийг ажиглах нь төгсгөлийн цэг ба хэмжээг өгдөг, файлын нэрийг биш.
Дизайны шийдвэрийг алдагдлаас ялга
Туннелиас гадна бүх зүйл алдагдал биш. Холбоос-локал болон нэвтрүүлгийн хөдөлгөөн дизайнаар локал үлддэг, multicast-аар олдсон принтер LAN дээр зарласаар байдаг, DHCP локалаар гарах ёстой. Тодорхой интерфэйст холбосон програм санаатайгаар маршрутын хүснэгтийг тойрдог бөгөөд үүнийг зөвхөн галт ханын дүрэм, нэрийн орон зай эсвэл бодлогын маршрут өөрчилнө.
IPv6 шалгах хуудсанд өөрийн гэсэн мөр хүрдэг. Зөвхөн IPv4 зөөдөг туннель хос стект хостод хоёр дахь ашиглах боломжтой замыг үлдээдэг бөгөөд хос стект очих газар түүнийг илүүд үзнэ — DNS-ийг оруулаад, хэрэв шийдэгч IPv6-аар хүрч болох бол. IPv4 үр дүнг бүрэн гэж үзэхээс өмнө адаптер дээр IPv6-ыг унтраа эсвэл туннель түүнийг зөөж байгааг батал.
Шалгалтууд зөрчилдөх үед зөрчил нь ихэвчлэн эвдрэлийг нэрлэдэг:
| What you see | What it means | Next step |
|---|---|---|
| The route picks tun0 but the capture shows cleartext to 10.20.5.7 | Something bypassed the table: a bound app, a policy route or a session older than the tunnel | Reset the flow, check the app bind, check the ip rule list |
| The route picks eth0 for an internal name | The name resolves to a public address, or the route was never installed | Compare the resolved address with the routes the server pushes |
| The capture shows DNS to the LAN resolver | Resolver leak: data is tunneled, lookups are not | Point the resolver inside, or push it from the server |
| All four checks agree and one app still fails | Path selection is fine; suspect MTU, a per-app proxy or the far end | Test the same destination from a known-good client |
Ажилладаг дараалал: холбогдохын өмнө болон дараа маршрутын хүснэгтийг хадгал, нэг дотоод, нэг нийтийн нэрийг мөрд, физик адаптер дээр DNS бич, тодорхой програмын хувьд бүрхүүлээс гарцын хаягийг буцаа, дараа нь хэмжээний хувьд серверийг унш. Эхний дөрөв нь тохирвол туннель таны бодож буй зүйлийг зөөж байгаа бөгөөд үлдсэн асуудал түүнээс дээгүүр байна. Хэрэв хоёр нь зөрчилдвөл зөрчилдөж буй хос нь эвдрэл, дүрс биш.