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

Ижил лабораторийг бүтээх хоёр арга, аль нь хэзээ ялдаг вэ

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

AspectNamespace labHost-route lab
IsolationFull stack per roleShares the host stack
CleanupDelete named namespacesManual route and rule removal
RealismStrong for routingNeeded for GUI clients

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

Үүрэг бүрт нэг контекст, санаатай холбосон

Үүрэг бүрт нэг нэрийн орон зай үүсгэж, veth хос бүрийн хоёр үзүүрийг түүний эзэмшдэг контекст руу зөөнө үү. Эхний дөрвөн команд хэлбэрийг харахад хангалттай:

ip netns add client
ip netns add gateway
ip link add veth-c type veth peer name veth-g
ip link set veth-c netns client

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

Дамжуулах үүрэг нь лабораториуд сонирхолтой болдог газар

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

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

Суурь шугамыг бүртгээд, дараа нь нэг маршрутыг эвдээрэй

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

ip netns list
ip -n client route get 10.0.0.5
ip -n gateway -s link show veth-g

Гурав дахь команд нь хүмүүсийн алгасдаг команд бөгөөд нотолгоо яг тэнд байдаг: хаясан болон алдааны тоолуурууд пакет дамжуулах үүрэгт ер нь хүрсэн эсэхийг хэлдэг. Өөрчлөлтийн дараа мөнөөх гурван харагдацыг бүртгэж, нотолгоо таны ой санамж биш diff байг. Дараа нь яг нэг зүйлийг эвдээрэй, эсвэл маршрутыг устгаж, эсвэл дамжуулах замд татгалзах дүрэм нэмж, таны урьдчилан таамагласан шинж тэмдгийг баталгаажуулаарай: хариугүй дууссан гар барилт, эсвэл тайм-аутын оронд нэрийн шийдвэрлэлтийн бүтэлгүйтэл. Зөвхөн амжилтыг харуулдаг лаборатори маш бага зүй заадаг.

Цэвэрлэгээ нь дараагийн гүйлтийг давтагдахуйц болгодог

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

Лабораторид орон нутгийн үүсгэсэн нэвтрэх мэдээллийг ашиглаж, үйлдвэрлэлийн бүртгэлүүдийг хуваалцсан жишээнээс хол байлгаарай. Дараа нь нэрийн орон зай бүрийг устгаж, хостын харагдац өөрчлөгдөөгүйг баталгаажуулаарай, энэ загварыг сонгох бүх шалтгаан нь энэ юм. Цэвэрхэн арилгаж чадахгүй лаборатори бол нэмэлт алхмуудтай хост өөрчлөлт юм.

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