I want to be able to use /dnsaddr with secure WebSocket.
Requirements
I want to be able to wrap libp2p::websocket::WsConfig with libp2p::dns::Transport which will resolve only /dnsaddr before it passing the multiaddr to WebSocket transport.
For example:
let inner_tcp_transport =
dns::tokio::Transport::system(tcp::tokio::Transport::new(tcp::Config::default()))
.unwrap();
let wss_transport = websocket::WsConfig::new(inner_tcp_transport);
let mut dns_opts = dns::ResolverOpts::default();
dns_opts.resolve_dnsaddr_only = true;
let transport =
dns::tokio::Transport::custom(wss_transport, dns::ResolverConfig::default(), dns_opts);
In case of /dnsaddr the above transport should have the following flow:
User dials to /dnsaddr/da-bridge-1.celestia-arabica-11.com/p2p/12D3KooWGqwzdEqM54Dce6LXzfFr97Bnhvm6rN7KM7MFwdomfm4S
DNS transport resolves multiaddr to /dns/da-bridge-1.celestia-arabica-11.com/tcp/2122/tls/ws/p2p/12D3KooWGqwzdEqM54Dce6LXzfFr97Bnhvm6rN7KM7MFwdomfm4S
DNS transport passes the /dns multiaddr to WebSocket transport.
WebSocket transport initializes TLS based on /dns multiaddr and passes multiaddr to TCP transport.
TCP transport resolves /dns multiaddr to /ip4 multiaddr and establishes the connection.
In case of /dns the above transport should have the following flow:
User dials to /dns/da-bridge-1.celestia-arabica-11.com/tcp/2122/tls/ws/p2p/12D3KooWGqwzdEqM54Dce6LXzfFr97Bnhvm6rN7KM7MFwdomfm4S
DNS transport passes the /dns multiaddr to WebSocket transport.
WebSocket transport initializes TLS based on /dns multiaddr and passes multiaddr to TCP transport.
TCP transport resolves /dns multiaddr to /ip4 multiaddr and establishes the connection.
Open questions
It would be hard to implement this kind of transport combination in SwarmBuilder.
Are you planning to do it yourself in a pull request ?
Description
Currently there is no way to properly pass
/dnsaddr
to WSS transport and work as expected:libp2p::websocket::WsConfig
withlibp2p::dns::Transport
then you break secure WebSocket because DNS transport will resolve/dns4
to/ip4
.libp2p::dns::Transport
withlibp2p::websocket::WsConfig
then you break/dnsaddr
because it will never fetch the multiaddresses from DNS.Currently 2 is the recommended way (link).
Motivation
I want to be able to use
/dnsaddr
with secure WebSocket.Requirements
I want to be able to wrap
libp2p::websocket::WsConfig
withlibp2p::dns::Transport
which will resolve only/dnsaddr
before it passing the multiaddr to WebSocket transport.For example:
In case of
/dnsaddr
the above transport should have the following flow:/dnsaddr/da-bridge-1.celestia-arabica-11.com/p2p/12D3KooWGqwzdEqM54Dce6LXzfFr97Bnhvm6rN7KM7MFwdomfm4S
/dns/da-bridge-1.celestia-arabica-11.com/tcp/2122/tls/ws/p2p/12D3KooWGqwzdEqM54Dce6LXzfFr97Bnhvm6rN7KM7MFwdomfm4S
/dns
multiaddr to WebSocket transport./dns
multiaddr and passes multiaddr to TCP transport./dns
multiaddr to/ip4
multiaddr and establishes the connection.In case of
/dns
the above transport should have the following flow:/dns/da-bridge-1.celestia-arabica-11.com/tcp/2122/tls/ws/p2p/12D3KooWGqwzdEqM54Dce6LXzfFr97Bnhvm6rN7KM7MFwdomfm4S
/dns
multiaddr to WebSocket transport./dns
multiaddr and passes multiaddr to TCP transport./dns
multiaddr to/ip4
multiaddr and establishes the connection.Open questions
It would be hard to implement this kind of transport combination in
SwarmBuilder
.Are you planning to do it yourself in a pull request ?
Maybe