Skip to content

draft: snowflake WIP

eta requested to merge eta/snowflake-wip into main

Partial solution for #70, 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.)

Merge request reports