Tasker dan WireGuard: menghantar Intent yang betul untuk satu terowong
Tasker boleh meminta WireGuard menaikkan satu terowong bernama melalui penerima kawalan jauh. Pengawal masih memerlukan kebenaran CONTROL_TUNNELS.
Melancarkan aktiviti WireGuard membawa aplikasi ke hadapan, bukan menaikkan terowong tertentu. Automasi yang membuka aplikasi dan menunggu akan lulus dalam ujian dan gagal kali pertama telefon sudah pun berada di skrin utama. WireGuard menyediakan laluan kawalan jauh yang disokong untuk terowong bernama, dan laluan itu lebih sempit daripada yang dicadangkan kebanyakan resipi. Senarai semak di bawah menelusuri laluan itu daripada kebenaran hingga hasil yang diperhatikan.
Semak sama ada kawalan jauh diaktifkan
Penerima kawalan jauh tidak sentiasa mendengar. Tetapan WireGuard menyertakan pilihan yang mengaktifkan kawalan jauh terowong, dan selagi pilihan itu belum dihidupkan penerima mengabaikan permintaan dan bukannya gagal dengan kuat. Nilai lalai itu disengajakan, kerana penerima yang dieksport dan boleh menaikkan terowong akan menjadi lubang keselamatan pada setiap peranti yang memasang aplikasi ini. Aktifkannya melalui antara muka dan catat bahawa anda berbuat demikian, kerana ini tetapan yang boleh dimatikan pengguna masa depan tanpa mengetahui apa yang bergantung padanya.
Penerima di atas hanya mengendalikan permintaan UP dan DOWN bernama, jadi tiada laluan di sini untuk mencipta terowong atau menyunting konfigurasinya. Sahkan komponen itu wujud dalam binaan yang dipasang sebelum bergantung padanya: adb shell dumpsys package com.wireguard.android | grep -i receiver menyenaraikan penerima yang diisytiharkan, dan binaan tanpa penerima kawalan jauh tidak akan sekali-kali menjawab. Jika aliran kerja memerlukan titik hujung atau rakan lain, itu terowong lain dan persediaan manual berasingan di dalam aplikasi.
Semak kebenaran yang dipegang pengawal
WireGuard melindungi penerima dengan kebenaran berbahaya, com.wireguard.android.permission.CONTROL_TUNNELS, yang mesti dipegang aplikasi pengawal. Siaran tersuai tidak boleh mencipta kebenaran yang tidak pernah diisytiharkan penghantar atau tidak pernah diberikan kepadanya. Inilah langkah apabila resipi automasi secara senyap menganggap keupayaan yang tidak dimiliki automasi itu.
Semak kedua-dua belah sebelum menulis tugasan. Arahan pertama menyenaraikan kebenaran yang diisytiharkan, dan yang kedua menunjukkan sama ada pakej pengawal benar-benar memegangnya. Pengawal yang mengisytiharkan kebenaran dalam manifesnya tetapi tidak pernah diberinya semasa runtime tetap gagal, dan kegagalan itu datang sebagai kesenyapan dan bukannya dialog.
adb shell pm list permissions -g -d | grep -i control_tunnels
adb shell dumpsys package net.dinglisch.android.taskerm | grep -i control_tunnels
Jika pengawal tidak memegang kebenaran itu, gunakan integrasi yang benar-benar disokong aplikasi dan bukannya membina siaran secara manual. Menghantar Intent dan melihat panggilan berjaya hanya membuktikan Android menerimanya, bukan bahawa WireGuard bertindak ke atasnya. Anggap penghantaran yang tidak disahkan sebagai tidak diketahui, bukan sebagai kejayaan.
Padankan medan Intent dengan aplikasi yang dipasang
Empat medan membawa keseluruhan permintaan, dan setiap satu mempunyai cara gagal yang kelihatan sama seperti yang lain. Dapatkan tindakan, tambahan terowong, pakej dan sasaran dengan betul sebagai satu set.
Action: com.wireguard.android.action.SET_TUNNEL_UP
Extra: tunnel:lab-wg
Package: com.wireguard.android
Target: Broadcast Receiver
Tindakan menamakan UP atau DOWN dan tiada yang lain, tambahan membawa nama terowong yang dikonfigurasikan dengan tepat, pakej mengehadkan penghantaran kepada WireGuard, dan sasaran mesti penerima dan bukan aktiviti. Nama terowong dengan salah taip menghasilkan kesenyapan yang sama seperti penerima yang dimatikan, jadi bacalah nama itu dalam aplikasi sebelum membuat kesimpulan bahawa automasi itu rosak. Tindakan DOWN ialah com.wireguard.android.action.SET_TUNNEL_DOWN dengan tambahan dan pakej yang sama. Hantar satu permintaan pada satu masa semasa menguji, kerana dua siaran yang berlumba menghasilkan keadaan yang tiada siapa dapat mengaitkannya.
Uji permintaan yang sama dari shell pada peranti untuk memisahkan Intent daripada automasi. Jika arahan itu gagal sementara tugasan Tasker berjaya, perbezaannya ialah kebenaran penghantar dan bukan nilai medan.
adb shell am broadcast -a com.wireguard.android.action.SET_TUNNEL_UP -e tunnel lab-wg --receiver-permission com.wireguard.android.permission.CONTROL_TUNNELS
Semak apa yang tidak diliputi pencetus
Peristiwa pelancaran atau latar hadapan aplikasi boleh meminta sambungan, tetapi aplikasi mungkin sudah mencuba carian nama atau permintaan awal sebelum peristiwa itu dikendalikan. Pencetus menyala apabila sistem menyedari perubahan keadaan, iaitu selepas aplikasi mula bekerja. Jika aplikasi tidak boleh berkomunikasi di luar terowong, pencetus pelancaran bukan peraturan penyekatan dan tidak boleh dijadikan sedemikian dengan menambah kelewatan. Konfigurasikan dasar sentiasa aktif atau setiap aplikasi yang disokong untuk tingkah laku penyekatan, dan simpan pencetus hanya untuk kemudahan.
Tingkah laku penyekatan tinggal di tempat yang sama sekali lain. adb shell settings get global always_on_vpn_app menamakan pakej yang dipin sebagai sentiasa aktif, dan adb shell dumpsys connectivity | grep -i vpn menunjukkan rangkaian VPN yang sedang dijejaki sistem sekarang. Tiada satu pun daripada kedua-duanya boleh digantikan oleh pencetus pelancaran.
Penaakulan yang sama terpakai di hujung sesi yang lain. Menurunkan terowong kerana satu tetingkap kehilangan fokus merosakkan kerja latar belakang, pembantu pengesahan dan mana-mana aplikasi lain yang bergantung pada sambungan itu. Tetapkan penghujung sesi yang disengajakan dan bukannya perubahan fokus, dan elakkan jujukan UP dan DOWN yang pantas apabila automasi bertukar konteks.
Semak hasilnya, bukan penghantaran
Siaran yang kembali tanpa ralat telah diterima oleh Android dan tidak lebih. Baca keadaan terowong daripada aplikasi, dan baca kesediaan aliran kerja daripada apa yang benar-benar diperlukan langkah seterusnya. Itu dua semakan berbeza, dan lulus yang pertama tidak bermaksud yang kedua.
Baca juga keadaan antara muka secara langsung: adb shell ip -brief addr show tun0 mencetak antara muka terowong dan alamatnya, dan antara muka yang wujud tanpa alamat berada di atas tanpa boleh digunakan. Kemudian sahkan perkhidmatan peribadi itu sendiri, kerana terowong yang dinaikkan tanpa jabat tangan atau tanpa laluan masih gagal dalam tugasan yang penting. Automasi yang mengawal satu sambungan bernama dalam had kebenaran sebenarnya tidak perlu mengetuk antara muka, menjalankan arahan root atau melemahkan perlindungan rangkaian Android.