Хоёр ногоон холболтын дүрс нь харьцуулалт мэт харагдах боловч ихэвчлэн санамсаргүй тохиол юм. Хэрэв туршилтын хүсэлт хоёр туннелийн аль нэгийг л ашиглаж болсон бол үр дүн нь хамгийн сайндаа тэдний нэгийг, хамгийн муудаа аль нэгийг ч тайлбарлахгүй. Ажиглалт бүрт сүлжээний нөхцөл, зорьсон очих газар, туршилт эхлэхээс өмнө бичсэн хүлээлтийг өг. Өөрөө удирддаг Linux машин дээр нэрлэсэн сүлжээний нэрийн орон зай нь тэр тусгаарлалтыг худалдаж авах хамгийн хямд арга.

Хоёр ногоон гэрэл бол харьцуулалт биш

Нэрийн орон зай нь чиглүүлэлтийн хүснэгт, интерфейс, сүлжээний стекцийн төлөвийг тусгаарладаг тул нэг дотор эхэлсэн хүсэлт нөгөөгийнх нь туннелийг чимээгүй зээлж чадахгүй. Тусгаарлаж чадахгүй зүйл нь процессор, физик дээд холбоос эсвэл хост дээр ажиллаж буй нэр шийдвэрлэгч үйлчилгээ юм. Яг энэ сүүлчийн цоорхойд эдгээр туршилтын ихэнх нь хэн ч анзааралгүй бүтэлгүйтдэг. Нэрийн орон зайг орхиж хотын шийдвэрлэгчээс асуудаг хайлт нь туршиж буй туннельтай ямар ч холбоогүй хариулт буцаадаг.

Энэ журам нь өмнө нь бэлтгэгдэж батлагдсан хоёр туршилтын нэрийн орон зай, ажиллаж буй гадаад холболт, дэмжигдсэн клиентүүдийг шаарддаг. Энэ нь юу ч үүсгэхгүй, юу ч бүртгэхгүй, ямар ч тохиргоог орлуулахгүй. Клиентэд бүрэн ширээний сесс хэрэгтэй эсвэл түүнээс гадуур ажиллахаас татгалзвал тусдаа виртуал машин нь шударга сонголт хэвээр байна.

Эхний ажиллагаанаас өмнө хүлээлтийг тогтоо

Нөхцөл бүрт амжилт хэрхэн харагдахыг шийд: шийдвэрлэгч, үйлчилгээний нэр, хүлээгдэж буй хаяг, туннель унах үед шаардагдах зан төлөв. Тэдгээр төлөвлөсөн утгыг өөрийн баганад хадгал, учир нь төлөвлөгөө болон ажиглалтыг хольсон бүртгэл нь цаг хугацааны тэмдэгтэй зохиомол зүйл юм. Доорх шалгах хуудас нь бүртгэлд хэрэгтэй хэлбэр бөгөөд эхний холболтоос өмнө мөр бүрийг бөглөх боломжтой байх ёстой.

TunnelOwnerClient interface inside the namespaceProof commandRequired on disconnect
vpn-athe identity that owns profile A, recorded by nameits own tun device, never the host'sip -n vpn-a -4 route get 10.55.10.20traffic stops; no host-side fallback
vpn-ba separate owner, even when both run on one boxits own tun device in its own namespaceip -n vpn-b -4 route get 10.55.20.20verified separately, never inferred from A

Шийдвэрлэгчийн утас нь тэр бүртгэлд өөрийн мөртэй байх ёстой, учир нь худал хэлэх магадлал хамгийн өндөр талбар нь энэ юм. Нэрийн орон зайд холбогдсон файлууд, тухайлбал /etc/netns/vpn-a/resolv.conf команд нэрийн орон зайн дотор ажиллах үед өөрсдийн ердийн замд гарч ирдэг бөгөөд үүнийг iproute2-ын нэрийн орон зайн лавлагаа тайлбарладаг, гэхдээ нэр үйлчилгээний шилжүүлгийн тохиргоо болон түүний эхлүүлсэн аливаа локал шийдвэрлэгч хайлтыг хост руу буцааж татаж чадна.

Нэг удаад нэг туннель, нөгөө нь салгагдсан

B доош байх үед A-г одоо байгаа эзэмшигчээр нь холбож, дараа нь захиргааны нөхцлөөс бодлого, чиглэл, сонгосон замыг шалга. Доорх командуудын гурав нь төлөвийг уншдаг; зөвхөн сүүлчийнх нь нэр үйлчилгээтэй холбогдож, аль нь ч програмын хүсэлт илгээдэггүй.

