kubo icon indicating copy to clipboard operation
kubo copied to clipboard

🗿 Kubo in an IPv6 only world 🥚

Open Jorropo opened this issue 2 years ago • 7 comments

The current state of IPv6 Kubo is not very great, we have some traffic going over IPv6 but Kubo still require an IPv4 connection to work properly (unless you are running a private network and do not expect public network connectivity).

Ideally a Kubo running with access to the IPv6 network exclusively would run at feature parity as a Kubo with IPv6+IPv4.

Todos:

  • [ ] https://github.com/ipfs/kubo/issues/9637
    • [ ] https://github.com/ipfs/kubo/issues/9397
    • [ ] https://github.com/ipfs/kubo/issues/9891
  • [ ] https://github.com/ipfs/kubo/issues/5905
    • [ ] https://github.com/ipfs/kubo/issues/9397
    • [ ] https://github.com/ipfs/kubo/issues/9891
  • [ ] https://github.com/ipfs/kubo/issues/8979
  • [ ] https://github.com/ipfs/kubo/issues/7786
  • [ ] Find out a good way to do P2P networking over statefull ipv6 firewalls
    • [ ] https://github.com/libp2p/go-libp2p/issues/2068
    • [ ] https://github.com/libp2p/go-libp2p/issues/2496
  • [ ] Run split DHTs for IPv4 and IPv6 Currently trying to use Kubo with IPv6 networking only leave you with a partial DHT routing table, it mostly works. However it happens frequently that all the 20 final peers are unreachable over IPv6 (due to the statefull nats issue) so your query can't completely to the right part of the keyspace.
    • [x] https://github.com/ipfs/kubo/issues/10076
    • [ ] https://github.com/libp2p/go-libp2p/issues/2466
    • [ ] https://github.com/ipfs/kubo/issues/7168
    • [ ] https://github.com/ipfs/kubo/issues/10075
  • [ ] https://github.com/ipni/storetheindex/issues/2136
  • [ ] Find commun ranges and build LAN dhts using public IPv6 addresses on the same subnet ?

Note: I'm adding an exception to the feature parity, if some data is exclusively hosted on IPv4 nodes, this issue is not interested in working out a way to fetch this data using IPv4 ←→ IPv6 relays. Similarly if some data is exclusively hosted on IPv6 nodes, I am not expecting an IPv4 node to be able to fetch it.

Jorropo avatar Jun 27 '23 15:06 Jorropo

🎉

hacdias avatar Jun 27 '23 16:06 hacdias

booooooo :laughing:

hsanjuan avatar Jun 27 '23 19:06 hsanjuan

⭕⭕⭕⭕

galargh avatar Jun 28 '23 09:06 galargh

Note for readers: this issue is not currently prioritized, I've created this task list precisely because I guess fixing all of the elements on this task list are not high priority and so the precious #10000 issue number will remain open for a long time :hourglass_flowing_sand:. This is also an artificially high bar to meet, you could get acceptable ipv6 networking much faster with quick wins (mainly split DHTs for IPv4 and IPv6).

Jorropo avatar Aug 17 '23 04:08 Jorropo

I just want to check and to confirm something. I have a Docker instance with IPv4 and IPv6, but sometimes to test v6-only I will disable my host's v4 connection and restart my container.

I see some swarm addresses and the list grows but I want to know, can Kubo work without v4 or does it need it for some part of startup?

I can ping my laptop using ipfs ping between the two and both are IPv6 only (the one has DNS64+NAT64, the laptop). Maybe it's just that most content I am trying to reach has no v6 peers?

Update: I presume it is the above. The laptop and v6 only machine are on different subnets and not discoverable locally. So maybe few v6 accessible content exists.

If anyone has any then please let me know, I would love to test.

Update 2x: Seems like QmZfSNpHVzTNi9gezLcgq64Wbj1xhwi9wk4AxYyxMZgtCG is reachable, just few content then.


I rescind my comment but I do urge people to support v6 and get v6 setup at home! Sovereign network!

Keep up the good work fellas.

deavmi avatar Sep 11 '23 18:09 deavmi

@deavmi Kubo starts with v6, the main problem we have is around network reachability. A huge part of the network is not reachable. This should be fixed by:

  • Having a dedicated DHT for v6, this would lessen the issues of a partially reachable DHT, currently trying to use the DHT for v6 is a roll of the dice because you can't properly fill up your buckets properly, this cause you to fire your DHT requests in a really wide low density area of the key space (centered around where it should actually be) and the chance you hit one of the proper 20 peers is lower.
    • See Run split DHTs for IPv4 and IPv6 in the list above.
  • Solve Networking issues on v6.
    • https://github.com/libp2p/go-libp2p/issues/2068
    • https://github.com/libp2p/go-libp2p/issues/2496

Jorropo avatar Oct 09 '23 23:10 Jorropo

Ah that makes sense.

deavmi avatar Oct 16 '23 15:10 deavmi