Кірістірілген WireGuard: ортаңғы секіріс өз портына жауап бере алмайды
Ортаңғы секіріс бәрін бір туннельге жібергенде, кіріс қызметіне жауаптар қате жолмен шығады. Интерфейстегі бастапқы порт ережесі оны түзетеді.
Үш 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, тарату ілгегі немесе контейнер кіру нүктесі ие болса, жұп қолмен өңделген файлға емес, сол иеге тиесілі. Қайта қосылғаннан кейін әрекетті ережелерді тексеріңіз, тек бірінші қосылудан кейін ғана емес, өйткені бірінші қосылу әрқашан жұмыс істейтін жағдай.
Баламаларды адал салыстырыңыз
Бастапқы порт ережесі төрт шығу жолының бірі және олардың ішіндегі ең тары. Оның туннель саясатына мүлде тимейтіні артықшылық, сондықтан ол кейінгі өзгерістерден аман өтеді. Тар түзетулер де қолданылуын тоқтатқанда қатты сәтсіздікке ұшырайды, ал кең ерекшелік себебі жойылғаннан көп кейін де үнсіз жұмысын жалғастырады. Екі жылдан кейін қорап басқа біреуге тиесілі болғанда, бұл айырмашылық талғампаздықтан маңыздырақ.
| Approach | What it costs | Where it breaks |
|---|---|---|
| Source-port policy rule | One rule per exposed port | Anything B forwards rather than originates |
| Destination exception route | A route pinned to specific client addresses | Clients whose address changes |
| Stop full-tunnelling on B | Loses the catch-all path toward C | Designs that depend on it |
| Split into two tunnels | More interfaces and more policy | Nothing, at the cost of complexity |
Таңдағаннан кейін екі шетінен де тексеріңіз. A-дан B портына қосылымды бастап, оны біраз бос емес ұстаңыз. B-де ядроға жауап жолын ip route get <address-of-A> sport 500 тәрізді нәрсемен негіздеуге мәжбүр етіңіз және оның туннельді емес, WAN интерфейсін атайтынын растаңыз. Осыдан кейін C-нің артындағы бірдеңе әлі де тізбек арқылы жауап беретінін тексеріңіз, бұл ерекшеліктің айналма жолға айналмай, тар күйінде қалғанын дәлелдейді. Соңында порттарды дизайн жазбаларына жазыңыз, әйтпесе келесі оператор мұны басқа қызметте қайта ашады.