ځایي اپلیکیشن، د VPN قاعده: ولې ستاسو FORWARD ځنځیر هېڅکله نه فعالېږي
په ماشین کې پروسه OUTPUT کاروي، نه FORWARD۔ په سم نومفضا کې hook وټاکئ، بیا پرېکړه وکړئ چې mark که ساده route بسنه کوي۔
تاسو د VPN ترافیک لپاره په FORWARD ځنځیر کې قاعده ورزیاته کړئ، غوښتنه له همدې Linux ماشین څخه چلوئ، او شمېرونکی په صفر ولاړ پاتې کېږي۔ قاعده شاید سمه وي۔ بسته هېڅکله دا لار نه ده تللې، ځکه چې په ماشین کې پخپله جوړه شوې غوښتنه دا د نورو لوري ته نه استوي۔ د بستې ژوند له سوکیټ څخه تر سیمې پورې تعقیبول روښانه کوي چې ولې دا دومره وي او قاعده باید په اصل کې چېرې وي۔
ومومئ چې بسته چېرې زیږېدلې
د Netfilter د hook ترتیب درې حالتونه بېلوي، او یوازې یو یې 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 لار کې پیل کېږي، ځکه چې کرنل له پخوا ټاکلې چې بسته همدلته پیدا کېږي او هېڅکله د لېږد نوموړی نه وي۔ تونل جوړول دا ډلبندي نه بدلوي؛ تونل هغه وسیله ده چې بسته ترې ووځي، نه هغه پړاو چې ځایي وتنه په تېرېدونکي بدلوي۔
دوې بستې، یوه کیسه
کله چې تونل ولاړ شي، د اپلیکیشن داخلي بسته او کوډ شوې بهرنۍ بسته بېل شیان دي۔ داخلي بسته هغه منزل او پېلوډ لېږدوي چې اپلیکیشن ټاکلی۔ بهرنۍ بسته سایفرټیکسټ ته د سیال پتې او پورټ ته وړي، او فزیکي انټرفېس په ریښتیني ډول همدا تېروي۔
ستاسو پالیسي له دوو یوې سره اړه لري، او غلط ټاکل کېدای شي عام لامل وي چې قاعده هېڅ نه کوي ښکاري۔ هغه قاعده چې د سیال بهرنۍ پتې سره سمون خوري هر تونلي بسته یو شان ګوري، هر څه چې دننه اپلیکیشن کوي۔ هغه قاعده چې له داخلي منزل سره سمون خوري هغه ترافیک ګوري چې تاسو ته مهم دی، او یوازې هغه وخت فعالېږي چې هغه بسته هغې hook ته ورسیږي چې تاسو قاعده پرې لګولې ده۔
نومفضاوې پوله خوځوي
کنټینر دا ستونزمنوي پرته له دې چې اصل بدل کړي۔ د اپلیکیشن غوښتنه د کنټینر د شبکې نومفضا دننه ځایي وتنه ده۔ host هغه ترافیک په مجازي Ethernet انټرفېس کې ترلاسه کوي او کولای شي یې ولېږدوي، نو په host کې FORWARD قاعده کولای شي معنا ولري، که څه هم هغه پروسه چې غوښتنه یې جوړه کړې هېڅکله د host OUTPUT ځنځیر ته نه ده رسېدلې۔
له hook ټاکلو دمخه وټاکئ چې د قاعدو ټولګه او تونل په اصل کې چېرې اوسېږي۔ دننه کنټینر تونل، په host تونل او کنټینر د هغه له لارې route کول، او په جلا نومفضا کې تونل — دا درې بېلې ټوپولوژۍ او درې بېلې د قاعدو ځایونه دي۔ قاعدې د هغې نومفضا دننه ولولئ چې وسیله یې لري، نه یوازې په تلوالې کې۔
وپوښتئ چې ایا mark ته اړتیا لرئ
که هدف دا وي چې یو منزل پریفکس د تونل له لارې ولېږئ، د هغه پریفکس لپاره یوه route بسنه کولای شي۔ لومړی اغېزمن route وګورئ، د سرور هغه هر څه سره چې ټېل وهلي: لېږدول شوی تلوالی له VPN څخه ډېر زیات ترافیک لېږي له هغې تنګې پالیسۍ چې تاسو فکر کاوه، او هر څومره mark کول به پایله له موخې سره یو شان نه کړي۔
ډلبندي هغه وخت اړینه ده چې پرېکړه د یو شي پورې تړلې وي چې route یې نه شي څرګندولی، لکه سرچینه، کاروونکی یا پروسه۔ د ترلاسه شوي ترافیک لپاره په PREROUTING کې mark کار کوي۔ ځایي ترافیک لپاره mark باید په وتنې پړاو کې وي چې د mark له لګولو وروسته نوی route لټون پیل کړای شي۔ په nftables کې دا د وتنې hook کې route ډوله ځنځیر دی؛ عادي وتنې فلټر ځنځیر به ارزښت کېږدي او route به پرته له بدلون پرېږدي۔
په iptables کې سیال شی د mangle OUTPUT په ترتیب کې اوسېږي، او هماغه شرط پلی کېږي: د route پرېکړه باید د mark له شتون وروسته بیا وګورل شي۔ بیا دې پالیسي قاعده mark وکاروي او د هغې جدول لوري ته اشاره وکړي چې کارېدونکې route ولري۔ conntrack mark لګول درېیم، جلا عملیات دی؛ دا په جریان کې ارزښت ساتي او پخپله هغه ارزښت پر اوسنۍ بسته نه لګوي چې route یې ولولي۔
لټون او شمېرونکی یوځای وګورئ
nft list ruleset
ip route get 198.51.100.25
ip route get 198.51.100.25 mark 0x1
پته او mark یوازې بېلګې دي، او دواړه route پوښتنې بېلو پوښتنو ځواب ورکوي۔ دویمه پوښتنه کوي چې که بسته هغه mark ولري کرنل به څه کړي؛ دا نه ښیي چې ستاسو د قاعدو ټولګه mark ورکوي۔ دا د فرضیې ازموینه وګڼئ، نه د دې ثبوت چې پالیسي کار کوي۔
بیا یوه بېزېانه غوښتنه وچلوئ او یوځای دوه شیان وګورئ: ستاسو ټاکل شوې hook کې شمېرونکی، او هغه ووت چې بسته په ریښتیني ډول واخیست۔ که شمېرونکی پورته شي او بسته له بل ځای ووځي، mark یا جدول غلط دي۔ که دواړه پورته نه شي، بسته هغې hook ته هېڅ نه رسیږي، او بل پوښتنه نومفضا یا لار ده۔
په پای کې، ازموینه محدوده کړئ پر هغه څه چې میکانیزم یې څرګندولای شي۔ یوه پته لپاره یوه route، د هغې خدمت لپاره چې پتې یې بدلېږي، تلپاتې پالیسي نه کېږي۔ لومړی د بستو حد وټاکئ، بیا وګورئ چې ایا د route او mark ډیزاین له بیا نښلولو وروسته هم هغه حد ساتلای شي۔