Tasker және WireGuard: бір туннель үшін дұрыс Intent жіберу
Tasker қашықтан басқару қабылдағышы арқылы WireGuard-тан бір аталған туннельді көтеруді сұрай алады. Басқарушыға әлі де CONTROL_TUNNELS рұқсаты қажет.
WireGuard әрекетін іске қосу қолданбаны алдыңғы жоспарға шығарады, ал нақты туннельді көтермейді. Қолданбаны ашып, күтетін автоматтандыру сынақтан өтеді де, телефон үй экранында отырған алғашқы сәтте сәтсіз аяқталады. WireGuard аталған туннельдер үшін қолдау көрсетілген қашықтан басқару жолын ұсынады және ол көптеген рецепттер ұсынғаннан тарырақ. Төмендегі тексеру тізімі осы жолды рұқсаттан байқалған нәтижеге дейін жүреді.
Қашықтан басқару қосылғанын тексеріңіз
Қашықтан басқару қабылдағышы әрдайым тыңдай бермейді. WireGuard параметрлерінде туннельдерді қашықтан басқаруды қосатын опция бар және ол қосылмайынша, қабылдағыш қатты дауыспен сәтсіз болудың орнына сұраныстарды елемейді. Әдепкі мән әдейі солай, өйткені туннельдерді көтере алатын экспортталған қабылдағыш қолданба орнатылған әрбір құрылғыда қауіпсіздік тесігі болар еді. Оны интерфейс арқылы қосыңыз және жасағаныңызды жазып қойыңыз, өйткені бұл болашақ пайдаланушы неге тәуелді екенін білмей-ақ өшіре алатын параметр.
Жоғарыдағы қабылдағыш тек аталған UP және DOWN сұраныстарын өңдейді, сондықтан мұнда туннель жасауға немесе оның конфигурациясын өңдеуге жол жоқ. Оған сүйенбес бұрын компоненттің орнатылған құрастырылымда бар екенін растаңыз: adb shell dumpsys package com.wireguard.android | grep -i receiver мәлімделген қабылдағыштарды тізімдейді, ал қашықтан басқару қабылдағышы жоқ құрастырылым ешқашан жауап бермейді. Егер жұмыс ағынына басқа соңғы нүкте немесе басқа серіктес керек болса, бұл басқа туннель және қолданбаның ішіндегі бөлек қолмен баптау.
Басқарушының қандай рұқсаты бар екенін тексеріңіз
WireGuard қабылдағышты қауіпті рұқсатпен қорғайды, com.wireguard.android.permission.CONTROL_TUNNELS, ол басқарушы қолданбада болуы керек. Жеке хабар тарату жіберуші ешқашан мәлімдемеген немесе оған ешқашан берілмеген рұқсатты жасай алмайды. Бұл автоматтандыру рецепттері автоматтандыруда жоқ мүмкіндікті үнсіз болжап отыратын қадам.
Тапсырманы жазбас бұрын екі жақты тексеріңіз. Бірінші пәрмен мәлімделген рұқсатты тізімдейді, ал екіншісі басқарушының бумасында оның шынымен бар-жоғын көрсетеді. Рұқсатты манифестінде мәлімдеген, бірақ орындалу кезінде ешқашан алмаған басқарушы бәрібір сәтсіз аяқталады және сәтсіздік диалог ретінде емес, үнсіздік ретінде келеді.
adb shell pm list permissions -g -d | grep -i control_tunnels
adb shell dumpsys package net.dinglisch.android.taskerm | grep -i control_tunnels
Егер басқарушыда рұқсат жоқ болса, хабар таратуды қолмен құрастырудың орнына қолданба шынымен қолдайтын интеграцияны пайдаланыңыз. Intent жіберіп, шақырудың сәтті болғанын көру тек Android оны қабылдағанын дәлелдейді, WireGuard оған сай әрекет еткенін емес. Тексерілмеген жіберуді белгісіз деп қабылдаңыз, табыс деп емес.
Intent өрістерін орнатылған қолданбамен салыстырыңыз
Төрт өріс бүкіл сұранысты тасымалдайды және әрқайсысының басқаларға дәл ұқсайтын сәтсіздік тәсілі бар. Әрекетті, туннельдің қосымша өрісін, буманы және мақсатты бір жиын ретінде дұрыс алыңыз.
Action: com.wireguard.android.action.SET_TUNNEL_UP
Extra: tunnel:lab-wg
Package: com.wireguard.android
Target: Broadcast Receiver
Әрекет UP немесе DOWN деп атайды, басқа ештеңе емес, қосымша өріс дәл конфигурацияланған туннель атауын тасымалдайды, бума жеткізуді WireGuard-қа шектейді, ал мақсат әрекет емес, қабылдағыш болуы керек. Жазу қатесі бар туннель атауы өшірілген қабылдағыш сияқты үнсіздік тудырады, сондықтан автоматтандыру бұзылды деп қорытынды жасамас бұрын атауды қолданбадан оқыңыз. DOWN әрекеті сол қосымша өріс пен бумамен com.wireguard.android.action.SET_TUNNEL_DOWN. Сынақ кезінде бір уақытта бір сұраныс жіберіңіз, өйткені бірін-бірі қуып жететін екі хабар тарату ешкім жатқыза алмайтын күй тудырады.
Сол сұранысты құрылғыдағы shell-ден сынап көріңіз, Intent-ті автоматтандырудан ажырату үшін. Егер сол пәрмен сәтсіз болып, Tasker тапсырмасы сәтті болса, айырмашылық өрістердің мәні емес, жіберушінің рұқсаты.
adb shell am broadcast -a com.wireguard.android.action.SET_TUNNEL_UP -e tunnel lab-wg --receiver-permission com.wireguard.android.permission.CONTROL_TUNNELS
Триггер нені қамтымайтынын тексеріңіз
Қолданбаны іске қосу немесе алдыңғы жоспарға шығу оқиғасы байланыс сұрай алады, бірақ қолданба бұл оқиға өңделмей тұрып-ақ атау іздеуін немесе бастапқы сұранысты сынап қойған болуы мүмкін. Триггер жүйе күй өзгерісін байқағанда іске қосылады, яғни қолданба жұмыс істей бастағаннан кейін. Егер қолданба туннельден тыс ешқашан байланыспауы керек болса, іске қосу триггері блоктау ережесі емес және оған кідіріс қосу арқылы оны солай етуге болмайды. Блоктау мінез-құлқы үшін қолдау көрсетілген әрдайым қосулы немесе қолданба бойынша саясатты конфигурациялаңыз, ал триггерді тек ыңғайлылық үшін қалдырыңыз.
Блоктау мінез-құлқы мүлдем басқа жерде тұрады. adb shell settings get global always_on_vpn_app әрдайым қосулы деп бекітілген буманы атайды, ал adb shell dumpsys connectivity | grep -i vpn жүйе қазір бақылап отырған VPN желілерін көрсетеді. Олардың ешқайсысын іске қосу триггері алмастыра алмайды.
Дәл осы пайымдау сессияның екінші ұшында да қолданылады. Бір терезе фокусты жоғалтқаны үшін туннельді түсіру фондық жұмысты, аутентификация көмекшілерін және байланысқа сүйенген кез келген басқа қолданбаны бұзады. Фокус өзгерісінің орнына әдейі сессия соңын анықтаңыз және автоматтандыру контекст ауыстырғанда жылдам UP және DOWN тізбектерінен аулақ болыңыз.
Нәтижені тексеріңіз, жіберуді емес
Қатесіз қайтатын хабар таратуды Android қабылдады, одан артық емес. Туннель күйін қолданбадан оқыңыз, ал жұмыс ағынының дайындығын келесі қадамға шынымен қажет нәрседен оқыңыз. Бұл екі түрлі тексеру және біріншіден өту екіншісін білдірмейді.
Интерфейс күйін де тікелей оқыңыз: adb shell ip -brief addr show tun0 туннель интерфейсі мен оның мекенжайын шығарады, ал мекенжайсыз бар интерфейс көтерілгенімен пайдалануға жарамсыз. Содан кейін жеке қызметтің өзін тексеріңіз, өйткені қол алысусыз немесе маршрутсыз көтерілген туннель маңызды болған тапсырмада бәрібір сәтсіз болады. Бір аталған байланысты өз рұқсатының нақты шегінде басқаратын автоматтандыруға интерфейсті түрту, root пәрменін іске қосу немесе Android желілік қорғанысын әлсірету қажет емес.