Skip to content

Snowflake needs to be listed separately on torrc-defaults

Related to : tpo/anti-censorship/pluggable-transports/lyrebird#40028 Since Tor Browser Update 14.0.9, lyrebird was also updated to version 0.6.0 It seems that Snowflake is now embedded into lyrebird executable. The issue is:

  • If you enable proxy settings with a localhost address (127.0.0.1) or whatever remote proxy, OBFS4 PT won't work because of this line in torrc-defaults:
ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit,snowflake,webtunnel exec ./TorBrowser/Tor/PluggableTransports/lyrebird
  • Actually, you need to separate PT like this:
ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit exec ./TorBrowser/Tor/PluggableTransports/lyrebird
ClientTransportPlugin snowflake,webtunnel exec ./TorBrowser/Tor/PluggableTransports/lyrebird
  • This way, OBFS4 proxy will work with localhost and remote addresses. If you don't do this, you will get an error like this: proxy test failure (Host unreachable) The reason why is because lyrebird thinks you are using snowflake and it disable the uses of proxy according to these lines of codes in file ./cmd/lyrebird/pt_extras.go:
	// Snowflake has extra restrictions on which proxy types are supported.
	// Perform the necessary checks if snowflake is one of the configured
	// transports.
	if isSnowflake {
		if err := proxy.CheckProxyProtocolSupport(spec); err != nil {
			return nil, pt.ProxyError("proxy is not supported:" + err.Error())
		} else {
			client := proxy.NewSocks5UDPClient(spec)
			conn, err := client.ListenPacket("udp", nil)
			if err != nil {
				return nil, pt.ProxyError("proxy test failure:" + err.Error())
			}
			conn.Close()
		}
	}
  • So, the problem isn't on lyrebird side but on Tor-Browser side. You need to separate OBFS4 and Snowflake on different ClientTransportPlugin lines because it will remove OBFS4 capability to connect using a proxy.

EDIT PieroV: formatted the code (both blocks and inline)

Edited by Pier Angelo Vendrame
OSZAR »