Njia iliyoongezwa kwenye jedwali main kwenye Android inaonekana sahihi katika kila orodha na bado haibebi trafiki. Sababu ni kwamba jedwali main ni chaguo moja kati ya kadhaa, na haliulizwi kwanza. Huduma ya mtandao ya Android hujenga kanuni za sera zinazochagua jedwali la uelekezaji kwa kutumia taarifa ambazo anwani ya lengo haina — uid ya programu, alama kwenye pakiti, kiolesura ilikotokea — na utafutaji wa lengo hufanyika baadaye, ndani ya jedwali ambalo kanuni hizo zilichagua.

Maamuzi matatu kwa mpangilio maalum

Pakiti inayotoka hufanya maamuzi matatu tofauti. Kwanza, kanuni ya sera huamua ni jedwali gani la uelekezaji linalotumika. Pili, njia ndani ya jedwali hilo huamua hatua inayofuata na kiolesura cha kutoka. Tatu, ndoano za netfilter huamua kama pakiti itaendelea kuishi, itabadilishwa au itaelekezwa upya.

Mpangilio ni muhimu kwa sababu kila hatua inaweza kujibu swali lake pekee. Kanuni ya firewall inayokubali pakiti haichagui jedwali, na njia iliyoongezwa kwenye jedwali ambalo hakuna kanuni inayolichagua ni batili. Mkanganyiko mwingi kuhusu VPN za Android unatokana na kurekebisha moja kati ya matatu na kutoona mabadiliko, kwa sababu hitilafu ilikuwa kwenye lingine.

StageSelectorWhat it cannot decide
Policy ruleuid range, mark, incoming interfaceWhich route exists inside the table
Route lookupDestination prefix, longest matchWhether the packet is allowed out
Netfilter hookChain position, match conditionsWhich table was selected

Alama ni sehemu iliyofungwa, si lebo unayomiliki

Android hufunga mambo kadhaa katika thamani moja ya alama: mtandao upi ulichaguliwa, kama programu ilichagua mtandao kwa uwazi, kama soketi inalindwa dhidi ya VPN, na biti zinazohusiana na ruhusa. Kichwa cha fwmark cha AOSP hufafanua mpangilio huo kwa mti wa sasa, na mpangilio ni jambo la ndani la jukwaa linalobadilika kati ya matoleo.

Ndiyo sababu kwenye Android ni hatari kuandika thamani kamili ya alama kwa iptables -j MARK --set-mark. Haiweki lebo; inabadilisha uchaguzi wa mtandao ambao mfumo umekwisha ufanya. Pakiti kisha hulingana na kanuni nyingine, jambo ambalo linaweza kuonekana kama VPN imeanza kufanya kazi, au kama programu isiyohusiana imepoteza muunganisho, kulingana na biti zilizoandikwa juu.

Ikiwa lazima ugusa alama, kwanza soma thamani ya sasa na tumia kifuniko ili biti tu unazozielewa zibadilishwe:

ip rule show
ip route show table all | head -40
ip route get 10.20.4.11

Alama ya muunganisho ni kitu tofauti na alama ya pakiti, na hakuna hata moja iliyo njia. Kurejesha alama kwenye pakiti za jibu ni hatua tofauti na kuchagua jedwali wakati wa kutoka, ndiyo sababu marekebisho ya upande mmoja huzalisha muunganisho unaofunguka kisha kuning'inia.

Nani anamiliki kanuni na majedwali

Huduma ya mtandao ya Android, netd, huunda kanuni na majedwali kwa kila mtandao. AOSP RouteController ni mahali ambapo kanuni hizo hukusanywa kwa VPN, mitandao halisi na safu za uid, na mzunguko wake wa maisha umeunganishwa na matukio ya mtandao badala ya faili ya usanidi.

