WireGuard etkinliğini başlatmak bir uygulamayı öne getirir, belirli bir tüneli kaldırmaz. Uygulamayı açıp bekleyen bir otomasyon testte geçer ve telefon zaten ana ekranda oturuyorsa ilk seferde başarısız olur. WireGuard, adlandırılmış tüneller için desteklenen bir uzaktan denetim yolu sunar ve bu yol çoğu tarifin öne sürdüğünden dardır. Aşağıdaki kontrol listesi bu yolu izinden gözlenen sonuca kadar yürür.

Uzaktan denetimin açık olup olmadığını kontrol edin

Uzaktan denetim alıcısı her zaman dinlemez. WireGuard ayarlarında tünellerin uzaktan denetimini etkinleştiren bir seçenek vardır ve bu seçenek açık olmadıkça alıcı istekleri yüksek sesle başarısız olmak yerine yok sayar. Varsayılan değer bilinçlidir, çünkü tünelleri kaldırabilen dışa aktarılmış bir alıcı, uygulamanın kurulu olduğu her cihazda bir güvenlik açığı olurdu. Arayüzden etkinleştirin ve yaptığınızı not edin, çünkü bu, gelecekteki bir kullanıcının neyin buna bağlı olduğunu bilmeden kapatabileceği bir ayardır.

Yukarıdaki alıcı yalnızca adlandırılmış UP ve DOWN isteklerini işler, bu yüzden burada tünel oluşturmak veya yapılandırmasını düzenlemek için bir yol yoktur. Ona güvenmeden önce bileşenin kurulu derlemede bulunduğunu doğrulayın: adb shell dumpsys package com.wireguard.android | grep -i receiver bildirilen alıcıları listeler ve uzaktan denetim alıcısı olmayan bir derleme asla yanıt vermez. İş akışı başka bir uç noktaya veya başka bir eşe ihtiyaç duyuyorsa bu başka bir tünel ve uygulama içinde ayrı bir el ile kurulumdur.

Denetleyicinin sahip olduğu izni kontrol edin

WireGuard alıcıyı tehlikeli bir izinle korur, com.wireguard.android.permission.CONTROL_TUNNELS, bunu denetleyen uygulamanın elinde bulundurması gerekir. Kendi yayını, göndericinin hiç bildirmediği veya hiç verilmediği bir izni üretemez. Otomasyon tariflerinin otomasyonda olmayan bir yeteneği sessizce varsaydığı adım budur.

Görevi yazmadan önce iki tarafı da kontrol edin. İlk komut bildirilen izni listeler, ikincisi denetleyicinin paketinin gerçekten ona sahip olup olmadığını gösterir. İzni manifestinde bildiren ama çalışma zamanında hiç verilmeyen bir denetleyici yine de başarısız olur ve başarısızlık iletişim kutusu değil sessizlik olarak gelir.

adb shell pm list permissions -g -d | grep -i control_tunnels
adb shell dumpsys package net.dinglisch.android.taskerm | grep -i control_tunnels

Denetleyici izne sahip değilse, el ile yayın kurmak yerine uygulamanın gerçekten desteklediği tümleşimi kullanın. Bir Intent gönderip çağrının başarılı olduğunu görmek yalnızca Android'in onu kabul ettiğini kanıtlar, WireGuard'ın ona göre işlem yaptığını değil. Doğrulanmamış gönderimi bilinmeyen olarak ele alın, başarı olarak değil.

Intent alanlarını kurulu uygulamayla karşılaştırın

Dört alan tüm isteği taşır ve her birinin diğerleriyle tamamen aynı görünen bir başarısızlık biçimi vardır. Eylemi, tünel ek alanını, paketi ve hedefi bir küme olarak doğru ayarlayın.

Action:  com.wireguard.android.action.SET_TUNNEL_UP
Extra:   tunnel:lab-wg
Package: com.wireguard.android
Target:  Broadcast Receiver

Eylem UP veya DOWN adını verir ve başka bir şey değil, ek alan tam olarak yapılandırılmış tünel adını taşır, paket teslimatı WireGuard ile sınırlar ve hedef etkinlik değil alıcı olmalıdır. Yazım hatası olan bir tünel adı, devre dışı bir alıcıyla aynı sessizliği üretir, bu yüzden otomasyonun bozuk olduğu sonucuna varmadan önce adı uygulamada okuyun. DOWN eylemi aynı ek alan ve paketle com.wireguard.android.action.SET_TUNNEL_DOWN. Test ederken her seferinde tek istek gönderin, çünkü birbirini kovalayan iki yayın kimsenin atfedemediği bir durum üretir.

Intent'i otomasyondan ayırmak için aynı isteği cihazdaki kabuktan test edin. Bu komut başarısız olurken Tasker görevi başarılı oluyorsa fark alan değerleri değil göndericinin iznidir.

adb shell am broadcast -a com.wireguard.android.action.SET_TUNNEL_UP -e tunnel lab-wg --receiver-permission com.wireguard.android.permission.CONTROL_TUNNELS

Tetikleyicinin neleri kapsamadığını kontrol edin

Bir uygulama başlatma veya öne gelme olayı bağlantı isteyebilir, ancak uygulama bu olay işlenmeden önce zaten bir ad çözümlemesi veya ilk istek denemiş olabilir. Tetikleyici, sistem durum değişikliğini fark ettiğinde ateşlenir, bu da uygulama çalışmaya başladıktan sonradır. Uygulama tünel dışında asla iletişim kurmamalıysa başlatma tetikleyicisi bir engelleme kuralı değildir ve gecikme eklenerek öyle yapılamaz. Engelleme davranışı için desteklenen bir her zaman açık veya uygulama başına ilke yapılandırın ve tetikleyiciyi yalnızca kolaylık için tutun.

Engelleme davranışı tamamen başka bir yerde yaşar. adb shell settings get global always_on_vpn_app her zaman açık olarak sabitlenen paketi adlandırır ve adb shell dumpsys connectivity | grep -i vpn sistemin şu anda izlediği VPN ağlarını gösterir. Bunların hiçbiri bir başlatma tetikleyicisinin yerini alamaz.

Aynı mantık oturumun diğer ucunda da geçerlidir. Bir pencere odağı kaybettiği için tüneli indirmek arka plan çalışmasını, kimlik doğrulama yardımcılarını ve bağlantıya güvenen diğer tüm uygulamaları bozar. Odak değişikliği yerine bilinçli bir oturum sonu tanımlayın ve otomasyon bağlam değiştirdiğinde hızlı UP ve DOWN dizilerinden kaçının.

Göndermeyi değil sonucu kontrol edin

Hatasız dönen bir yayın Android tarafından kabul edilmiştir ve fazlası değil. Tünel durumunu uygulamadan okuyun ve iş akışı hazırlığını sonraki adımın gerçekten ihtiyaç duyduğu şeyden okuyun. Bunlar iki farklı kontroldür ve birincisini geçmek ikincisini gerektirmez.

Arayüzün durumunu da doğrudan okuyun: adb shell ip -brief addr show tun0 tünel arayüzünü ve adresini yazdırır ve adresi olmadan var olan bir arayüz kullanılabilir olmadan ayaktadır. Sonra özel hizmetin kendisini doğrulayın, çünkü el sıkışması veya rotası olmadan ayakta olan bir tünel önemli olan görevde yine de başarısız olur. Adlandırılmış tek bir bağlantıyı gerçek izin sınırları içinde denetleyen bir otomasyonun arayüze dokunmasına, root komutu çalıştırmasına veya Android'in ağ korumalarını zayıflatmasına gerek yoktur.

İlgili makaleler