Programu ya ndani, kanuni ya VPN: kwa nini mnyororo wako wa FORWARD hauwaki kamwe
Mchakato kwenye mashine hutumia OUTPUT, sio FORWARD. Chagua hook katika namespace sahihi, kisha amua kama alama au njia ya kawaida inatosha.
Unaongeza kanuni ya trafiki ya VPN katika mnyororo wa FORWARD, unaendesha ombi kutoka kwenye mashine hiyo hiyo ya Linux, na kihesabu kinabaki sifuri. Kanuni hiyo ina uwezekano mkubwa kuwa sahihi. Pakiti haikuwahi kufuata njia hiyo, kwa sababu ombi linalozalishwa kwenye mashine yenyewe halipitishwi nayo. Kufuatilia maisha ya pakiti kutoka soketi hadi waya kunaeleza kwa nini, na kanuni inapaswa kuwa wapi badala yake.
Gundua pakiti ilizaliwa wapi
Mpangilio wa hook wa Netfilter hutenganisha hali tatu, na ni moja tu kati yao inahusisha 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 |
Programu ya ndani huanza katika njia ya OUTPUT, kwa sababu kernel tayari imebaini kuwa pakiti hutokea hapa na kamwe si mgombea wa kupitishwa. Kuunda handaki hakubadilishi uainishaji huo; handaki ni kifaa ambacho pakiti inaweza kutoka, sio hatua inayogeuza pato la ndani kuwa usafiri.
Pakiti mbili, hadithi moja
Mara handaki linapoinuka, pakiti ya ndani ya programu na pakiti ya nje iliyosimbwa ni vitu tofauti. Pakiti ya ndani hubeba lengo na mzigo uliochaguliwa na programu. Pakiti ya nje hubeba maandishi yaliyosimbwa hadi anwani na bandari ya mwenzake, na ndiyo inayovuka kiolesura cha kimwili kwa kweli.
Sera yako inahusu mmoja wao, na kuchagua ule mbaya ni sababu ya kawaida ya kanuni kuonekana haifanyi chochote. Kanuni inayolingana na anwani ya nje ya mwenzake huona kila pakiti ya handaki sawa, chochote programu ya ndani inafanya. Kanuni inayolingana na lengo la ndani huona trafiki unaojali, na itawaka tu iwapo pakiti hiyo itafikia hook uliyoweka kanuni.
Namespace huhamisha mpaka
Kontena hufanya hili kuwa gumu bila kubadilisha kanuni. Ombi la programu ni pato la ndani ndani ya namespace ya mtandao ya kontena. Mwenyeji hupokea trafiki hiyo kwenye kiolesura cha Ethernet pepe na anaweza kuipitisha, hivyo kanuni ya FORWARD kwenye mwenyeji inaweza kuwa na maana ingawa mchakato uliozalisha ombi haukuwahi kugusa mnyororo wa OUTPUT wa mwenyeji.
Kabla ya kuchagua hook, baini seti ya kanuni na handaki zinaishi wapi kwa kweli. Handaki ndani ya kontena, handaki kwenye mwenyeji na kontena likielekezwa kupitia hilo, na handaki katika namespace tofauti ni topolojia tatu tofauti na maeneo matatu tofauti ya kanuni. Soma kanuni ndani ya namespace inayomiliki kifaa, sio ile ya chaguo-msingi pekee.
Uliza kama unahitaji alama hata kidogo
Ikiwa lengo ni kutuma kiambishi kimoja cha lengo kupitia handaki, njia ya kiambishi hicho inaweza kutosha. Kwanza angalia njia zinazofanya kazi, ikiwa ni pamoja na chochote alichosukuma seva: njia ya chaguo-msingi iliyoelekezwa upya hutuma trafiki nyingi zaidi kupitia VPN kuliko sera nyembamba uliyokuwa nayo akilini, na kiwango chochote cha alama hakitafanya matokeo yalingane na nia.
Uainishaji unahitajika wakati uamuzi unategemea kitu ambacho njia haiwezi kueleza, kama chanzo, mtumiaji au mchakato. Kwa trafiki inayopokelewa, alama katika PREROUTING hufanya kazi. Kwa trafiki ya ndani, alama lazima itokee katika hatua ya pato inayoweza kuanzisha utafutaji mpya wa njia baada ya alama kuwekwa. Kwa nftables hiyo ni mnyororo wa aina ya route kwenye hook ya pato; mnyororo wa kawaida wa kichujio cha pato utaweka thamani na kuacha njia bila kubadilika.
Kwa iptables, sawa nayo huishi katika mpangilio wa mangle OUTPUT, na sharti lile lile linatumika: uamuzi wa uelekezaji lazima uangaliwe upya baada ya alama kuwepo. Kisha kanuni ya sera lazima itumie alama na ielekeze kwenye jedwali lenye njia inayoweza kutumika. Kuweka alama ya conntrack ni operesheni ya tatu, tofauti; huhifadhi thamani kwenye mtiririko na yenyewe haiweki thamani hiyo kwenye pakiti ya sasa ili uelekezaji uisome.
Thibitisha utafutaji na kihesabu pamoja
nft list ruleset
ip route get 198.51.100.25
ip route get 198.51.100.25 mark 0x1
Anwani na alama ni mifano, na maswali mawili ya njia hujibu maswali tofauti. La pili huuliza kernel ingefanya nini ikiwa pakiti ingebeba alama hiyo; halionyeshi kuwa seti yako ya kanuni inatoa moja. Lichukulie kama jaribio la dhana, sio ushahidi kuwa sera inafanya kazi.
Kisha endesha ombi lisilo na madhara na uangalie mambo mawili kwa wakati mmoja: kihesabu kwenye hook uliyochagua, na njia ya kutoka ambayo pakiti ilichukua kwa kweli. Ikiwa kihesabu kinasogea na pakiti inatoka mahali pengine, alama au jedwali si sahihi. Ikiwa hakuna kinachosogea, pakiti haifiki hook hiyo kabisa, na swali linalofuata ni namespace au njia.
Mwishowe, weka kikomo cha jaribio kwa kile utaratibu unachoweza kueleza. Njia moja kwa anwani moja haibadiliki kuwa sera ya kudumu kwa huduma ambayo anwani zake zinazunguka. Amua kwanza wigo wa pakiti, kisha angalia kama muundo wa uelekezaji na alama unaweza kushikilia wigo huo baada ya kuunganisha upya.