Matokeo mawili yanafuata. Kwanza, vipaumbele na namba za jedwali unazopata kwenye kifaa kimoja ni maelezo ya ndani ya ujenzi, si kiolesura: namba zinazoonekana sawa kwenye toleo lingine la Android zinaweza kumaanisha kitu tofauti kabisa. Pili, hali hujengwa upya mitandao inapobadilika, kwa hiyo kanuni iliyoingizwa leo kutoka root shell inaweza kuwa imetoweka baada ya mabadiliko ya Wi-Fi yanayofuata.

Kutoweka huko huripotiwa mara nyingi kama mfumo unapuuza njia. Kilichotokea kweli ni kwamba kanuni iliyochagua jedwali haipo tena, na njia ndani ya jedwali sasa haifikiki kwa mtazamo wa pakiti. Angalia orodha ya kanuni, si orodha ya njia, pale usanidi uliofanya kazi unapokoma kufanya kazi baada ya kuunganishwa upya.

Maswali ya mpangilio wa ndoano hayana jibu la jumla

Swali la kama iptables huendesha kabla ya uelekezaji wa VPN haliwezi kujibiwa bila kutaja njia ya pakiti. Pakiti iliyoundwa ndani hupitia ndoano ya output, ambapo mabadiliko ya alama huanzisha ukaguzi wa uelekezaji upya — utafutaji wa pili, si uhariri wa nyuma wa ule wa kwanza. Pakiti inayokuja kutoka mteja wa tether hupitia njia ya prerouting na husambazwa mbele badala yake, na minyororo inayoiona ni tofauti.

Kwa hiyo kanuni hiyo hiyo inaweza kuwa na ufanisi kwa trafiki ya programu na isionekane kwa trafiki ya tether, na kihesabu kinachobaki sifuri kinakuambia pakiti ilichukua njia ipi, si kama kanuni ni mbaya. Tumia vihesabu kuthibitisha njia kabla ya kubadilisha sharti lolote la ulinganishaji.

Hii pia ni hatua ambapo hitilafu ya uelekezaji wa sera inakuwa ngumu kuona. Uelekezaji kwenda kwenye jedwali lililopo lakini lisilo na lengo huzalisha mtandao usiofikika unaoonekana kama kudondosha kwa firewall, wakati kudondosha kwa firewall huzalisha muda wa kumalizika unaoonekana kama shimo jeusi la uelekezaji.

Chunguza ndani ya mfumo, au uache

Kwa mapitio yaliyoidhinishwa, thibitisha mambo manne kabla ya kugusa chochote: uid na wasifu wa programu, mtandao ambao Android ilichagua kwa ajili yake, kama VPN inaijumuisha kabisa programu hiyo, na kama tatizo lipo kwa familia zote mbili za anwani. Kutenga kwa kila programu kunaeleza ripoti nyingi za VPN haifanyi kazi bila hitilafu yoyote ya uelekezaji.

Kisha soma kanuni, vifuniko na majedwali yaliyo katika nguvu kweli, na uweke mabadiliko ya mtandao ndani ya dirisha la uangalizi. Ikiwa tabia inabadilika katika kuunganishwa upya, unaangalia mzunguko wa maisha unaosimamiwa, si njia inayokosekana.

Kwa mahitaji ya kawaida, tumia vidhibiti vinavyotumika: kujumuisha na kutenga kwa kila programu katika programu ya VPN, na uchaguzi wa mtandao wa jukwaa lenyewe kwa kila kitu kinachohitaji njia mahususi. Ikiwa muunganisho wenye upendeleo unapaswa kushirikiana kweli na mashine ya uelekezaji, lenga utekelezaji wa toleo kamili la Android unaloliunga mkono na uendeleze mzunguko wake wa maisha kupitia sehemu inayomiliki. Kufuta minyororo ya jukwaa au kuingiza kanuni ya kipaumbele cha juu hugeuza utambuzi kuwa meneja wa pili wa mtandao, na simu itatenda ipasavyo.

Makala zinazohusiana