دوه لارې کولی شي د Android اپلیکیشن مخې ته د IP انټرفېس وګرځوي، او دواړه د فایل ډیسکریپټر ورته ډول ته رسېږي چې مالکان یې ډېر توپیر لري۔ یوه د VpnService او د هغې د builder له لارې تږي، بله د root shell او /dev/net/tun له لارې۔ په دغه ډیسکریپټر باندې هر لوستل وتونکی پاکټ دی او هر لیکل راتلونکی۔ لارې جلا کوونکی دا دی چې پالیسي د چا په لاس کې ده، OS اپډیټ څوک له سره تېرېږي، او د روټینګ جدول څومره ته لاس ورکولی شې۔

د پلیټفورم لاره غوره کړه، پرته له دې چې هغه ځانګړی شی ونوموې چې د کولو له کولو انکار کوي۔ هغه انکار معمولاً TAP، د خپل اپ سیټ څخه بهر نیول، یا د روټینګ قاعده ده چې چوکاټ یې هېڅکله نه ښکاره کوي۔

د پلیټفورم په لاره کې تته د لارښوونو پر ځای نیت اعلانوې۔ لږ تر لږه یوه پته، غوښتل شوي روټونه، DNS سرورونه او اختیاري اپ لړلیک ورکوې، بیا د Android سیسټم خدمت خپل هویت ته تر لاندې امتیازي ترتیب ترسره کوي۔ ته د انټرفېس نوم مخکې نه پوهېږې او هغه ioctl چې جوړوي یې هېڅکله نه باسې، او همدا خبره ده۔

د IP انټرفېس ترلاسه کولو دوه لارې

د root لاره زوړ ترکیب دی۔ /dev/net/tun پرانیزې، TUNSETIFF د IFF_TUN سره غواړې، انټرفېس د 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() پایله د لرې غونډې حالت څخه جلا ثبت کړه، او په هر لوري کې یو پاکټ تایید کړه۔ یوازې بیا پرېکړه وکړه چې د وتلي وړتیا له امله د ملاتړ شوې لارې پرېښودل سم دي که نه۔

اړوندې مقالې