[tor-bugs] #33519 [Circumvention/Snowflake]: Support multiple simultaneous SOCKS connections

Tor Bug Tracker & Wiki blackhole at torproject.org
Thu Mar 19 02:50:01 UTC 2020


#33519: Support multiple simultaneous SOCKS connections
-------------------------------------+------------------------
 Reporter:  dcf                      |          Owner:  (none)
     Type:  defect                   |         Status:  new
 Priority:  Medium                   |      Milestone:
Component:  Circumvention/Snowflake  |        Version:
 Severity:  Normal                   |     Resolution:
 Keywords:  turbotunnel              |  Actual Points:
Parent ID:                           |         Points:
 Reviewer:                           |        Sponsor:
-------------------------------------+------------------------

Comment (by dcf):

 [https://github.com/xtaci/kcp-go/issues/166 Conversation] on the kcp-go
 issue tracker convinced me that what I was doing in comment:3 is the wrong
 approach. Two sessions sharing the same `PacketConn` will each be reading
 packets intended for the other, resulting in effectively 50% packet loss.
 (I think, unless quic-go has some special code to handle this case.)
 Retransmissions will probably make the connection work, but obviously
 performance will be bad.

 Instead, I have new commits that implement option 4 for both the KCP and
 QUIC branch.
   [https://gitweb.torproject.org/user/dcf/snowflake.git/commit/?h
 =turbotunnel-kcp&id=bb370f3f04c4fac256ec966b1e0d0fa969b7faa7 turbotunnel-
 kcp]
   [https://gitweb.torproject.org/user/dcf/snowflake.git/commit/?h
 =turbotunnel-quic&id=d36eed58c1aefc4903b3175d620830855c764152 turbotunnel-
 quic]

 The commits introduce a `sessionManager` object that creates a
 `PacketConn` and session on demand, and demand, and thereafter reuses the
 same `PacketConn` and session. If the session ever dies (which should be
 an unusual case), it tears down the `PacketConn` and allows a new
 `PacketConn` and session to be created on demand the next time they are
 needed. quic-go provides a nice channel that we can read to find out when
 the session dies; with kcp-go we poll the
 [https://godoc.org/github.com/xtaci/smux#Session.IsClosed IsClosed] method
 periodically.

 You'll be able to test the commits using the same procedure as in
 comment:3.

 I've started Tor Browser builds based on [https://blog.torproject.org/new-
 release-tor-browser-95a8 9.5a8].

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/33519#comment:4>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list