د 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 لپاره یوه لار ده، د ډیزاین وسیله نه ده.

اړوندې مقالې