Private DNS Discussion #1707
Conversation
|
i unfortunately need to get on the original GitLab thread and won't be able to do that until later today 🙃 I'm very curious why OnionMasq/TorVPN are working differently... I'm with cyBerta and concerned about how this rubs against Tor's anonymity promise. And at the bare minimum I agree with @tladesignz in the immediate term there's UX work to do to convey exactly what is happening to the user. I bet there are a lot of users who have security fatigue, see this thing as "private" and would be upset to learn there's a leak. I think some users presumably understand exactly what's going on and desire this. But I bet there are many other users who are in the dark, it's not especially clear... But it gets even more complicated!!
FWIW Android apps can open the system setting screen where they can enable lockdown mode by starting this startActivity(Intent("android.net.vpn.SETTINGS")
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)) |
Private DNS on android has three states we can kind of vaguely reason about:
"automatic"- the system will use DoT at its own discretion. seemingly prioritizes the user getting their websites loaded over adhering to universal DoT"hostname"- the system says it will force DoT, even if this leads to a broken/poor UX. in this state, we can then obtain the user-specified TLS hostnameQuerying This Stuff
We can basically do this on demand whenever we want. IE on the connect screen like @tladesignz had suggested, but could also ask for it anywhere, even in Notifications hypothetically.
I'm 99.9% sure this is mostly what we want:
ConnectivityManagerandContentObserverBut you can also subscribe for network events in the app, which
SnowflakeProxyServicedoes. The connectivity lets us see when the user moves between networks. Whenever one of these network event fires off, we get the set of DNS resolvers the system has curated for the user at that moment. You don't get any info on if DNS is being resolved or plain text of if it's DoT style though. You also don't get notified which resolver is actually handling your query...You can also subscribe with
ContentObsrevers to get a callback fired whenever those values from above change. Seems like you can masochistically subscribe to both the variable change events, and the network change events, and perhaps make some guesses about what's going on.This seems complex, also battery draining. and it doesn't give us much value than the code I already wrote above did.