Үш 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-нің артындағы бірдеңе әлі де тізбек арқылы жауап беретінін тексеріңіз, бұл ерекшеліктің айналма жолға айналмай, тар күйінде қалғанын дәлелдейді. Соңында порттарды дизайн жазбаларына жазыңыз, әйтпесе келесі оператор мұны басқа қызметте қайта ашады.

Қатысты мақалалар