Rarraba tunnel a cikin manhajar VpnService yana karyewa a wasu wurare na musamman, kuma gyaran kowanne ya bambanta. Abokin ciniki yana nuna manufa ɗaya da ta kasa kawai, don haka aikin farko shi ne sanin wace iyaka kake ci karo da ita: hanyoyin da builder ya samu, proxy ɗin da ba za ka iya tabbatarwa ba, resolver ɗin da ka sanar kawai, ko jerin manhajoji da dandamali ke amfani da shi ga kowane mai amfani. Shi ya sa nake riƙe bincike mai matakai huɗu. Yana tafiya bisa tsari na ƙasa kuma yana tsayawa a karon farko da ya kasa.

Tabbatar da abin da builder ya ba dandamali

VpnService.Builder jerin sanarwa ne. establish() yana mayar da ParcelFileDescriptor don interface ɗin zamani, kuma dandamali yana aika kawai zirga-zirgar da ta dace da prefixes na addAddress da addRoute zuwa wannan descriptor; addDnsServer yana gaya wa abokan ciniki wane resolver za su tambaya. Manufar da ke wajen kowane prefix da ka ƙara ba za ta taɓa isa manhajarka ba, komai abin da interface ɗin ya yi alkawari. Wannan gaskiya ɗaya tana bayanin yawancin rahotannin rarraba tunnel da ya lalace kafin a canza code.

Yi rikodin jerin adireshi, hanyoyi da DNS da builder ɗinka ya harhada, sannan ka kwatanta su da manufofin da suka kasa. Rashin /32 don host ɗin gudanarwa ya fi yawa fiye da tunnel ɗin da ya lalace. Idan jerin daidai ne, ci gaba; idan ba haka ba, sauran lissafin duba aikin banza ne.

excludeRoute yana nan ne kawai daga API 33

Warewa bisa manufa ita ce buƙatar da ta fi yawan zama zaren tallafi. builder.excludeRoute(IpPrefix) ya zo a API 33; kafin haka, hanyar da aka yarda da ita kawai ita ce ƙara hanyoyi ga komai banda prefix ɗin da aka ware, wato dole ne ka lissafta prefixes masu cikawa da kanka. Kira biyu ba hoton madubi ba ne: ɗaya yana cirewa daga saitin hanyoyin interface, ɗayan yana gina saitin daga sifili, kuma na'urar da ta tsufa za ta jefa ko ta yi watsi da kiran da ba ta sani ba. Yi reshe bisa Build.VERSION.SDK_INT kuma gwada hanyoyin biyu a kan kayan aiki na gaske.

Lokacin da kake lissafta masu cikawa, lura da daidaiton prefix. Warewar /24 cikin hanyar /16 tana buƙatar prefixes masu rufewa waɗanda suke bayanin saura da gaske, ba /8 mara kyau ɗaya ba. Yi rikodin jerin ƙarshe kuma tabbatar cewa host ɗin da aka ware har yanzu ana warware shi ta hanyar da ba ta cikin tunnel.

Ba za a iya bayyana bayanan shiga proxy ba

setHttpProxy(ProxyInfo) yana nuna interface ɗin ga proxy na HTTP ko SOCKS, kuma URL na PAC na iya zaɓar tsakanin su ga kowace manufa. ProxyInfo ko tsarin PAC ba sa ɗauke da sunan mai amfani da kalmar sirri, don haka proxy mai buƙatar tabbatarwa yana wajen API na dandamali. Manhajojin da suke buƙatarsa yawanci suna saka stack na sararin mai amfani, tun2socks ko injin makamancin haka, kuma suna amsa ƙalubalen 407 da kansu.

Wannan zaɓi yana da sakamako. Stack na sararin mai amfani yana ganin zirga-zirgar da ka tura masa kawai, don haka dole ya rayu cikin iyakar descriptor ɗaya, kuma yana gaji buƙatar protect() ɗaya don socket ɗin sa na sama. Ka bar protect() kuma tunnel ɗin yana kama jigilarsa, wanda ke bayyana a matsayin musafaha da ke tsayawa bayan fakiti na farko. Gwada da proxy da ke buƙatar bayanan shiga, domin buɗaɗɗen proxy yana wucewa a hanyar dandamali kuma ba ya tabbatar da komai.

Jerin manhajoji da DNS ma sanarwa ne

Builder yana da addAllowedApplication da addDisallowedApplication, kuma sun bambanta da juna: kiran duka biyu yana jefa keɓewa. Ko ta yaya, ana amfani da jerin ga kowane mai amfani a lokacin saita interface, don haka manhajar profile ɗin aiki tana ƙarƙashin tunnel ɗin profile ɗin aiki ba naka ba. Abin da babu API da zai ba ka shi ne iko kan shawarar wata manhaja: ba za ka iya tura fakiti cikin tunnel ɗinka daga waje ba, kuma ba za ka iya rufe ko sake saita VPN da ke aiki riga ba.

DNS yana bin irin wannan tsari. addDnsServer yana sanar da adireshin resolver; ba ya barin manhajarka ta amsa tambayoyi. Idan kana son warware sunaye da kanka, gudanar da resolver kuma ka tura adireshinsa cikin tunnel. Manhajojin da ke amfani da DoT ko DoH zuwa tsayayyen sunan host na iya tsallake adireshin da ka sanar, don haka ɗauki warware suna a matsayin ƙoƙari mafi kyau sai dai idan ka kama hanyar tambayar ma.

Manifest, always-on da gwajin matakai huɗu

Ana sanar da cancanta a cikin manifest: BIND_VPN_SERVICE, matatar intent ta android.net.VpnService da sabis na gaba idan tunnel ɗin dole ya rayu a bango. Always-on VPN kuma yana buƙatar onRevoke mai tsabta, domin tsarin yana kiransa lokacin da mai amfani ya canza saiti ko wata manhaja ta karɓi iko.

Gudanar da dubawa bisa tsari kuma ka tsaya a karon farko da ya kasa. Na farko, fitar da jerin adireshi, hanyoyi da DNS da aka ba builder. Na biyu, tabbatar establish() ya mayar da descriptor kuma an kare socket ɗin jigila. Na uku, nemi manufa ɗaya cikin prefix da aka haɗa da ɗaya cikin prefix da aka ware. Na huɗu, duba wane resolver ya amsa da gaske ta hanyar tambayar sunan host da resolver ɗinka kaɗai zai iya warwarewa.

Musafaha da ya kammala ba ya tabbatar da ɗaya daga cikin matakan da suka biyo baya. Kowace dubawa tana keɓe mataki ɗaya, don haka nasara a mataki na biyu ba ta ce komai game da na huɗu ba.

Bayanan VpnService.Builder yana lissafin dukan fuskar builder. Duk abin da kake buƙata bayan haka wani API ne, wata manhaja ce ko stack ɗinka na sararin mai amfani, kuma wannan shawara ce ta ƙira ba kuskuren rarraba tunnel ba.

Labarai masu alaƙa