draft: snowflake WIP
Partial solution for #70 (closed), which doesn't work yet (it panics inside the Go code for some reason after arti tries to make a 2nd guard connection via snowflake). However, the log lines printed look somewhat promising.
Test by building with VERBOSE=1 ./build-ndk.sh
as per usual, and then adding the below bridgeline in the VPN config UI:
snowflake 192.0.2.3:80 2B280B23E1107BB62ABFC40DDCC8824814F80A72 fingerprint=2B280B23E1107BB62ABFC40DDCC8824814F80A72 url=https://1098762253.rsc.cdn77.org/ fronts=www.cdn77.com,www.phpmyadmin.net ice=stun:stun.l.google.com:19302,stun:stun.antisip.com:3478,stun:stun.bluesip.net:3478,stun:stun.dus.net:3478,stun:stun.epygi.com:3478,stun:stun.sonetel.com:3478,stun:stun.uls.co.za:3478,stun:stun.voipgate.com:3478,stun:stun.voys.nl:3478 utls-imitate=hellorandomizedalpn
The log messages from snowflake go to logcat.
The snowflake running is patched with this patch in an effort to make outgoing UDP/TCP connections have protect()
called on them properly. In addition, we also override the go net.DefaultResolver -- currently hardcoded to 8.8.8.8
, since it was trying to use the VPN DNS server otherwise. (I didn't figure out how to make it use the system DNS server.)