Android-та main кестесіне қосылған маршрут әр тізімде дұрыс көрінеді және соған қарамастан трафикті тасымалдамайды. Себебі main кестесі бірнеше нұсқаның бірі ғана, және оған бірінші кезекте жүгінбейді. Android-тың желілік қызметі маршруттау кестесін межелі мекенжайдың құрамында жоқ ақпаратпен таңдайтын саясат ережелерін құрады — қосымшаның uid-і, пакеттегі таңба, пакет келген интерфейс — ал межелі мекенжайды іздеу содан кейін, сол ережелер таңдаған кестенің ішінде жүреді.

Тұрақты ретпен үш шешім

Сыртқа шығатын пакет үш бөлек шешім қабылдайды. Біріншіден, саясат ережесі қай маршруттау кестесінің қолданылатынын анықтайды. Екіншіден, сол кестенің ішіндегі маршрут келесі секірісті және шығыс интерфейсті анықтайды. Үшіншіден, netfilter ілгектері пакеттің өмір сүретінін, өзгеретінін немесе басқа жаққа бағытталатынын шешеді.

Рет маңызды, өйткені әр кезең тек өз сұрағына жауап бере алады. Пакетті қабылдайтын firewall ережесі кесте таңдамайды, ал ешбір ереже таңдамайтын кестеге қосылған маршрут әрекетсіз болып қалады. Android VPN-тері айналасындағы шатасудың көбі үшеуінің біреуін түзеп, өзгеріс көрмеуден туындайды, өйткені ақау басқасында болған.

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

Таңбалар — қапталған өріс, өзіңізге тиесілі жапсырма емес

Android бірнеше деректі бір таңба мәніне қаптайды: қай желі таңдалды, қосымша желіні анық таңдады ма, сокет VPN-нен қорғалған ба және рұқсаттарға қатысты биттер. AOSP-тың fwmark тақырыбы ағымдағы ағаш үшін сол орналасуды анықтайды, ал орны платформаның ішкі бөлшегі және шығарылымдар арасында өзгереді.

Сондықтан Android-та бүкіл таңба мәнін iptables -j MARK --set-mark арқылы жазу қауіпті. Ол тег қоспайды; жүйе жасап қойған желі таңдауын алмастырады. Содан кейін пакет басқа ережелерге сәйкес келеді, бұл қай биттер қайта жазылғанына байланысты VPN жұмыс істей бастағандай немесе байланысы жоқ қосымша байланысын жоғалтқандай көрінуі мүмкін.

Егер таңбаларға қол тигізу қажет болса, алдымен ағымдағы мәнді оқып, өзіңіз түсінетін биттер ғана өзгеретіндей маска қолданыңыз:

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

Қосылым таңбасы пакет таңбасынан бөлек нысан, және екеуі де маршрут емес. Жауап пакеттерінде таңбаны қалпына келтіру шығыс кезінде кесте таңдаудан бөлек қадам, сондықтан бір бағытты түзетулер ашылып, кейін ілініп қалатын қосылымдар туғызады.

Ережелер мен кестелер кімге тиесілі

Android-тың желілік қызметі netd ережелер мен әр желіге арналған кестелерді жасайды. AOSP RouteController VPN-тер, физикалық желілер және uid ауқымдары үшін сол ережелер жиналатын орын, және оның өмірлік циклі конфигурация файлына емес, желілік оқиғаларға байланысты.

Екі салдар туындайды. Біріншіден, бір құрылғыда тапқан басымдықтар мен кесте нөмірлері құрастырудың ішкі бөлшектері, интерфейс емес: басқа Android нұсқасында бірдей көрінетін нөмірлер мүлде басқа мағына беруі мүмкін. Екіншіден, желілер өзгергенде күй қайта құрылады, сондықтан бүгін root shell-ден қосылған ереже келесі Wi-Fi ауысуынан кейін жойылып кетуі мүмкін.

Бұл жоғалуды жиі жүйе маршрутты елемейді деп хабарлайды. Шын мәнінде кестені таңдаған ереже енді жоқ, ал кесте ішіндегі маршрут қазір пакет тұрғысынан қолжетімсіз. Жұмыс істеп тұрған конфигурация қайта қосылғаннан кейін істемей қалғанда, маршруттар тізімін емес, ережелер тізімін тексеріңіз.

Ілгектер реті туралы сұрақтардың жалпы жауабы жоқ

iptables VPN маршруттауынан бұрын жұмыс істей ме деген сұраққа пакеттің жолын атамай жауап беру мүмкін емес. Жергілікті құрылған пакет output ілгегі арқылы өтеді, онда таңбаның өзгеруі қайта маршруттау тексерісін тудырады — бұл екінші іздеу, біріншісін кейіннен өңдеу емес. tether арқылы қосылған клиенттен келген пакет prerouting жолымен жүреді және оның орнына жіберіледі, ал оны көретін тізбектер басқа.

Сондықтан бір ереже қосымша трафигі үшін тиімді, ал tether трафигі үшін көрінбейтін болуы мүмкін, және нөлде қалатын санағыш пакеттің қай жолмен жүргенін айтады, ереженің қате екенін емес. Кез келген сәйкестік шартын өзгертудің алдында санағыштармен жолды анықтаңыз.

Бұл саясаттық маршруттау қатесі байқауға қиын болатын кезең де. Бар, бірақ межелі мекенжайы жоқ кестеге маршруттау желі қолжетімсіз қатесін береді, ол firewall-дың тастауына ұқсайды, ал firewall-дың тастауы маршруттау қара құрдымына ұқсайтын уақыт аяқталуын береді.

Жүйенің ішінде диагностика жасаңыз, немесе оған тиіспеңіз

Рұқсат етілген тексеру үшін бірдеңеге қол тигізбес бұрын төрт деректі анықтаңыз: қосымшаның uid-і мен профилі, Android оған таңдаған желі, VPN сол қосымшаны жалпы қамти ма, және мәселе екі мекенжай отбасында да бар ма. Қосымша бойынша шығару ешқандай маршруттау ақауы жоқ VPN жұмыс істемейді хабарламаларының көбін түсіндіреді.

Содан кейін нақты күшіндегі ережелерді, маскаларды және кестелерді оқыңыз, және желі ауысуын бақылау терезесінің ішінде ұстаңыз. Егер мінез-құлық қайта қосылу барысында өзгерсе, сіз басқарылатын өмірлік циклді көріп отырсыз, жоқ маршрутты емес.

Қарапайым талаптар үшін қолдау көрсетілетін басқару құралдарын пайдаланыңыз: қосымша бойынша қосу және шығару VPN қосымшасында, және белгілі бір жол қажет нәрсенің бәрі үшін платформаның өз желі таңдауын. Егер артықшылықты интеграция шынымен маршруттау механизмімен ынтымақтасуға тиіс болса, сіз қолдайтын дәл сол Android нұсқасының іске асырылуын нысанаға алыңыз және оның өмірлік циклін оған иелік ететін компонент арқылы ұстаңыз. Платформа тізбектерін тазарту немесе жоғары басымдықты ереже қою диагностиканы екінші желі менеджеріне айналдырады, ал телефон соған сәйкес әрекет етеді.

Қатысты мақалалар