Tasker ja WireGuard: oikean Intentin lähettäminen yhdelle tunnelille
Tasker voi pyytää WireGuardia nostamaan yhden nimetyn tunnelin kaukohallinnan vastaanottimen kautta. Ohjaimella on silti oltava CONTROL_TUNNELS-lupa.
WireGuardin aktiviteetin käynnistäminen tuo sovelluksen eteen, ei nosta tiettyä tunnelia. Automaatio, joka avaa sovelluksen ja odottaa, menee testissä läpi ja epäonnistuu ensimmäisen kerran, kun puhelin on jo aloitusnäytöllä. WireGuard tarjoaa tuetun kaukohallintapolun nimetyille tunneleille, ja se on kapeampi kuin useimmat reseptit antavat ymmärtää. Alla oleva tarkistuslista kulkee tämän polun luvasta havaittuun tulokseen.
Tarkista, että kaukohallinta on käytössä
Kaukohallinnan vastaanotin ei aina kuuntele. WireGuardin asetuksiin kuuluu vaihtoehto, joka ottaa tunnelien kaukohallinnan käyttöön, ja kunnes se on päällä, vastaanotin jättää pyynnöt huomiotta sen sijaan että epäonnistuisi äänekkäästi. Oletusarvo on tahallinen, koska viety vastaanotin, joka voisi nostaa tunneleita, olisi tietoturva-aukko jokaisessa laitteessa, johon sovellus on asennettu. Ota se käyttöön käyttöliittymästä ja kirjoita muistiin, että teit niin, koska se on asetus, jonka tuleva käyttäjä voi kytkeä pois tietämättä, mistä oli kyse.
Ylempi vastaanotin käsittelee vain nimettyjä UP- ja DOWN-pyyntöjä, joten tässä ei ole polkua tunnelin luomiseen tai sen kokoonpanon muokkaamiseen. Varmista ennen siihen luottamista, että komponentti on asennetussa versiossa: adb shell dumpsys package com.wireguard.android | grep -i receiver luettelee ilmoitetut vastaanottimet, eikä versio ilman kaukohallinnan vastaanotinta koskaan vastaa. Jos työnkulku tarvitsee toisen päätepisteen tai toisen vertaisen, se on toinen tunneli ja erillinen manuaalinen asennus sovelluksen sisällä.
Tarkista, mikä lupa ohjaimella on
WireGuard suojaa vastaanottimen vaarallisella luvalla, com.wireguard.android.permission.CONTROL_TUNNELS, joka ohjaavalla sovelluksella on oltava. Oma lähetys ei voi luoda lupaa, jota lähettäjä ei koskaan ilmoittanut tai jota sille ei koskaan myönnetty. Tämä on se vaihe, jossa automaatio-reseptit hiljaa olettavat kyvyn, jota automaatiolla ei ole.
Tarkista molemmat puolet ennen tehtävän kirjoittamista. Ensimmäinen komento luettelee ilmoitetun luvan ja toinen näyttää, onko ohjaimen paketilla se todella. Ohjain, joka ilmoittaa luvan manifestissaan mutta jolle sitä ei koskaan myönnetty suorituksen aikana, epäonnistuu silti, ja epäonnistuminen tulee hiljaisuutena eikä valintaikkunana.
adb shell pm list permissions -g -d | grep -i control_tunnels
adb shell dumpsys package net.dinglisch.android.taskerm | grep -i control_tunnels
Jos ohjaimella ei ole lupaa, käytä integraatiota, jota sovellus todella tukee, sen sijaan että rakentaisit lähetyksen käsin. Intentin lähettäminen ja kutsun onnistumisen näkeminen todistaa vain, että Android hyväksyi sen, ei että WireGuard toimi sen mukaan. Käsittele vahvistamatonta lähetystä tuntemattomana, älä onnistumisena.
Tarkista Intentin kentät asennettua sovellusta vasten
Neljä kenttää kantavat koko pyynnön, ja jokaisella on epäonnistumistapa, joka näyttää täsmälleen samalta kuin muut. Saa toiminto, tunnelin lisäkenttä, paketti ja kohde oikein yhtenä joukkona.
Action: com.wireguard.android.action.SET_TUNNEL_UP
Extra: tunnel:lab-wg
Package: com.wireguard.android
Target: Broadcast Receiver
Toiminto nimeää UP tai DOWN eikä mitään muuta, lisäkenttä kantaa täsmällisen määritetyn tunnelin nimen, paketti rajaa toimituksen WireGuardille ja kohteen on oltava vastaanotin eikä aktiviteetti. Kirjoitusvirheellinen tunnelin nimi tuottaa saman hiljaisuuden kuin poissa käytöstä oleva vastaanotin, joten lue nimi sovelluksesta ennen kuin päättelet automaation olevan rikki. DOWN-toiminto on com.wireguard.android.action.SET_TUNNEL_DOWN samalla lisäkentällä ja paketilla. Lähetä testatessa yksi pyyntö kerrallaan, koska kaksi toisiaan jahtaavaa lähetystä tuottaa tilan, jota kukaan ei voi kohdistaa.
Testaa sama pyyntö laitteen komentotulkista erottaaksesi Intentin automaatiosta. Jos komento epäonnistuu Taskerin tehtävän onnistuessa, ero on lähettäjän lupa eikä kenttien arvot.
adb shell am broadcast -a com.wireguard.android.action.SET_TUNNEL_UP -e tunnel lab-wg --receiver-permission com.wireguard.android.permission.CONTROL_TUNNELS
Tarkista, mitä liipaisin ei kata
Sovelluksen käynnistys- tai etualatapahtuma voi pyytää yhteyttä, mutta sovellus on ehkä jo yrittänyt nimenhakua tai alkuperäistä pyyntöä ennen kuin tapahtuma käsitellään. Liipaisin laukeaa, kun järjestelmä huomaa tilan muutoksen, eli sen jälkeen kun sovellus on alkanut tehdä työtä. Jos sovellus ei saa koskaan viestiä tunnelin ulkopuolelle, käynnistysliipaisin ei ole estävä sääntö eikä siitä voi tehdä sellaista viivettä lisäämällä. Määritä estävälle käytökselle tuettu aina päällä- tai sovelluskohtainen käytäntö ja pidä liipaisin vain mukavuuden vuoksi.
Estävä käytös asuu kokonaan toisaalla. adb shell settings get global always_on_vpn_app nimeää paketin, joka on kiinnitetty aina päällä -tilaan, ja adb shell dumpsys connectivity | grep -i vpn näyttää VPN-verkot, joita järjestelmä parhaillaan seuraa. Kumpikaan niistä ei ole jotain, jonka käynnistysliipaisin voisi korvata.
Sama päättely pätee istunnon toisessa päässä. Tunnelin laskeminen siksi, että yksi ikkuna menetti kohdistuksen, rikkoo taustatyön, todennusapurit ja jokaisen muunkin sovelluksen, joka luotti yhteyteen. Määrittele tarkoituksellinen istunnon loppu kohdistuksen vaihtumisen sijaan ja vältä nopeita UP- ja DOWN-jaksoja, kun automaatio vaihtaa konteksteja.
Tarkista tulos, älä lähetystä
Lähetys, joka palaa ilman virhettä, on hyväksytty Androidissa eikä muuta. Lue tunnelin tila sovelluksesta ja työnkulun valmius siitä, mitä seuraava vaihe todella tarvitsee. Ne ovat kaksi eri tarkistusta, eikä ensimmäisen läpäiseminen tarkoita toista.
Lue myös käyttöliittymän tila suoraan: adb shell ip -brief addr show tun0 tulostaa tunnelin käyttöliittymän ja sen osoitteen, ja käyttöliittymä, joka on olemassa ilman osoitetta, on ylhäällä olematta käyttökelpoinen. Vahvista sitten yksityinen palvelu itse, koska tunneli, joka on ylhäällä ilman kättelyä tai ilman reittiä, epäonnistuu silti tehtävässä, jolla oli merkitystä. Automaatio, joka ohjaa yhtä nimettyä yhteyttä todellisen luparajansa sisällä, ei tarvitse käyttöliittymän napauttamista, root-komennon ajamista eikä Androidin verkkosuojien heikentämistä.