VPN trafiki üçün FORWARD zəncirinə qayda əlavə edirsiniz, sorğunu həmin Linux maşınından işə salırsınız və sayğac sıfırda qalır. Qayda çox güman ki düzgündür. Paket heç vaxt o yolla getməyib, çünki maşının özünün yaratdığı sorğu onun tərəfindən yönləndirilmir. Paketin soketdən naqilə qədər həyatını izləmək bunun səbəbini və qaydanın əslində hara aid olduğunu aydınlaşdırır.

Paketin harada doğulduğunu tapın

Netfilter-in qarmaq sırası üç halı ayırır və yalnız biri FORWARD-a aiddir:

OriginPathHook that sees it
Local processOUTPUT then POSTROUTINGOUTPUT, POSTROUTING
Addressed to a local servicePREROUTING then INPUTPREROUTING, INPUT
Received for another hostPREROUTING, FORWARD, POSTROUTINGFORWARD

Yerli tətbiq OUTPUT yolunda başlayır, çünki nüvə artıq müəyyən edib ki, paket buradan yaranır və heç vaxt yönləndirmə namizədi deyil. Tunel yaratmaq bu təsnifatı dəyişmir; tunel paketin tərk edə biləcəyi bir qurğudur, yerli çıxışı tranzitə çevirən mərhələ deyil.

İki paket, bir hekayə

Tunel qalxdıqdan sonra tətbiqin daxili paketi və şifrələnmiş xarici paket fərqli obyektlərdir. Daxili paket tətbiqin seçdiyi təyinatı və yükü daşıyır. Xarici paket şifrəli mətni həmkarın ünvanına və portuna daşıyır və fiziki interfeysi faktiki keçən də elə budur.

Siyasətiniz onlardan birinə aiddir və səhv olanı seçmək qaydanın heç nə etmədiyi təəssüratı yaratmasının adi səbəbidir. Həmkarın xarici ünvanına uyğun gələn qayda içəridəki tətbiq nə edirsə etsin, hər tunel paketini eyni cür görür. Daxili təyinata uyğun gələn qayda isə sizi maraqlandıran trafiki görür və yalnız o paket qaydanı quraşdırdığınız qarmağa çatanda işə düşəcək.

Ad sahələri sərhədi yerindən tərpədir

Konteyner prinsipi dəyişmədən bunu çətinləşdirir. Tətbiqin sorğusu konteynerin şəbəkə ad sahəsi daxilində yerli çıxışdır. Host bu trafiki virtual Ethernet interfeysində qəbul edir və onu yönləndirə bilər, ona görə hostdakı FORWARD qaydası mənalı ola bilər, baxmayaraq ki sorğunu yaradan proses hostun OUTPUT zəncirinə heç vaxt toxunmayıb.

Qarmaq seçməzdən əvvəl qayda dəstinin və tunelin faktiki harada yaşadığını müəyyənləşdirin. Konteyner daxilində tunel, hostda tunel və konteynerin ondan yönləndirilməsi, ayrı ad sahəsində tunel — bunlar üç fərqli topologiya və üç fərqli qayda yerləşdirilməsidir. Qaydaları qurğuya sahib olan ad sahəsinin içində oxuyun, yalnız standart olanda deyil.

Ümumiyyətlə mark lazımdırmı, soruşun

Məqsəd bir təyinat prefiksini tuneldən keçirməkdirsə, o prefiks üçün bir marşrut kifayət edə bilər. Əvvəlcə effektiv marşrutlara baxın, serverin itələdiyi hər şey daxil olmaqla: yönləndirilmiş defolt nəzərdə tutduğunuz dar siyasətdən qat-qat çox trafiki VPN-dən keçirir və heç bir mark miqdarı nəticəni niyyətə uyğunlaşdırmayacaq.

Təsnifat o zaman lazımdır ki, qərar marşrutun ifadə edə bilmədiyi bir şeydən asılı olsun: mənbə, istifadəçi və ya proses. Qəbul edilən trafik üçün PREROUTING-də mark işləyir. Yerli trafik üçün mark çıxış mərhələsində qoyulmalıdır ki, mark qoyulandan sonra yeni marşrut axtarışı başlada bilsin. nftables-da bu, çıxış qarmağında route tipli zəncirdir; adi çıxış filtri zənciri dəyəri qoyacaq və marşrutu dəyişməz qoyacaq.

iptables-da ekvivalent mangle OUTPUT quruluşunda yaşayır və eyni tələb keçərlidir: marşrut qərarı mark mövcud olduqdan sonra yenidən nəzərdən keçirilməlidir. Sonra siyasət qaydası markı istehlak etməli və istifadə oluna bilən marşrut saxlayan cədvələ yönəlməlidir. Conntrack markı qoymaq üçüncü, ayrı əməliyyatdır; o, axına dəyər yazır və bununla həmin dəyəri marşrutlaşdırmanın oxuya biləcəyi cari paketə qoymur.

Axtarışı və sayğacı birlikdə yoxlayın

nft list ruleset
ip route get 198.51.100.25
ip route get 198.51.100.25 mark 0x1

Ünvan və mark nümunə üçündür və iki marşrut sorğusu fərqli suallara cavab verir. İkincisi, paket həmin markı daşısaydı nüvənin nə edəcəyini soruşur; bu, qayda dəstinizin mark təyin etdiyini göstərmir. Ona fərziyyə testi kimi baxın, siyasətin işlədiyinə dəlil kimi deyil.

Sonra zərərsiz bir sorğu işə salın və eyni vaxtda iki şeyi izləyin: seçdiyiniz qarmaqdakı sayğacı və paketin faktiki götürdüyü çıxışı. Sayğac tərpənirsə və paket başqa yerdən çıxırsa, mark və ya cədvəl səhvdir. Heç biri tərpənmirsə, paket o qarmağa ümumiyyətlə çatmır və növbəti sual ad sahəsi və ya yoldur.

Nəhayət, testi mexanizmin ifadə edə bildiyi ilə məhdudlaşdırın. Bir ünvan üçün bir marşrut, ünvanları dövr edən bir xidmət üçün daimi siyasətə çevrilmir. Əvvəlcə paket əhatəsini qərar verin, sonra yönləndirmə və mark dizaynının yenidən qoşulmadan sonra bu əhatəni saxlaya bildiyini yoxlayın.

Əlaqəli məqalələr