මාර්ග දෙකකට Android යෙදුමක් ඉදිරියේ IP අතුරුමුහුණතක් තැබිය හැක, දෙකම ඉතා වෙනස් හිමිකරුවන් සහිත එකම ආකාරයේ ගොනු විස්තරකයකින් අවසන් වේ. එකක් VpnService සහ එහි builder හරහා යයි, අනෙක root shell සහ /dev/net/tun හරහා. එම විස්තරකයේ සෑම කියවීමක්ම පිටවන පැකට්ටුවක් වන අතර සෑම ලිවීමක්ම ඇතුළට එන පැකට්ටුවකි. මාර්ග වෙන් කරන්නේ ප්‍රතිපත්තිය කා අතේද, OS උත්ශ්‍රේණියක් ජය ගන්නේ කවුද, සහ මාර්ගගත කිරීමේ වගුවෙන් කොපමණක් ඔබට ස්පර්ශ කළ හැකිද යන්නයි.

ප්‍රතික්ෂේප කරන නිශ්චිත දේ ඔබට නම් කළ නොහැකි නම් වේදිකා මාර්ගය ගන්න. එම ප්‍රතික්ෂේපය සාමාන්‍යයෙන් TAP, ඔබේම යෙදුම් කට්ටලයෙන් පිටත ග්‍රහණය, හෝ රාමුව කිසිදා හෙළි නොකරන මාර්ගගත කිරීමේ නීතියකි.

වේදිකා මාර්ගයේදී ඔබ විධාන වෙනුවට අභිප්‍රාය ප්‍රකාශ කරයි. අවම වශයෙන් එක් ලිපිනයක්, අවශ්‍ය මාර්ග, DNS සේවාදායක සහ අවශ්‍ය නොවන යෙදුම් ලැයිස්තුවක් ලබා දෙයි, පසුව Android හි පද්ධති සේවාව තමන්ගේම අනන්‍යතාවය යටතේ වරප්‍රසාදිත සැකසුම සිදු කරයි. අතුරුමුහුණතේ නම ඔබ කිසිදා කලින් නොදනී, එය සාදන ioctl කිසිදා නිකුත් නොකරයි, එයයි වැදගත් කරුණ.

IP අතුරුමුහුණතක් ලබා ගැනීමට ක්‍රම දෙකක්

root මාර්ගය පැරණි වට්ටෝරුවයි. ඔබ /dev/net/tun විවෘත කරයි, IFF_TUN සමඟ TUNSETIFF අමතයි, ip link සමඟ අතුරුමුහුණත ඉහළට ගනී, සහ ලිපින සහ මාර්ග අතින් එකතු කරයි. සෑම පියවරක්ම ඔබම නිවැරදිව කළ යුතුය, රාමුව නිහඬව නිරාකරණය කරන්නට තිබූ ඒවා ද ඇතුළුව. එක් මාර්ගයක් මඟ හැරුණොත් පරිශීලකයාට මියගිය සේවාදායකයක් මෙන් එකම වාර්තාව ලැබේ.

නිදොස් කිරීම සැකසුම තරමටම වෙනස් ය. root මාර්ගයේදී අතුරුමුහුණත ඇත්තේය, නැතහොත් ඔබේ ioctl සෘජුවම කියවිය හැකි දෝෂයක් ලබා දුන්නේය. වේදිකා මාර්ගයේදී අතුරුමුහුණත ඇත්තේ establish() සාර්ථක වූ පසුවය, එබැවින් අසාර්ථකත්වය උපාංග නෝඩයක් වෙනුවට ව්‍යතිරේකයක් හෝ null විස්තරකයක් ලෙස පැමිණේ, ඔබට එය සොයා බැලිය හැක.

establish() ඇත්තටම ලබා දෙන්නේ කුමක්ද

Builder.establish() ට ප්‍රතිඵල තුනක් ඇති අතර ඒවාට වෙනස් ප්‍රතිචාර තුනක් අවශ්‍යයි. විස්තරකයක් යනු අතුරුමුහුණත වින්‍යාස කර ඇති අතර භාවිතයට ඔබේ බවයි, null යනු ඉල්ලීම පසු නොකළ බවයි, සහ විසි කළ ව්‍යතිරේකය යනු පද්ධති සේවාව එය ප්‍රතික්ෂේප කළ බවයි. null සහ සාර්ථකත්වය එකම boolean එකකට එකතු කිරීම පැකට්ටුවක් කිසිදා නොගෙන යන ක්‍රියාකාරී උමගක් ගැන යෙදුමක් වාර්තා කරන වඩාත් පොදු ක්‍රමයයි. Builder යොමුව ලිපින අවශ්‍යතාව සඳහන් කරන අතර සේවාදායකයට දොස් පැවරීමට පෙර එය කියවීම වටී.

දිශා තීරණය කරන්නේ විස්තරකයයි, ඔබේ ප්‍රොටෝකෝලය නොවේ. කියවීම් ඔබට දැනටමත් VPN සඳහා තෝරාගත් පිටවන පැකට්ටු ලබා දෙන අතර ලිවීම් ඇතුළට එන පැකට්ටු නැවත අතුරුමුහුණතට එන්නත් කරයි. එම පැකට්ටු සංකේතනය, සත්‍යාපනය සහ රාමුගත කිරීම ඔබේම ප්‍රවාහනයේ කාර්යයයි, මන්ද වේදිකාව පැකට්ටු මායිමේ නතර වේ.

Binder එක් පියවරකි, JNI තවත් අක්ෂයකි

builder ඉල්ලීම Binder හරහා පද්ධතියට ඇතුළු වන අතර ඊට යටින් කොහේ හෝ වේදිකාව උපාංගය වින්‍යාස කිරීමට දේශීය කේත අමතයි. ඒවා එක් ඇමතුමක් තුළ ගොඩගැසූ වෙනස් යාන්ත්‍රණ දෙකකි. Binder යනු යෙදුම සහ පද්ධති සේවාව අතර ක්‍රියාවලි අතර සන්නිවේදනයයි, JNI යනු ක්‍රියාවලියක් තුළ Java සිට දේශීය කේතයට ඇති පාලමයි. Android 9 AOSP ගස කියවීමෙන් ගොඩැල්ල වචනාර්ථයෙන් පෙනේ, අභ්‍යන්තර පන්ති නාම සහ ගොනු මාර්ග නිකුතු අතර මාරු වන බව මතක තබා ගැනීම වටී.

නොවෙනස් වන්නේ ඔබට විශ්වාස කළ හැකි ගිවිසුමයි: builder, එය ලබා දෙන විස්තරකය, සහ ඒ වටා ඇති සේවා ජීවන චක්‍රය. කිසිදු යෙදුමක් අතුරුමුහුණතක් ලබා ගැනීමට අභ්‍යන්තර සේවා ගනුදෙනුවක් ඇමතිය යුතු නැත හෝ උපාංග නෝඩයක් නැවත සෑදිය යුතු නැත. ඔබේ කේතය AOSP පන්ති නාමයක් මත රඳා පවතී නම්, ඔබ පරීක්ෂා නොකළ නිකුතුවක එය කැඩෙනු ඇත.

TUN IP ගෙන යයි, TAP Ethernet

TUN යනු IP අතුරුමුහුණතකි. TAP යනු Ethernet අතුරුමුහුණතකි, එම වෙනස තීරණය කරන්නේ පාලම කළ හැකිද යන්නයි. TUN උපාංගයකට MAC ලිපිනයක් හෝ යොමු කිරීමට Ethernet ශීර්ෂයක් නොමැත, එබැවින් මාර්ග කෙසේ ලියා තිබුණත් TUN සේවාලාභියාට layer-2 පාලමට එක් විය නොහැක.

VpnService ඔබට IP ප්‍රභේදය ලබා දෙයි, එය යෙදුම් මට්ටමේ VPN ට අවශ්‍ය දේ සහ අමු Ethernet ගොඩැල්ලක් නොමැතිව එයට ආධාර කළ හැකි දේය. ඔබේ නිර්මාණයට පාලම අවශ්‍ය නම්, වේදිකා මාර්ගය ඔබව එතැනට ගෙන නොයයි, කර්නලය සහ උපාංග අවසර සහයෝගය දුන්නොත් පමණක් root මාර්ගය එසේ කරයි.

root මාර්ගය තවමත් දිනන තැන

කාර්යයන් තුනක් මිනිසුන් වේදිකා මාර්ගයෙන් ඈත් කරයි. layer-2 පාලමට TAP අවශ්‍යයි. ඔබේ VPN පරාසයෙන් පිටත යෙදුම්වල ගමනාගමනය අල්ලා ගැනීමට රාමුව නොදෙන දෘශ්‍යතාව අවශ්‍යයි. builder කිසිදා හෙළි නොකරන ප්‍රතිපත්ති මාර්ගගත කිරීම, උදාහරණයක් ලෙස එක් ගමනාන්තයක් සඳහා වෙනම වගුවක්, ඔබම ස්ථාපනය කරන නීති ඉල්ලා සිටී.

වියදම් පසුව එයි: අගුළු හරින ලද bootloader හෝ root කළ රූපයක්, ඔබේ පාද යටින් මාරු වන SELinux ප්‍රතිපත්තිය, සහ OTA එකකින් පසුව නිවැරදිව හැසිරීම නවත්වන උපාංගයක්. root කළ වට්ටෝරුව සාමාන්‍ය යෙදුම් බෙදාහැරීම හරහා යැවිය නොහැකි ද බැවින් බොහෝ කණ්ඩායම් එය නිෂ්පාදනයක් වෙනුවට අභ්‍යන්තර රෝග විනිශ්චය මාර්ගයක් ලෙස තබා ගනී.

දෙක අතර තේරීම

ඔබ සතු කේතයෙන් නොව, ඔබට අවශ්‍ය අතුරුමුහුණතින් ආරම්භ කරන්න. පිළිතුර යෙදුමට සීමිත මාර්ග සහිත TUN උපාංගයක් නම්, වේදිකා මාර්ගය කෙටි වන අතර උත්ශ්‍රේණි කිරීම්වලින් ගැලවේ. පිළිතුරේ Ethernet රාමු, වෙනත් යෙදුම් ග්‍රහණය කිරීම, හෝ builder ප්‍රතික්ෂේප කරන මාර්ගගත කිරීමේ නීති ඇතුළත් නම්, ඔබ root ප්‍රදේශයේ සිටින අතර එය මෙහෙයුම් වියදමක් ලෙස අයවැය කළ යුතුය.

බොහෝ තර්ක නිරාකරණය කරන එක් පරීක්ෂාවක්: පළමුව වේදිකා මාර්ගය ගොඩනගන්න, establish() හි ප්‍රතිඵලය දුරස්ථ සැසියේ තත්ත්වයෙන් වෙන්ව සටහන් කරන්න, සහ සෑම දිශාවකම එක් පැකට්ටුවක් තහවුරු කරන්න. ඉන් පසුව පමණක් අතුරුදහන් හැකියාව ආධාරක මාර්ගය හැර යාම සාධාරණීකරණය කරන්නේද යන්න තීරණය කරන්න.

අදාළ ලිපි