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 версиясынын ишке ашырылышын бута кылыңыз жана анын жашоо циклин ага ээлик кылган компонент аркылуу кармаңыз. Платформанын чынжырларын тазалоо же жогорку артыкчылыктагы эрежени киргизүү диагностиканы экинчи тармак менеджерине айландырат, ал эми телефон ошого жараша жүрүм-турум кылат.

Тектеш макалалар