දේශීය යෙදුම, VPN නියමය: ඔබේ FORWARD දාමය කිසිවිටෙක සක්රීය නොවන්නේ ඇයි
යන්ත්රයේ ක්රියාවලියක් OUTPUT භාවිතා කරයි, FORWARD නොවේ. නිවැරදි namespace එකේ hook තෝරාගෙන, පසුව mark එකක් හෝ සරල route එකක් ප්රමාණවත් දැයි තීරණය කරන්න.
ඔබ FORWARD දාමයේ VPN රථවාහනය සඳහා නියමයක් එකතු කරයි, එම 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 එකට ළඟා වූ විට පමණි.
namespace සීමාව මාරු කරයි
කන්ටේනරය මූලධර්මය නොවෙනස්ව මෙය දුෂ්කර කරයි. යෙදුමේ ඉල්ලීම කන්ටේනරයේ ජාල namespace එක තුළ දේශීය ප්රතිදානයකි. සත්කාරකය එම රථවාහනය අතථ්ය Ethernet අතුරුමුහුණතක් මත ලබාගෙන ඉදිරියට යැවිය හැක, එබැවින් ඉල්ලීම ජනිත කළ ක්රියාවලිය සත්කාරකයේ OUTPUT දාමය කිසිවිටෙක ස්පර්ශ නොකළත් සත්කාරකයේ FORWARD නියමය අර්ථවත් විය හැක.
hook එකක් තෝරාගැනීමට පෙර නියම කුලකය සහ ටනලය ඇත්ත වශයෙන්ම ජීවත් වන්නේ කොහේ දැයි තහවුරු කරන්න. කන්ටේනරය තුළ ටනලය, කන්ටේනරය එය හරහා route කළ සත්කාරකයේ ටනලය, සහ වෙනම namespace එකක ටනලය යනු වෙනස් ස්ථල විද්යා තුනක් සහ වෙනස් නියම ස්ථාන තුනකි. උපාංගයට හිමි namespace එක තුළ නියම කියවන්න, පෙරනිමියේ පමණක් නොව.
mark එකක් අවශ්ය දැයි අසන්න
ඉලක්කය එක් ගමනාන්ත උපසර්ගයක් ටනලය හරහා යැවීම නම්, එම උපසර්ගය සඳහා route එකක් ප්රමාණවත් විය හැක. පළමුව ඵලදායී route පරීක්ෂා කරන්න, සේවාදායකය තල්ලු කළ සියල්ල ඇතුළුව: යළි හරවන ලද පෙරනිමිය ඔබ සිතූ පටු ප්රතිපත්තියට වඩා බොහෝ රථවාහන VPN හරහා යවයි, කොපමණ mark කළත් ප්රතිඵලය අරමුණට නොගැළපේ.
route එකකට ප්රකාශ කළ නොහැකි කිසිවක් මත තීරණය රඳා පවතින විට වර්ගීකරණය අවශ්ය වේ, උදාහරණයක් ලෙස මූලාශ්රය, පරිශීලකයා හෝ ක්රියාවලිය. ලබාගන්නා රථවාහනය සඳහා PREROUTING හි mark ක්රියා කරයි. දේශීය රථවාහනය සඳහා mark සිදු විය යුත්තේ mark එක තැබීමෙන් පසු නව route සෙවීමක් ආරම්භ කළ හැකි ප්රතිදාන අදියරකය. nftables හි එය ප්රතිදාන hook එකේ route වර්ගයේ දාමයකි; සාමාන්ය ප්රතිදාන පෙරහන් දාමය අගය තබා route එක නොවෙනස්ව තබයි.
iptables හි සමාන දෙය mangle OUTPUT සැකැස්මේ ජීවත් වේ, සහ එම කොන්දේසියම අදාළ වේ: mark එක පවතින පසු route තීරණය නැවත සලකා බැලිය යුතුය. ඉන්පසු ප්රතිපත්ති නියමය 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 එකට කිසිසේත් ළඟා නොවේ, ඊළඟ ප්රශ්නය namespace හෝ මාර්ගයයි.
අවසාන වශයෙන්, පරීක්ෂණය යාන්ත්රණයට ප්රකාශ කළ හැකි දෙයට සීමා කරන්න. එක් ලිපිනයකට එක් route එකක් ලිපින මාරු වන සේවාවකට ස්ථිර ප්රතිපත්තියක් නොවේ. පළමුව පැකට් විෂය පථය තීරණය කරන්න, පසුව නැවත සම්බන්ධ වූ පසුවත් route සහ mark සැලසුම එම පථය රඳවා ගත හැකි දැයි පරීක්ෂා කරන්න.