sudo ip -n vpn-a -4 rule show
sudo ip -n vpn-a -4 route show table all
sudo ip -n vpn-a -4 route get 10.55.10.20
sudo ip netns exec vpn-a getent ahostsv4 svc-a.lab.internal

Чиглэлийн хайлт нь очих газрын тухай таамаглал асуултад хариулдаг тул үйлчилгээ траффик хүлээж авахыг харуулж чадахгүй. Энэ хоёр төрлийн нотолгоог тусдаа баганад хадгал, учир нь татгалзсан холболтын хажууд эрүүл чиглэл бол бодит бөгөөд түгээмэл үр дүн юм. Дараа нь бодит програмаар нэг хор хөнөөлгүй зөвшөөрөгдсөн хүсэлт илгээ, үүнийг A-ийн нөхцөлд түүний ердийн онцгой эрхгүй хэрэглэгчээр эхлүүлж, гэрчилгээний баталгаажуулалт болон програмын нэвтрүүлэлт хөндөгдөхгүй байг, үр дүнг үйлчилгээний харсан эх хаягтай хамт тэмдэглэ. A-г эзэмшигчээр нь салгаж, B-ийн хувьд бүх суурь шугамыг давтаж, хийсэн аливаа тохиргооны өөрчлөлтийг тэмдэглэ, эс бөгөөс хоёр суурь шугам харьцуулагдахгүй болно.

Хоёулаа дээш, дараа нь нэг нэгээр доош

Тогтвортой төлөв бол хялбар хэсэг. Хоёр туннель холбогдсон үед нөхцөл бүрийн хайлт болон програмын хүсэлтийг давтаж, дараа нь нэг туннелийг тасалж нөгөөг шалга. Холболтын дараалал өөрөө асуулт байвал урвуу дарааллаар дахин холбогд.

sudo ip netns exec vpn-a tcpdump -ni any port 443 -c 5
sudo ip netns exec vpn-b getent ahostsv4 svc-b.lab.internal
sudo ip -n vpn-b -4 route get 10.55.20.20

Барилт нь програмын үр дүн шийдэж чадахгүй маргааныг шийддэг: хүсэлт таны хүлээсэн интерфейсээр гарсан эсвэл огт өөр зүйлээр гарсныг харуулна. Шилжилт бүрт эзэмшигчийн үйлдэл, цаг хугацааны тэмдэг, чиглэлийн үр дүн, нэрийн үр дүн, програмын үр дүнг бич. Дараа нь нөлөөлөгдсөн нэрийн орон зайн дотор аюулгүй хаагдах шаардлагыг шалга, учир нь тусгаарлалт бол унтраалга биш. Нэрийн орон зай хоёр туннелийг тусдаа барина; профайл нь траффик зогсох ёстой гэж хэлэх үед аль нэгийг нь траффик зөөхөөс сэргийлдэггүй.

Энэ бүртгэл юуг баталж чадах, юуг чадахгүй

Нэг тэнцсэн нь энэ зохион байгуулалтад, энэ хост дээр, тэр үед тэдгээр ажиглалтыг батална. Нэг ширээний чиглүүлэлтийн хүснэгтийг хуваалцсан хоёр клиентийн тухай юу ч хэлэхгүй, хоёр туннель ачаа зөөж байх үеийн дамжуулах чадварын тухай ч юу ч хэлэхгүй. Эдгээр нь тусдаа туршилттай тусдаа асуултууд бөгөөд харьцуулалт нь мөр бүрт хавсаргасан нөхцөл шиг л сайн байна.

Алдааг бүртгэлд амжилтын хажууд хадгалж, тухайн үед аль туннель дээш байсныг тэмдэглэ. Хэмжилтийн үеийн төлөвийг нуудаг цэвэр хуудас нь түүнийг харуулдаг муухай хуудаснаас дор. Бүртгэлийг дараа дахин ашиглах боломжтой болгодог нь нөхцөл, оноо биш.

Нэг машин дээрх хоёр туннелийг шударгаар харьцуулж болно, гэхдээ таны үнэхээр хянаж чадсан нөхцлийн тоогоор л. Үүнээс цааш нь хажууд нь ногоон дүрслэгдсэн хүсэл төдий.

Холбоотой нийтлэлүүд