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

Дунд хайрцагтай ярих хүртэл ажилладаг гинжин хэлхээ

Жишээ гинжийг авч үзье: A клиент UDP 500-оор B серверт хүрч, B нь UDP 500-оор C сервер рүү үргэлжилнэ. C нь зөвхөн өөрийн цорын ганц хамтрагчийн хаягаас трафик хүлээн авдаг нь түүнийг навч болгож, зан төлөвийг энгийн байлгадаг. B нь навч биш бөгөөд энэ алдааны бүх сонирхолтой зүйл тэнд болдог.

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

Хариулт яагаад туннелээр гардаг

B дээр C рүү харсан интерфейс харгалзах анхдагч маршрутын хамт AllowedIPs = 0.0.0.0/0 авч явна. Тиймээс B-ийн үүсгэсэн бүх пакет, илүү тодорхой зүйл давуу эрх авахгүй л бол, тэр туннель руу орно.

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

Шинж тэмдэг нь галт ханын асуудал эсвэл түлхүүрийн зөрүү мэт уншигддаг бөгөөд энд аль нь ч үнэн биш. C рүү чиглэсэн туннель дээрх барилт хариултууд буруу зүг рүү явж байгааг харуулна. Тэр нэг ажиглалт ямар ч хэмжээний тохиргоо уншихаас илүү цаг хэмнэдэг тул түлхүүр сольж эхлэхээс өмнө бичиж аваарай. Барилтыг хараагүй хэн бүхэн туннель өөрөө эвдэрсэн гэж бодно.

Нарийн засвар: эх порттой тохирох бодлогын дүрэм

B-ийн сонсогч сокетоос хариултууд 500 эх порттой гардаг. Бодлогын дүрэм үүнтэй тохирч, тэдгээр пакетыг энгийн хүснэгт рүү буцааж чадна:

ip rule add sport 500 table main priority 100
ip rule add sport 8080 table main priority 101

Бодлогын дүрмүүдийг давуу байдлын дарааллаар авч үздэг бөгөөд үндсэн хүснэгт 32766 дээр байдаг тул 100 дээрх дүрэм туннелийн анхдагч маршрутаас өмнө асуугдана. Гаднаас хүртээмжтэй үлдэх ёстой порт бүрт нэг бичлэг нэмээд өөр юу ч нэмэхгүй, ингэснээр дамжуулагдсан трафик өөрт нь зориулж бүтээсэн туннелийг үргэлжлүүлэн ашиглана.

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

Дүрэмд эзэн өг

Команд мөрөнд бичсэн дүрэм интерфейс дараагийн удаа дахин бүтээгдэхэд алга болно. WireGuard тохиргоонд түүнийг интерфейс үүсгэгдэж, устгагддаг газарт тавь:

PostUp = ip rule add sport 500 table main priority 100
PostDown = ip rule del sport 500 table main priority 100

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

Хувилбаруудыг шударгаар харьцуул

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

ApproachWhat it costsWhere it breaks
Source-port policy ruleOne rule per exposed portAnything B forwards rather than originates
Destination exception routeA route pinned to specific client addressesClients whose address changes
Stop full-tunnelling on BLoses the catch-all path toward CDesigns that depend on it
Split into two tunnelsMore interfaces and more policyNothing, at the cost of complexity

Сонгосны дараа хоёр төгсгөлөөс шалга. A-аас B-ийн порт руу холболт эхлүүлж, хэсэг хугацаанд завгүй байлга. B дээр цөмд хариултын замыг ip route get <address-of-A> sport 500 мэт зүйлээр үндэслэхийг шаардаж, туннель биш WAN интерфейсийг нэрлэж байгааг батал. Үүний дараа C-ийн ард ямар нэг зүйл гинжээр дамжуулан хариулсаар байгааг шалга, энэ нь үл хамаарах зүйл тойрч гарах зам болохгүйгээр нарийн хэвээр үлдсэнийг батална. Эцэст нь портуудыг дизайны тэмдэглэлд бич, эс тэгвээс дараагийн оператор үүнийг өөр үйлчилгээн дээр дахин нээх болно.

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