VPN ඩීමනයට වරප්‍රසාදිත ජාල ක්‍රියා අවශ්‍ය වේ, නමුත් සාමාන්‍ය යෙදුම් කිසිදු වරප්‍රසාදයක් නොමැතිව පිටතට යන සොකට් විවෘත කරයි. එම හිඩැසේම බොහෝ හැකියා දෝෂ ආරම්භ වේ: කෙනෙක් අවසර දෝෂයක් දකිමින් මුළු කට්ටලයම ලබා දෙයි, පසුව කිසිවෙකුට පැහැදිලි කළ නොහැකි හේතූන් නිසා සේවාව ක්‍රියා කරයි. පහත ගමන් මග අසාර්ථක වූ ක්‍රියාවෙන් ආරම්භ වේ, එය එක් අධිකාරියකට සම්බන්ධ කරයි, පසුව ක්‍රියාවලිය සැබවින්ම ධාවනය වන සන්දර්භය පරීක්ෂා කරයි. සීමා රහිත root ලෙස ක්‍රියා කිරීම සමහර යෙදවුම් සඳහා වලංගු පිළිතුරකි, නමුත් එය පෙරනිමියක් නොව තීරණයක් විය යුතුය.

අසාර්ථක වූ ක්‍රියාවෙන් ආරම්භ කරන්න

නිබන්ධනයක් කියවීමට පෙර දෝෂය කියවන්න. අතුරුමුහුණත් වෙනසකදී «ක්‍රියාවට අවසර නැත», උපාංග නෝඩයක් විවෘත කිරීම ප්‍රතික්ෂේප කිරීම සහ පහත් පෝටයක bind අසාර්ථක වීම — මේවා වෙනස් අවසර තුනක් සහිත වෙනස් ගැටලු තුනකි. ක්‍රියාවලිය ආරම්භ වී පළමු මාර්ග වෙනසෙහි පමණක් අසාර්ථක වුවහොත්, එයින් අතුරුමුහුණත සෑදීම දැනටමත් සාර්ථක බවද කියැවේ, එය පිළිතුර බෙහෙවින් පටු කරයි.

සේවාව නතර කළ තත්ත්වයේ දෝෂය නැවත නිපදවා, පසුව ක්‍රියාත්මක කිරීම අවසර දෙන්නේ නම් එය එම පරිශීලකයා යටතේම ඉදිරිපසින් ආරම්භ කරන්න. ඔබට දැකිය හැකි දෝෂයක් අනුමාන කළ යුතු ලොග් පේළියකට වඩා හොඳය, එය හැකියා ගැටලුවක් සහ SELinux හෝ AppArmor ප්‍රතික්ෂේපයක් අතර වෙනස පැහැදිලි කරයි.

සෑම ක්‍රියාවක්ම එක් අධිකාරියකට සම්බන්ධ කරන්න

වගුව ආරම්භක සිතියමකි, ක්‍රියාත්මක කිරීමේ ලේඛනයට ආදේශකයක් නොවේ:

OperationUsual authorityWatch for
Create or configure tun/tapCAP_NET_ADMIN in the relevant namespaceCreating the device and opening it are separate steps
Add routes, rules, firewall entriesCAP_NET_ADMINSame capability, different namespace than you think
Open /dev/net/tunDevice permissions, not a capabilityGroup membership or a udev rule may be enough
Raw socketsCAP_NET_RAWNeeded by some user-space tunnel implementations
Bind a port below 1024CAP_NET_BIND_SERVICEIrrelevant for most modern tunnel ports

එම වගුවේ පේළි දෙකම ජනතාව එකිනෙකට මිශ්‍ර කරන පේළි ය. /dev/net/tun විවෘත කිරීම ගොනු අවසර ප්‍රශ්නයකි; ඔබ විවෘත කළ දේ වින්‍යාස කරන ලෙස කර්නලයට කීම හැකියා ප්‍රශ්නයකි. CAP_NET_ADMIN ලබා දීමෙන් ඔබේ සේවා පරිශීලකයාට කියවිය නොහැකි උපාංග නෝඩයක් හදනු නොලැබේ, නෝඩය හැදීමෙන් ඔබට මාර්ග අධිකාරියක් නොලැබේ. එකක් වෙනස් කිරීමට පෙර දෙකම පරීක්ෂා කරන්න.

කර්නලයේ WireGuard සහ පරිශීලක අවකාශයේ ටනල් වැඩසටහන් ද එකම අවශ්‍යතා නොමැත. කර්නල මොඩියුල මාර්ගය netlink හරහා දැනටමත් ඇති අතුරුමුහුණත වින්‍යාස කරයි, නමුත් පරිශීලක අවකාශයේ ක්‍රියාත්මක කිරීමකට උපාංගයද, සමහර ප්‍රවාහන සඳහා අමු සොකට් ද අවශ්‍ය විය හැක.

සන්දර්භය කියවන්න: සේවාව, කන්ටේනරය හෝ ෂෙල්

