From 4280acf89409a06819f53466ddd501867e561e18 Mon Sep 17 00:00:00 2001 From: David Stainton Date: Fri, 29 Jul 2016 22:32:09 +0000 Subject: [PATCH 1/2] Add rough draft patch to get onion transport working --- p2p/net/swarm/addr/addr.go | 2 ++ p2p/net/swarm/swarm.go | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/p2p/net/swarm/addr/addr.go b/p2p/net/swarm/addr/addr.go index d9ba87216a..ee2063e75d 100644 --- a/p2p/net/swarm/addr/addr.go +++ b/p2p/net/swarm/addr/addr.go @@ -3,6 +3,7 @@ package addrutil import ( "fmt" + onion "github.com/david415/ipfs-onion-transport" logging "github.com/ipfs/go-log" ma "github.com/jbenet/go-multiaddr" manet "github.com/jbenet/go-multiaddr-net" @@ -21,6 +22,7 @@ var SupportedTransportStrings = []string{ "/ip6/udp/utp", // "/ip4/udp/udt", disabled because the lib doesnt work on arm // "/ip6/udp/udt", disabled because the lib doesnt work on arm + "/onion", } // SupportedTransportProtocols is the list of supported transports for the swarm. diff --git a/p2p/net/swarm/swarm.go b/p2p/net/swarm/swarm.go index 15e1ec5e1b..ca50e8b5f8 100644 --- a/p2p/net/swarm/swarm.go +++ b/p2p/net/swarm/swarm.go @@ -10,6 +10,7 @@ import ( "sync" "time" + onion "github.com/david415/ipfs-onion-transport" peer "github.com/ipfs/go-libp2p-peer" pstore "github.com/ipfs/go-libp2p-peerstore" transport "github.com/ipfs/go-libp2p-transport" @@ -30,6 +31,7 @@ import ( yamux "github.com/whyrusleeping/go-smux-yamux" mafilter "github.com/whyrusleeping/multiaddr-filter" context "golang.org/x/net/context" + "golang.org/x/net/proxy" ) var log = logging.Logger("swarm2") @@ -108,6 +110,15 @@ func NewSwarm(ctx context.Context, listenAddrs []ma.Multiaddr, return mconn.WrapConn(bwc, c) } + // POC setup for onion transport + auth := proxy.Auth{ + User: "", + Password: "", + } + controlNet := "tcp" + controlAddr := "127.0.0.1:9051" + onionTransport := NewOnionTransport(controlNet, controlAddr, nil, &auth) + s := &Swarm{ swarm: ps.NewSwarm(PSTransport), local: local, @@ -118,6 +129,7 @@ func NewSwarm(ctx context.Context, listenAddrs []ma.Multiaddr, transports: []transport.Transport{ transport.NewTCPTransport(), transport.NewUtpTransport(), + onionTransport, }, bwc: bwc, fdRateLimit: make(chan struct{}, concurrentFdDials), From 22585b8687e89cad246917ea665f354fa2ab1422 Mon Sep 17 00:00:00 2001 From: David Stainton Date: Sat, 30 Jul 2016 13:08:51 +0000 Subject: [PATCH 2/2] Add more explainatory comments about onion transport configuration in swarm NewSwarm --- p2p/net/swarm/swarm.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/p2p/net/swarm/swarm.go b/p2p/net/swarm/swarm.go index ca50e8b5f8..28606d85e5 100644 --- a/p2p/net/swarm/swarm.go +++ b/p2p/net/swarm/swarm.go @@ -111,10 +111,18 @@ func NewSwarm(ctx context.Context, listenAddrs []ma.Multiaddr, } // POC setup for onion transport + + // The Tor socks user and password can be set to random values + // to tell little-t tor to make a new circuit. + // It's probably OK to leave them blank because when connecting + // to a new onion a new tor circuit will have to be created anyway. auth := proxy.Auth{ User: "", Password: "", } + + // XXX FIXME: The tor control net and addr should be user specified! + // Note: for sandboxing purposes UNIX domain sockets are preferred instead of TCP. controlNet := "tcp" controlAddr := "127.0.0.1:9051" onionTransport := NewOnionTransport(controlNet, controlAddr, nil, &auth)