Bug report: WireGuard client not setting underlying network on Android Pie

Jason A. Donenfeld Jason at zx2c4.com
Wed Jan 15 19:29:19 CET 2020


Hi Andrey,

Thanks for the bug report.

On 1/13/20 12:00 AM, Andrey Kupreychik wrote:
> My Android phone running wireguard VPN threats it as a metered 
> connection and does not do anything it should do on Wi-Fi only
> 
> What I found is this discussion 
> https://issuetracker.google.com/issues/114309459
> I've looked thru the GitHub mirror code and found no evidance of 
> setUnderlyingNetworks called in WireGuard client code.
> 
> As seen in the issue tracker link above, it's needed in order to take 
> advantage of this 
> (https://developer.android.com/about/versions/pie/android-9.0-changes-all#network-capabilities-vpn) 
> behavior change. As described in the issue tracker link, this prevents 
> Pie devices from properly using unmetered WiFi networks.

Are you suggesting something like the below? According to the docs, the 
null value is the "default", and the others don't fit the wireguard 
model. Are you saying we should still be calling this anyway because the 
android system is expecting it?

 From 4ae0e9688e4edfdad06e6db49f414a95c5663d07 Mon Sep 17 00:00:00 2001
From: "Jason A. Donenfeld" <Jason at zx2c4.com>
Date: Wed, 15 Jan 2020 13:25:56 -0500
Subject: [PATCH] GoBackend: set empty underlying networks

https://lists.zx2c4.com/pipermail/wireguard/2020-January/004859.html
https://issuetracker.google.com/issues/114309459
https://developer.android.com/about/versions/pie/android-9.0-changes-all#network-capabilities-vpn

Apparently we need to call this at least once.

Reported-by: Andrey Kupreychik <foxel at quickfox.ru>
---
  app/src/main/java/com/wireguard/android/backend/GoBackend.java | 1 +
  1 file changed, 1 insertion(+)

diff --git 
a/app/src/main/java/com/wireguard/android/backend/GoBackend.java 
b/app/src/main/java/com/wireguard/android/backend/GoBackend.java
index 3e8e1ec..3c4c893 100644
--- a/app/src/main/java/com/wireguard/android/backend/GoBackend.java
+++ b/app/src/main/java/com/wireguard/android/backend/GoBackend.java
@@ -224,6 +224,7 @@ public final class GoBackend implements Backend {

              currentTunnel = tunnel;

+            service.setUnderlyingNetworks(null);
              service.protect(wgGetSocketV4(currentTunnelHandle));
              service.protect(wgGetSocketV6(currentTunnelHandle));
          } else {
-- 
2.24.1


Regards,
Jason


More information about the WireGuard mailing list