Skip to content

Use https://crates.io/crates/p2p for NAT traversal? #348

@TheWaWaR

Description

@TheWaWaR

Current rust-libp2p implementation has very simple NAT traversal support. As I know, just remap the port the a public IP address.

How about use p2p as to support more powerful NAT traversal techniques? Like TCP and UDP hole punching (even port number prediction), looks great to me.

A TCP hold punching example:

Example steps

  1. Start the relay sever (require public IP address)
    socat TCP-LISTEN:45666 TCP-LISTEN:45667
  2. Start the rendezvous(traversal) server (require public IP address)
    cargo run --example tcp_rendezvous_server
    # listening on public socket address <rendezvous-server>:45000
    # our public key is: {"sign":[...],"encrypt":[...]}
  3. Start NAT peers (Better locate in different NAT)
    # Start first peer
    RUST_LOG=p2p=trace cargo run --example tcp_rendezvous_connect -- --relay=<relay-server-ip>:45666 --traversal-server=<rendezvous-server>:45000 --traversal-server-key='{"sign":[...],"encrypt":[...]}' this-is-45666
    
    # Start second peer
    RUST_LOG=p2p=trace cargo run --example tcp_rendezvous_connect -- --relay=<relay-server-ip>:45667 --traversal-server=<rendezvous-server>:45000 --traversal-server-key='{"sign":[...],"encrypt":[...]}' this-is-45667

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions