Skip to content
This repository has been archived by the owner on Jul 7, 2021. It is now read-only.

Libp2p transport for sending TCP traffic via a SOCKS5 proxy e.g., over Tor network.

License

Notifications You must be signed in to change notification settings

comit-network/rust-libp2p-tokio-socks5

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rust-libp2p TCP/IP via a SOCKS5 proxy

This crate is un-maintained The last supported version of rust-libp2p is v0.34. If you would like to take over maintenance of it please feel free to email 'me (at) tobin.cc'. Thanks.

Contains an implementation of the rust-libp2p Transport that can be used to redirect traffic over a SOCKS5 proxy.

Provides the Socks5TokioTcpConfig type which can be use when building a swarm.

Example transport creation:

/// Builds a libp2p transport with the following features:
/// - TCP connectivity over the Tor network
/// - DNS name resolution
/// - Authentication via secio
/// - Multiplexing via yamux or mplex
fn build_transport(
    keypair: Keypair,
    addr: Multiaddr,
) -> anyhow::Result<PingPongTransport> {
    let mut map = HashMap::new();
    map.insert(addr, LOCAL_PORT);

    let tcp = Socks5TokioTcpConfig::default().nodelay(true).onion_map(map);
    let transport = DnsConfig::new(tcp)?;

    let transport = transport
        .upgrade(Version::V1)
        .authenticate(SecioConfig::new(keypair))
        .multiplex(SelectUpgrade::new(
            yamux::Config::default(),
            MplexConfig::new(),
        ))
        .map(|(peer, muxer), _| (peer, StreamMuxerBox::new(muxer)))
        .timeout(Duration::from_secs(20))
        .boxed();

    Ok(transport)
}

Currently functionality is limited to using the Tor daemon as the SOCKS5 proxy (see below for reason).

Usage

See examples/ping.rs for a complete running example using Tor.

You should configure your Tor onion service to redirect traffic to some local port. The onion address and port will be needed when creating the transport as show above.

Example Tor configuration:

 HiddenServiceDir /var/lib/tor/hidden_service/
 HiddenServicePort 7 127.0.0.1:7777

Check the hidden service data directory for a file called hostname, this contains the onion address for the service.

SOCKS5 vs Tor

This repository is named SOCKS5 instead of Tor because technically there is no reason to be Tor specific. In actuality the transport created with Socks5TokioTcpConfig will only currently work with a Tor proxy because of the address munging we do before passing the target address to the proxy. PRs welcome, please see #1.

About

Libp2p transport for sending TCP traffic via a SOCKS5 proxy e.g., over Tor network.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages