Android VPN උමං මාර්ගයෙන් උපජාලයක් බැහැර කරන ආකාරය
VpnService-ට මාර්ගයක් බැහැර කළ නොහැක, එබැවින් ඔබ අනුපූරකය එකතු කරයි: /8 සඳහා ජනනය කළ උපසර්ග අටක්, සමඟ ඉතිරිය අල්ලන IPv6, DNS සහ සෙවුම් පරීක්ෂණ.
Android හි VpnService-ට බැහැර කිරීමේ මාර්ගයක් නැත, සහ API කියවීමේ කිසිදු ප්රමාණයක් එකක් නිපදවන්නේ නැත. Builder.addRoute() උමං මාර්ගයට සැමවිටම ගමනාන්ත පමණක් එකතු කරයි, එබැවින් LAN ඛණ්ඩයක් දේශීයව තබා ගැනීම යනු එම ඛණ්ඩය කිසිදා මාර්ග ලැයිස්තුවට ඇතුළු නොවන බවයි. ඒ වෙනුවට ඔබ එකතු කරන්නේ ඛණ්ඩයේ අනුපූරකයයි, සාමාන්ය උපසර්ග ලෙස ප්රකාශිතයි. කාර්යය ගණිතයකි, සහ එය අනාවැකි කළ හැකි ස්ථාන කිහිපයකදී අසාර්ථක වේ.
පහත පරීක්ෂණ අනුපිළිවෙලින් කරන්න. එක් එක් පරීක්ෂණය පෙර එක සත්ය වූ බව උපකල්පනය කරයි, එබැවින් පහළ රෝග ලක්ෂණ පැච් කිරීම වෙනුවට පළමු අසාර්ථකත්වයේදී නවත්වන්න.
උමං මාර්ගය ප්රකාශ කරන දෙයින් ආරම්භ කරන්න
0.0.0.0/0 addRoute() වෙත ලබා දීම Android-ට කියන්නේ සෑම IPv4 ගමනාන්තයක්ම උමං මාර්ගයට අයත් බවයි. එබැවින් බොහෝ සේවාලාභීන් බෙදුණු උමංකරණයට නොහැකි ලෙස පෙනේ: ඔවුන් සම්පූර්ණ ලිපින අවකාශය ඉල්ලා පසුව එයින් අඩු කිරීමට උත්සාහ කරයි. ගොඩනඟනයේ කිසිවක් අඩු නොකරයි. ඔබට දේශීයව තබා ගැනීමට අවශ්ය වූ ජාලය සඳහා වඩාත් නිශ්චිත මාර්ගය මිනිසුන් බලාපොරොත්තු වන දෙයට විරුද්ධ ලෙස ක්රියා කරයි, මන්ද දිගම ගැලපෙන උපසර්ගය ජය ගන්නා අතර එම ජාලය උමං මාර්ගය තුළට වැටේ.
මාර්ග ලැයිස්තුව සම්පූර්ණ ප්රතිපත්තියයි. එය පිටුපස ගමනාන්තයකට වීටෝවක් නැත, සහ Builder යොමුව එවැන්නක් සපයන කිසිදු ක්රමයක් ලැයිස්තුගත නොකරයි.
උපසර්ග ගණිතයෙන් අනුපූරකය ජනනය කරන්න
බැහැර කළ උපසර්ගයක අනුපූරකය යනු ලිපින ගසේ මූලයට යන මාර්ගයේ එහි සහෝදරයන්ගේ කුලකයයි. 1 සිට බැහැර කළ දිග දක්වා එක් එක් දිග සඳහා, ඔබේ උපසර්ගය අඩංගු එම දිගේ කොටස ගෙන, උපසර්ගයට පහළින්ම ඇති බිටුව පෙරළා ප්රතිඵලය නිකුත් කරන්න. ඔබ එය ධාවනය කරන තෙක් එය වියුක්ත ලෙස පෙනේ.
10.0.0.0/8 බැහැර කිරීමෙන් මාර්ග අටක් ලැබේ: 128.0.0.0/1, 64.0.0.0/2, 32.0.0.0/3, 16.0.0.0/4, 0.0.0.0/5, 12.0.0.0/6, 8.0.0.0/7, 11.0.0.0/8. ඒවායින් කිසිවක් 10.0.0.0/8 අඩංගු නොවේ, සහ එකට ඒවා අනෙක් සියල්ල ආවරණය කරයි.
පේළි අටක් ඕනෑම උපසර්ගයක් සඳහා එම ලැයිස්තුව ජනනය කරයි:
import ipaddress
def complement(addr, length):
base = int(ipaddress.IPv4Address(addr))
out = []
for k in range(1, length + 1):
block = base & (0xFFFFFFFF << (32 - k))
sibling = block ^ (1 << (32 - k))
out.append(f"{ipaddress.IPv4Address(sibling)}/{k}")
return out
print(complement("10.0.0.0", 8))
මාර්ග ගණන උපසර්ගයේ දිගට සමාන වන අතර එයම නිරීක්ෂණය කළ යුතු සංඛ්යාවයි. එක් /21 බැහැර කිරීමක් මාර්ග 21ක් වැය කරන අතර කියවිය හැකිව පවතී. බැහැර කිරීම් දහයක් සිය ගණනක් වැය විය හැක, එය සාමාන්යයෙන් අදහස් වන්නේ ජාල නිර්මාණය වෙනස් කළ යුතු බවයි, ජනකය නොවේ.
ලිපින පවුල සහ උමං මාර්ගයේ විෂය පථය පරීක්ෂා කරන්න
IPv4 මාර්ග IPv6 සඳහා කිසිවක් නොකරයි. උමං මාර්ගය IPv6 ලිපිනයක් ඉල්ලා සිටින්නේ නම්, IPv6 LAN උපසර්ගයකට එහිම අනුපූරකය අවශ්ය වේ, එය බිටු 128 මත එම ගණිතයෙන් ජනනය වේ. කඩදාසි මත බැහැර කිරීම ක්රියා කරන නමුත් දේශීය උපාංගය ළඟා විය නොහැකිව පවතින පොදු හේතුව මෙයයි: සත්කාරකයට IPv6 හරහා ළඟා විය, සහ කපා දැමුවේ IPv4 පමණි. ගණිතය වැරදියැයි නිගමනය කිරීමට පෙර පවුල් දෙකම පරීක්ෂා කරන්න.
විෂය පථය පරීක්ෂණයේ අනෙක් අඩකි. Android ජාලය අනුව සහ යෙදුම අනුව මාර්ගකරණය නිරීක්ෂණය කරයි, එබැවින් එකම උපසර්ගය එක් යෙදුමකට උමං මාර්ගය හරහා සහ තවත් එකකට සෘජුව යා හැක, VPN ප්රකාශ කළ ආකාරය මත රඳා පවතී.
DNS සහ එක් එක් යෙදුම් නීති නිවැරදි තැනට තබන්න
මාර්ග බැහැර කිරීම් විසඳනය වෙනස් නොකරයි. දේශීය සත්කාරක නාමයක් තවමත් උමං මාර්ගයේ DNS සේවාදායකය විසින් පිළිතුරු දිය හැකි අතර එහි ලිපිනය දේශීයව මාර්ගගත වේ, සහ නොගැලපීම LAN-ට ළඟා විය නොහැකි දෙයකට විසඳෙන නාමයක් ලෙස දිස්වේ. විසඳන ප්රතිපත්තිය හිතාමතා සකසන්න, සෙවුම් වසමක් හෝ බෙදුණු DNS නීතියක් සමඟ. මාර්ග ඔබ වෙනුවෙන් එය තීරණය කළ යැයි නොසිතන්න.
addDisallowedApplication() එක් යෙදුමක් උමං මාර්ගයෙන් පිටත තබයි; ඇතුළත රැඳෙන යෙදුම් සඳහා ගමනාන්තය පිටත නොතබයි. protect() ඔබ විවෘත කරන සොකටයට උමං මාර්ගය මඟ හැරීමට ඉඩ දෙයි, එසේ උමං මාර්ගයක් තමන්ගේම ප්රවාහනය අල්ලා ගැනීමෙන් වළකී. දෙකම අනුපූරකය ආදේශ නොකරයි.
ඔබේම ලැයිස්තුවෙන් නොව, සෙවුමකින් තහවුරු කරන්න
උමං මාර්ගය සක්රීය වූ පසු, ඔබ ගොඩනගා ඇති ලැයිස්තුව නැවත කියවීම වෙනුවට ලිපිනයක් සැබවින්ම යන්නේ කොහේදැයි උපාංගයෙන් අසන්න. iproute2 සමඟ එන ගොඩනැගීමක, adb shell ip route get 10.1.2.3 කර්නලය තෝරාගත් අතුරුමුහුණත නම් කරයි. එම විධානයම පොදු ලිපිනයක් සඳහා ධාවනය කර එය උමං මාර්ගය නම් කරන බව තහවුරු කරන්න.
තවත් පරීක්ෂණ දෙකක් චක්රය වසා දමයි. පළමුව දේශීය නාමයක් විසඳන්න, පසුව විසඳන ලද ලිපිනය මත adb shell ip route get ධාවනය කර උමං මාර්ගය නොවන අතුරුමුහුණතක් ඉල්ලා සිටින්න, මන්ද සාර්ථක adb shell ping -c 1 host.lan යනු ළඟා වීමේ හැකියාව මිස මාර්ගය නොවේ. උමං මාර්ගය එකක් ඉල්ලා සිටින්නේ නම් IPv6 මත ලිපින පවුල් පරීක්ෂණය නැවත කරන්න. ඔබ යවන API මට්ටමේ පරීක්ෂා කරන්න, මන්ද VPN ජාල මාර්ගකරණ වගුවට ඉදිරිපත් වන ආකාරය නිකුතු අතර වෙනස් වී ඇත. කඩදාසි මත නිවැරදිව පෙනෙන මාර්ග ලැයිස්තුවක් සහ වැරදි අතුරුමුහුණතක් තෝරන සෙවුමක් විවිධ දෝෂ වන අතර පරිශීලකයන් වෙත ළඟා වන්නේ දෙවැන්න පමණි.
බැහැර කිරීමේ ලැයිස්තුව දිගටම වර්ධනය වන්නේ නම්, මාර්ග ජනනය කිරීම නවත්වා දුරස්ථ ජාලය නැවත අංකනය කරන්න හෝ ඒ වෙනුවට උමං මාර්ගය පටු කරන්න. ජනකය අතුරුදහන් API සඳහා වූ මගක් මිස නිර්මාණ මෙවලමක් නොවේ.