Open ghost opened 9 years ago
Hi, is there any progress on this? 'Cauz' it'd be awesomely super-usefull :)
I've been reading the discussion from 2014 from above and I've got a few ideas:
Just my 5c for now :)
NOTE: This isn't a technical remark but rather a "meetoo" one.
I learnt about cjdns quite recently and I like the idea. I've read some documentation and I'd like to share an observation. In my opinion the lack of inter-network routing is pretty much a showstopper. The FAQ document says:
Ultimately we hope to build a viable alternative to the regular internet, which we call clearnet. Our goal is to replace the existing hierarchical internet with a non-hierarchical model.
Sounds great but it is the inter-networking, i.e. connecting local networks, that made the "regular internet" successful. The model cjdns currently supports is like connecting mainframes in the early days of the Internet.
As much as IoT is a buzzword, it is a fact that more and more devices are connected to computer networks. We won't be able to run cjdns and hyperboria is going to be much less useful for users without those devices.
There needs to be a protocol that enables routing packets between nodes behind cjdns-enabled routers.
<nontechnical>
replace the existing hierarchical internet with a non-hierarchical model
and
internet = inter-networking
Now that I think of it, it looks like totally "nonhierarchical internet" couldn't possibly exist. If internet = inter-network, then we need at least one level of hierarchy in order to call ourselves an internet. And IMO it makes a lot of sense to have a 2-level hierarchy, like: "top: other people, bottom: my devices" </nontechnical>
As for the technical side of things:
The problem is that right now you can't use any trick addressing without 100% of hyperboria dropping your packets, in effect this is like a feature request to change the rules of bitcoin, it only works after everyone updates.
It would be cool to have a generic addressing trick, which can be introduced by having everyone update, and then doesn't require others to update for you to implement a specific addressing trick using it.
Hey guys!
Amazing to see more people talking about this! :-D
I have an idea to try to mitigate the address collision problem...
It is a solution similar to a tunneling technique called "6to4" (https://en.wikipedia.org/wiki/6to4), where you have an IPv6 address, that it is based on an IPv4 address (one address based on another address), "for example, the global IPv4 address 192.0.2.4 has the corresponding 6to4 prefix 2002:c000:0204::/48".
So, let's say that for each CJDNS IPv6 address, there will be a subnet "based on that address", for example, the global CJDNS IPv6 address "fcba:369d:c17:b9ed:c43d:925b:7840:f430" has the corresponding "6toH" prefix "fcba:369d:c17:b9ed::/48" (or whatever netmask we imagine now).
The downside is that we can't make up random IPv6 subnet/s and put it there, for Hyperboria to route it... Like the initial idea which might be awesome to have, I believe...
But the good side, I think, is that it can be easier to route this throughout the Hyperboria, again, similar to 6to4, but, lets call it "6toH" :-P , this way, Hyperboria can "know" in advance, which subnet is behind which router, by simple calculating the "6toH" prefix address (that is based on the current CJDNS IPv6 address).
At least, there is no conflict. Unless someone takes over your cjdroute.conf and duplicate your CJDNS instance route but, that's not different from today... Am I right?
These days, I'm installing CJDNS everywhere I can, following its principles (beans / end-points), which is is great but, I still think that it would be very nice to be able to route random IPv6 subnets via Hyperboria... Be it based on "6toH", or blockchain-based, like Namecoin or Ethereum App to host the data about who owns which IPv6 subnet behind which CJDNS IPv6.
BTW, I just found this bounty:
https://www.bountysource.com/issues/9310821-non-cjdns-routing-instead-of-nat66
Pretty awesome!! :-D
How much do you guys think that is needed to implement this feature?
Best! Thiago
This isn't a solution. The shorter prefix you choose (and 128 bit isn't too long at all) the easier it is find a colliding key and reroute traffic directed to someone else. fcba:369d:c17:b9ed::/48 network can be entered through both fcba:369d:c17:b9ed:1ac8:3d7e:b7e1:fdfe:64fa as well fcba:369d:c17:b9ed:c401:7b88:237a:9437:e32c. Which one is legitimate?
@steelman Oh, I understand that...
However, I used that prefix just as a bare useless example, only to bring this idea to the table.
Can we create a code/algorithm to generate this in a way that it becomes useful?
Or, you still think that this isn't a solution at all?
@tmartinx I'm pretty sure the idea has been mentioned before. The suggestion was to require the key fingerprint to have a few zero bits (at the end or beginning) in order to be allowed to claim a whole IP prefix. This way, you'd need to keep trying generating keys until you got one whose fingerprint has all those required bits (eg. last 8 bits) as zero. This would make it about 2^k more expensive to find such a key, and 2^k more expensive to find a collision (where k is the number of bits that are required to be zero).
The thing is, making any changes like this requires all nodes in the network to update, before any of them can start using the new feature. And if we can't do this in a backwards compatible manner, then anyone who updated will have their packets dropped by everyone who didn't update. And we have to get it right the first time.
Another solution from the top of my head is to change the hashing algorithm used to generate IPv6 address to provide more bits, use the top bits for the router address and the lower for network prefix. But this would definitely be backward-incompatible.
use the top bits for the router address and the lower for network prefix
What if there are other keys whose router address is within your key's network prefix? Or if there are two keys with same network prefix but different router address?
Another solution from the top of my head is to change the hashing algorithm used to generate IPv6 address to provide more bits
We can't get more because ipv6 limits us to 128bits (8 of those are bruteforced to 0xfc
). Changing the hashing algorithm won't change that :)
What if there are other keys whose router address is within your key's network prefix?
This one's easy. We need to reserve (backward incompatibly) one more bit (or more to be future-proof) in the address to designate the type of address: node (fc00:/9) or net (fc80::/9).
Or if there are two keys with same network prefix but different router address?
I told you it's off the top of my head (-; You are absolutely right. I need to think about it a little more.
@tmartinx commented on 26 Mar 2014
@Downchuck commented on 28 Mar 2014
@tmartinx commented on 28 Mar 2014
@t128 commented on 8 Apr 2014
@tmartinx commented on 9 Apr 2014
@Wolf480pl commented on 9 May 2014
@nolith commented on 1 Aug 2014
@cjdelisle commented on 1 Aug 2014
@nolith commented on 1 Aug 2014
@cjdelisle commented on 1 Aug 2014
@nolith commented on 1 Aug 2014
@cjdelisle commented on 1 Aug 2014
@jedahan commented on 1 Aug 2014
@cjdelisle commented on 1 Aug 2014
@nolith commented on 1 Aug 2014
@jedahan commented on 1 Aug 2014
@Wolf480pl commented on 1 Aug 2014
@cjdelisle commented on 2 Aug 2014
@t128 commented on 4 Aug 2014
@Arceliar commented on 8 Aug 2014
@jedahan commented on 8 Aug 2014
@lgierth commented on 8 Aug 2014
@vadipp commented on 9 Aug 2014
@kpcyrd commented on 9 Aug 2014
@Arceliar commented on 17 Aug 2014
@Arceliar commented on 2 Sep 2014
@krattai commented on 4 Sep 2014
@cjdelisle commented on 23 Sep 2014