Жергілікті қолданба, VPN ережесі: FORWARD тізбегіңіз неге ешқашан іске қосылмайды
Машинадағы процесс FORWARD емес, OUTPUT пайдаланады. Дұрыс атау кеңістігіндегі ілгекті таңдап, содан кейін белгі немесе қарапайым маршрут жеткілікті ме, соны шешіңіз.
VPN трафигі үшін FORWARD тізбегіне ереже қосасыз, сұранысты сол Linux машинасынан іске қосасыз, ал санауыш нөлде қалады. Ереже дұрыс болуы мүмкін. Пакет бұл жолмен ешқашан жүрмеген, себебі машинаның өзінде пайда болған сұранысты ол әрі қарай жібермейді. Пакеттің сокеттен сымға дейінгі өмірін бақылау мұның себебін және ереженің қайда тиесілі екенін түсіндіреді.
Пакет қайда дүниеге келгенін табыңыз
Netfilter ілгектерінің реті үш жағдайды бөледі, олардың тек біреуі FORWARD-қа қатысты:
| Origin | Path | Hook that sees it |
|---|---|---|
| Local process | OUTPUT then POSTROUTING | OUTPUT, POSTROUTING |
| Addressed to a local service | PREROUTING then INPUT | PREROUTING, INPUT |
| Received for another host | PREROUTING, FORWARD, POSTROUTING | FORWARD |
Жергілікті қолданба OUTPUT жолынан басталады, өйткені ядро пакет осында пайда болатынын және ешқашан жіберуге үміткер емесін әлдеқашан анықтаған. Туннель жасау бұл жіктеуді өзгертпейді; туннель пакет шыға алатын құрылғы, жергілікті шығысты транзитке айналдыратын кезең емес.
Екі пакет, бір әңгіме
Туннель көтерілген соң қолданбаның ішкі пакеті мен шифрланған сыртқы пакет әртүрлі нысандар. Ішкі пакет қолданба таңдаған тағайындалу орны мен деректерді алып жүреді. Сыртқы пакет шифрмәтінді серіктестің мекенжайы мен портына жеткізеді, физикалық интерфейстен нақты өтетін де сол.
Сіздің саясатыңыз солардың біреуіне қатысты, ал дұрыс емесін таңдау ереженің ештеңе істемейтіндей көрінуінің жиі себебі. Серіктестің сыртқы мекенжайына сәйкес келетін ереже әрбір туннель пакетін бірдей көреді, ішкі қолданба не істесе де. Ішкі тағайындалу орнына сәйкес келетін ереже сізге маңызды трафикті көреді және ол пакет ережені орнатқан ілгекке жеткенде ғана іске қосылады.
Атау кеңістіктері шекараны жылжытады
Контейнер қағиданы өзгертпей-ақ мұны қиындатады. Қолданбаның сұранысы контейнердің желілік атау кеңістігінің ішіндегі жергілікті шығыс. Хост бұл трафикті виртуалды Ethernet интерфейсінде қабылдап, оны әрі қарай жібере алады, сондықтан хосттағы FORWARD ережесі мағыналы болуы мүмкін, тіпті сұранысты жасаған процесс хосттың OUTPUT тізбегіне ешқашан тимесе де.
Ілгекті таңдамас бұрын ережелер жиыны мен туннельдің нақты қайда тұратынын анықтаңыз. Контейнер ішіндегі туннель, контейнерді сол арқылы маршруттаған хосттағы туннель және бөлек атау кеңістігіндегі туннель бұл үш түрлі топология және үш түрлі ереже орны. Ережелерді құрылғыға ие атау кеңістігінің ішінде оқыңыз, тек әдепкіде емес.
Белгі тіпті керек пе, соны сұраңыз
Мақсат бір тағайындалу префиксін туннель арқылы жіберу болса, сол префикс үшін маршрут жеткілікті болуы мүмкін. Алдымен әрекетті маршруттарды тексеріңіз, сервер итеріп бергеннің бәрін қоса: бағытталған әдепкі маршрут VPN арқылы сіз ойлаған тар саясаттан әлдеқайда көп трафик жібереді, ал қанша белгі қойсаңыз да нәтиже ниетке сай болмайды.
Жіктеу шешім маршрут білдіре алмайтын нәрсеге тәуелді болғанда қажет: дереккөз, пайдаланушы немесе процесс сияқты. Қабылданатын трафик үшін PREROUTING ішіндегі белгі жұмыс істейді. Жергілікті трафик үшін белгі белгі қойылғаннан кейін жаңа маршрут іздеуін бастай алатын шығыс кезеңінде болуы керек. nftables-те бұл шығыс ілгегіндегі route түріндегі тізбек; қарапайым шығыс сүзгі тізбегі мәнді қойып, маршрутты өзгеріссіз қалдырады.
iptables-те баламасы mangle OUTPUT құрылымында тұрады және сол талап қолданылады: маршруттау шешімі белгі пайда болғаннан кейін қайта қаралуы керек. Содан кейін саясат ережесі белгіні тұтынып, жарамды маршруты бар кестеге нұсқауы керек. conntrack белгісін қою үшінші, бөлек операция; ол ағынға мән сақтайды және сол мәнді маршруттау оқи алатындай етіп ағымдағы пакетке өзі қоймайды.
Іздеуді және санауышты бірге тексеріңіз
nft list ruleset
ip route get 198.51.100.25
ip route get 198.51.100.25 mark 0x1
Мекенжай мен белгі мысал ретінде берілген, ал екі маршрут сұрауы екі түрлі сұраққа жауап береді. Екіншісі пакет сол белгіні алып жүрсе ядро не істер еді деп сұрайды; ол сіздің ережелер жиыныңыз белгі тағайындайтынын көрсетпейді. Оны болжам сынағы ретінде қарастырыңыз, саясаттың жұмыс істейтінінің дәлелі ретінде емес.
Содан кейін зиянсыз сұраныс іске қосып, бір уақытта екі нәрсені бақылаңыз: таңдаған ілгегіңіздегі санауышты және пакеттің нақты алған шығысын. Санауыш қозғалып, пакет басқа жерден шықса, белгі немесе кесте қате. Екеуі де қозғалмаса, пакет ол ілгекке мүлде жетпейді, келесі сұрақ атау кеңістігі немесе жол.
Соңында сынақты механизм білдіре алатын нәрсемен шектеңіз. Бір мекенжай үшін бір маршрут мекенжайлары ауысып отыратын қызмет үшін тұрақты саясатқа айналмайды. Алдымен пакеттер ауқымын шешіңіз, содан кейін маршруттау мен белгілеу құрылымы қайта қосылғаннан кейін сол ауқымды ұстай алатынын тексеріңіз.