සත්කාරකයේ ජාල නාම අවකාශයේ හැකියාවක් හිතාමතා හුදකලා කළ ස්ටැකයේ එම ක්‍රියාවට වඩා බොහෝ බලපෑම් කළ හැක. කන්ටේනර ධාවන පරිසරය සාමාන්‍යයෙන් අඩු කළ සීමා කට්ටලයකින් ආරම්භ වේ; සත්කාරක ජාලය බෙදාගන්නා කන්ටේනරයට NET_ADMIN එකතු කිරීම තමන්ගේම ජාල නාම අවකාශයක් ඇති සහ සත්කාරක මවුන්ට් නොමැති කන්ටේනරයකට එකතු කිරීමට වඩා බෙහෙවින් විශාල අවසරයකි.

systemd ඒකක සඳහා ඒකක ගොනුව කියන බව පෙනෙන දෙය නොව, ඇත්තටම යෙදෙන දෙය කියවන්න: systemctl show -p CapabilityBoundingSet -p AmbientCapabilities ඵලදායී අගයන් වාර්තා කරයි, ඒවා ඔබට අමතක වූ drop-in එකක් විසින් සකසා තිබිය හැක. ඵලදායී අගය ඉල්ලන්න, කිසිදා අපේක්ෂිත අගය නොව. Ambient හැකියා වැදගත් වන්නේ root නොවන සේවාවක් ඒවා නොමැතිව exec හරහා හැකියා අහිමි කරගන්නා නිසාය.

පැකේජයේ හෝ රූපයේ ආධාරක සැකසීම පදනම කරගන්න. වෙනත් නිබන්ධනයක් වෙනත් මෙවලමක් සඳහා ඒවා ලැයිස්තුගත කළ නිසා අමු සොකට් අවසර හෝ වරප්‍රසාදිත මාදිලියක් එකතු නොකරන්න; එම තර්කය කිසිවක් මාරු නොකරන අතර ඔබ ගෙවූ හුදකලාව අහිමි කරයි. සැක සහිත විට කිසිවක් නොදී, ඔබට අවශ්‍ය නිශ්චිත ක්‍රියාව සඳහා ක්‍රියාත්මක කිරීමේ සටහන් කියවන්න.

වරප්‍රසාද අඩු වූ පසු සිදුවන දෙය නිරීක්ෂණය කරන්න

බොහෝ ඩීමන වරප්‍රසාද සමඟ ආරම්භ වී අතුරුමුහුණත වින්‍යාස කර, පසුව වරප්‍රසාද නොමැති පරිශීලකයෙකුට ගොස් ටනලය රඳවා ගනී. එම මොහොතේ සිට ක්‍රියාවලියට මාර්ගයක් එකතු කළ නොහැක, ෆයර්වෝල් නීතියක් නැවත ලිවිය නොහැක හෝ නව වරප්‍රසාදිත උපාංගයක් විවෘත කළ නොහැක; නැවත සම්බන්ධ වීමට හරියටම එය අවශ්‍ය වන තෙක් එය ගැටලුවක් නොවේ. පසුව ගොනු කියවීම සහ hook ක්‍රියාත්මක කිරීම එම හේතුව නිසාම අසාර්ථක විය හැක.

පළමු තත්පරය නොව සම්පූර්ණ ජීවන චක්‍රය පරීක්ෂා කරන්න: ආරම්භය, අලුත් කිරීම හෝ නැවත සම්බන්ධ වීම, සහ නැවැත්වීමේදී පිරිසිදු කිරීම. අතුරුමුහුණත පළමු වරට සාර්ථකව සෑදීමෙන් පසුව සිදුවන සෑම වරප්‍රසාදිත ක්‍රියාවක්ම තවදුරටත් ක්‍රියා කරන බව ඔප්පු නොවේ, අසාර්ථකත්වය සාමාන්‍යයෙන් පැය ගණනකට පසු නිෂ්පාදනයේදී දිස් වේ.

පරිශීලක මාරුව තුළ ටනලය විවෘතව තබා ගන්නා ක්‍රියාත්මක කිරීම් සාමාන්‍යයෙන් එය ටනලය සහ යතුරු රඳවා ගැනීමේ විකල්ප සමඟ යුගලනය කරයි. systemd පැත්තේ සමාන ප්‍රශ්නය වන්නේ ඒකකයේ හැකියා කට්ටලය ඔබ වින්‍යාස කළ පරිශීලක මාරුවෙන් ගැලවෙනවාද යන්නයි.

ලබා දුන් අවසරය සහ එහි හේතුව සටහන් කරන්න

නිශ්චිත අවසරය, එය සක්‍රීය කරන ක්‍රියාව සහ එය නිවැරදි කළ දෝෂය ලියන්න. යෙදවුම් සටහන්වල එක් පේළියක් — «ඒකකයේ ජාල නාම අවකාශයේ CAP_NET_ADMIN, නැවත සම්බන්ධ වීමෙන් පසු මාර්ග වෙනස්කම් සඳහා අවශ්‍ය» — ඊළඟ පුද්ගලයාට අවසරය නැවත පුළුල් කිරීම වැළැක්වීමට ප්‍රමාණවත්ය.

පසුව සෑම උත්ශ්‍රේණි කිරීමකින් පසු ඵලදායී කට්ටලය නැවත කියවන්න. සැපයුම්කරුවන් විශේෂාංග එකතු කරයි, රූප පෙරනිමි අගයන් වෙනස් කරයි, පසුගිය වසරේ අනවශ්‍ය වූ හැකියාවක් කිසිවෙකු නොදැනුවත්වම බර දරන එකක් විය හැක.

අදාළ ලිපි