Android always-on VPN: එන්ඩ්පොයින්ට් නාමය මුලින්ම විසඳෙන ආකාරය
ටනෙල් පවතින්නට පෙරම Android රථවාහනය අවහිර කරයි, නමුත් සේවාදායකය තම එන්ඩ්පොයින්ට් එක විසඳිය යුතුය. මෙන්න අනුපිළිවෙල සහ එය සිරවන තැන.
දුරකථනය නැවත ඇරඹෙනවා, always-on සක්රීයයි, «VPN නොමැතිව සම්බන්ධතා අවහිර කරන්න» සක්රීයයි, නමුත් ටනෙල් කිසිදා එන්නේ නැහැ. කිසිවක් වැරදි ලෙස වින්යාස කර නැහැ: අවහිරය තම කාර්යය කරනවා, සහ සේවාදායකයාගේම තම එන්ඩ්පොයින්ට් එකට ළඟා වීමේ උත්සාහය ද ඊට යටත් වෙනවා. එන්ඩ්පොයින්ට් නාමය ටනෙල් පවතින්නට පෙර විසඳිය යුතුයි, අනෙක් සියලුම යෙදුම්වලට අවසර නැති අතරේ ජාලය සමඟ කතා කිරීමට අවසර ඇති සේවාදායකයක් විසින්. කුමන සංරචකය මෙය කරන්නේද සහ කුමන අනුපිළිවෙලකටද යන්න තේරුම් ගැනීම මෙම අභිරහස වින්යාස ප්රශ්නයක් බවට හරවයි.
VPN ගොඩනැගිල්ල සැබවින්ම ඉල්ලා සිටින්නේ කුමක්ද
Android VPN යෙදුම වේදිකාවට සේවාදායක ලිපිනයක් ලබා නොදේ. එය දේශීය අතුරුමුහුණතක් ගොඩනඟයි: ටනෙල් සඳහා ලිපින සහ මාර්ග, එහි ඇතුළත යෙදුම් භාවිත කළ යුතු විසඳන්නන්, පසුව establish() ගොනු විස්තරකයක් ආපසු දේ, එය යෙදුම අමු IP පැකට් ලෙස කියවා ලියයි. දුරස්ථ එන්ඩ්පොයින්ට් එක එම ගොඩනැගිල්ලේ කිසිසේත් නොපෙනේ.
මෙය ප්රධාන ව්යුහාත්මක කරුණයි. වේදිකාව tun අතුරුමුහුණතක් සාදා එය මත ප්රතිපත්තිය ක්රියාත්මක කරයි; යෙදුම පරිශීලක අවකාශයේ ප්රවාහනය ක්රියාත්මක කරයි, එනම් එන්ඩ්පොයින්ට් නාමය විසඳන්නේත් සංකේතනය කළ සම්බන්ධතාව විවෘත කරන්නේත් යෙදුමමයි. එබැවින් සත්කාරක නාමයක් ලෙස එන්ඩ්පොයින්ට් එකක් හැකි ය — වේදිකාව නාම සඳහා සහාය දක්වන නිසා නොව, වේදිකාව කිසිදා එන්ඩ්පොයින්ට් එක නොදකින නිසා.
ගොඩනැගිල්ලේ එක් ක්ෂේත්රයක් ලිපින ගනී: DNS සේවාදායක. ඒවා සංඛ්යාත්මක විසඳන්නන්ගේ ලිපින විය යුතුයි, සාමාන්යයෙන් ක්රියාකරුට ටනෙල් හරහා විමසීමට අවශ්ය ඒවා. එම ක්ෂේත්රය ටනෙල් ඉහළ ගිය පසු යෙදුම් විමසුම් යවන තැන විස්තර කරයි. සේවාදායකය තම එන්ඩ්පොයින්ට් එක සොයා ගන්නා ආකාරය ගැන එය කිසිවක් නොකියයි, සහ මේ දෙකම එකම සැකසුම ලෙස සැලකීමෙන්ම ව්යාකූලත්වය ආරම්භ වේ.
එකක් නොව, DNS ප්රශ්න දෙකක්
පළමු ප්රශ්නය: ටනෙල් ඉහළ ගිය පසු යෙදුම් විමසුම් යවන්නේ කොහෙටද? පිළිතුර ටනෙල් තුළ ඇති විසඳන්නෙකුගේ ලිපිනයයි, tun අතුරුමුහුණත හරහා ළඟා විය හැකි, සහ ගොඩනැගීම අනුව සංඛ්යාත්මකයි.
දෙවන ප්රශ්නය: එම ටනෙල් පවතින්නට පෙර සේවාදායකය තමන්ගේම එන්ඩ්පොයින්ට් එක සොයා ගන්නේ කෙසේද? එම සෙවීම සිදුවන්නේ ටනෙල්වලින් පිටත, මූලික ජාලයේ, සේවාදායකයේ ක්රියාවලිය තුළයි. එය නාමයක් භාවිත කළ හැක, සහ VPN නොමැතිව උපාංගයට ළඟා විය හැකි විසඳන්නෙකු භාවිත කළ යුතුය.
| Stage | Who resolves | Path | Failure looks like |
|---|---|---|---|
| Endpoint lookup | The VPN app | Underlying network, protected socket | Never connects; no tunnel interface traffic |
| Peer authentication | Client and server | Tunnel transport | Connects then drops; certificate or key error |
| Private name lookup | Apps via the tunnel | Resolver inside the tun | Tunnel up, internal sites do not resolve |
අදියර තුනක්, වෙනස් රෝග ලක්ෂණ තුනක්. «සම්බන්ධ විය නොහැක» යනුවෙන් කියන එකම දෝෂ පණිවිඩය ඒවා එකට එකතු කරයි, ඒ නිසාම එම ක්ෂේත්රය කියවීමටත් පෙර සිදුවන ගැටලුවක් නිවැරදි කිරීමට මිනිසුන් DNS සේවාදායක ක්ෂේත්රය සංස්කරණය කිරීමට පටන් ගනී.
bootstrap සිරවිය හැක්කේ ඇයි
always-on සක්රීය අවහිරය සමඟ යනු VPN තුළ නොමැති රථවාහන ඉවත දැමීමයි, VPN හිමි යෙදුමේ රථවාහනද ඇතුළුව. පිටවීම පැහැදිලියි: යෙදුම සොකට් එකක protect() අමතයි, එය එය මූලික ජාලයට බැඳ තබයි, එබැවින් එය ටනෙල් මඟ හැර පිටවීමට අවසර ලබයි. සෑම VPN සේවාදායකයක්ම තම ප්රවාහනය සඳහා මෙය කළ යුතුය, එසේ නොමැති නම් කිසිදා සේවාදායකයකට ළඟා නොවේ.
දැන් එන්ඩ්පොයින්ට් නාමය දන්නා එකම විසඳන්නාම ටනෙල් තුළ පවතින යෙදවීමක් සලකන්න. නාමය විසඳීමට සේවාදායකයාට ටනෙල් අවශ්යයි, ටනෙල් ගොඩනැගීමට නාමය අවශ්යයි. මෙය සැබෑ චක්රීය යැපීමකි, සහ කිසිදු සේවාදායක වින්යාසයක් එය විසඳන්නේ නැත. මෙය නිර්මාණ දෝෂයකි, දෝෂයක් නොවේ.
කාලය එම යැපීමම මෘදු ආකාරවලින් හෙළි කරයි. ඇරඹුමේදී, පළමු අගුළු ඇරීමට පෙර, උපාංගයට තවම භාවිතයට ගත හැකි ජාලයක් නොතිබිය හැක; captive portal එකක ජාලය ඇතත් පෝටලය හැර අනෙක් සියල්ල අවහිර කරයි; Wi-Fi සිට ජංගම දුරකථනයට මාරු වන විට ආරක්ෂිත සොකටයේ මූලික ජාලය වෙනස් වන අතර සේවාදායකය එය දැනගෙන නැවත විසඳිය යුතුය. මේ සෑම එකක්ම bootstrap සිදුවීමකි, සහ සෑම එකක්ම රාත්රී 3 ට සොයා ගැනීමට වඩා හිතාමතා පරීක්ෂා කිරීම වටී.
පිළිතුර ස්ථිර කිරීම විසඳුමක් නොවන්නේ ඇයි
පෙළඹවීමක් ඇති මඟ හැරීම නම් නාමය එක් වරක් විසඳා ලැබුණු ලිපිනය සංඛ්යාත්මක ක්ෂේත්රයකට අලවා තැබීම, හෝ එය අභිරුචි ගොඩනැගීමක තදින් කේතනය කිරීමයි. එය ක්රියා කරන බව පෙනේ, සහ නාමයක් ඡායාරූපයක් බවට හරවයි. ක්රියාකරු එන්ඩ්පොයින්ට් එක ගෙන යන විට — සංක්රමණයක්, anycast වෙනසක්, නව කලාපීය ලිපිනයක් — සේවාදායකය දිගටම පැරණි එකට අමතන අතර UI තුළ කිසිවක් ඊට හේතුව පැහැදිලි නොකරයි.
DNS වාර්තාවල ජීව කාලයක් ඇත්තේ පිළිතුරු වෙනස් විය හැකි නිසාමය; හැඹිලිකරණය එම කාලය අනුව අර්ථ දැක්වේ, සදාකාලිකව නොවේ. පිළිතුරක් ස්ථිර කිරීම නාමයක් ලිපිනයකට වඩා හොඳ කරන යාන්ත්රණය ඉවත දමන අතර, නාමයක් භාවිත කළ නිසා ඇති මෙහෙයුම් වියදම රඳවා ගනී.
ස්ථිර කිරීම සාමාන්යයෙන් දෙවන නරක පුරුද්දක් සමඟ එයි: සම්බන්ධතාව දැන් වෙනස් ලෙස අසාර්ථක වන නිසා අනන්යතා පරීක්ෂාව ලිහිල් කිරීම. සේවාදායක අනන්යතා සත්යාපනය bootstrap ගැටලුවේ කොටසක් නොවේ, සහ එය දුර්වල කිරීම DNS අපහසුවක් අල්ලා ගැනීමේ අවදානමකට මාරු කරයි.
නැවත ඇරඹීමකට ඔරොත්තු දෙන නිර්මාණ
දිගුකාලීන සැකැස්ම ආකර්ෂණීය නොවේ. ආරක්ෂිත සොකට් නිවැරදිව ක්රියාත්මක කරන සහ තම එන්ඩ්පොයින්ට් එක මූලික ජාලයේ විසඳන සේවාදායකයක් භාවිත කරන්න, සහ එයට ප්රසිද්ධියේ හෝ ටනෙල්ට පෙර ළඟා විය හැකි විසඳන්නෙකු හරහා විසඳෙන එන්ඩ්පොයින්ට් නාමයක් දෙන්න. අවහිරය සක්රීයව තබන්න; DNS ක්රියා කිරීමට එය සම්පූර්ණයෙන් අක්රීය කිරීම යෙදවීම පවතින ගුණාංගය ඉවත් කරයි.
එන්ඩ්පොයින්ට් එක පෞද්ගලිකව තැබිය යුතු තැන, වේදිකාවට භාවිත කළ හැකි පැහැදිලි bootstrap මාර්ගයක් සපයන්න — ටනෙල් නොමැතිව ළඟා විය හැකි විසඳන්නෙක්, හෝ ක්රියාකරු නඩත්තු කරන කළමනාකරණ සම්බන්ධතාවක් — සහ එම ව්යතිරේකය පටුව තබන්න, පරිශීලක ටොගලයට නොව ප්රතිපත්තියට හිමි කරන්න. Android VpnService ලේඛනය ආරක්ෂණය සහ ජීවන චක්රය ගැන වේදිකාව සහතික කරන දේ සඳහා යොමුවයි, සහ VpnService.Builder යොමුව DNS ක්ෂේත්රය සංඛ්යාත්මක ලිපින ගන්නා බව තහවුරු කරයි.
පසුව නැවත ඇරඹීමෙන් පසු නව සම්බන්ධතාවක අදියර තුන අනුපිළිවෙලින් තහවුරු කරන්න: එන්ඩ්පොයින්ට් නාමය විසඳේ, ටනෙල් ස්ථාපිත වී සහකරු සත්යාපනය වේ, සහ පෞද්ගලික නාමයක් ටනෙල්හි විසඳන්නා හරහා විසඳේ. පළමු අදියර අසාර්ථක නම් පසුව කිසිවක් ක්රියා කළ නොහැක, සහ නිවැරදි කිරීම bootstrap මාර්ගයට අයත් වේ — කිසිදා විසඳන්නාගේ ක්ෂේත්රයට නොවේ.
- එන්ඩ්පොයින්ට් විසඳීම සිදුවන්නේ යෙදුම තුළ, ටනෙල්වලින් පිටත, ආරක්ෂිත සොකටයකයි.
- ගොඩනැගිල්ලේ DNS ක්ෂේත්රය ටනෙල් තුළ යෙදුම් සඳහාය, සේවාදායකයේ තම එන්ඩ්පොයින්ට් එක සඳහා නොවේ.
- ටනෙල් හරහා පමණක් ළඟා විය හැකි විසඳන්නෙක් යනු සිරවීමකි, මන්දගාමී ආරම්භයක් නොවේ.
- නැවත ඇරඹීමෙන් පසු එන්ඩ්පොයින්ට්, සත්යාපනය සහ පෞද්ගලික සෙවීම වෙන වෙනම පරීක්ෂා කරන්න.