Hi Dan,

My suggestion actually derives from a number of pre-existing protocols including CJDNS. I found neither of them satisfying and the features I wanted where not easy to just add to an existing protocol -> therefore I came up with making a new one. The protocol I started out with where I2P and it's not alone in adding features that can't just be added to CJDNS.

I hope I didn't write this to aggressively, I've been told that I have a tendency to do that. I am open for the idea that I'm wrong about these issues but I have tried finding other solutions to them. If the requirement to design a new protocol could be dropped that would spend some time. Although even if it's a new protocol I suspect that a lot of the work on CJDNS, I2P and others can be reused.

I2P and CIP as defined can be implemented entirely as a platform-independent application. This while CJDNS needs to get data from the IP stack which is the reason that there are limits to the number of platforms it currently support. If course my IP over CIP feature would have the same limit, but that's an optional feature and you would still be able to run CIP and CIP-based applications without it.

Another issue with basing a protocol on IPv6 and that is that there are no clear distinction between CJDNS and IP, where a CIP application would know for certain that it's using CIP and not IP. An IP application running tunneled over CIP would have similar problems, but the solution to that is to replace all IP code with CIP code in the application.

I2P has this handshaking protocol where it discovers neighboring nodes and check the version of the protocol. That makes it easy to do fundamental changes in the protocol without having the problems we are having while migrating from IPv4 to IPv6. That's also a feature that I want to carry over in CIP but that would be hard to do in a protocol specified to use IPv6 packages.

Finally it's the problem of having to manually find and configure friends. I want to peer with my neigbors wireless networks as that's probably how the mesh network becomes most efficient. However like most people in western civilization I don't want to actually talk with my neighbors. To tell the truth personally I can do that because I want this to happen. But the problem with "most people in western civilization" still stands.

A mesh network that requires participants to communicate IRL and also requires manual router configuration - I don't see that spreading outside of enthusiast circles and replace internet.

On the other hand the idea of a network design that forces communities to cooperate IRL in order to perform some manual administration during deployment and maintenance is tempting. But it's also a vulnerability when outside forces can control the network by controlling those that administrates it.

Currently I install I2P on computers I maintain in order to remote administrate them while their are spread out to different locations that cannot easily be reached using IPv4. Manually configuring friends in that network would be a lot more painful than the current setup.

//Mattias Eliasson

Den 2015-07-29 kl. 12:08, skrev Dan Ryan:
Hey Mattias,

You've just described CJDNS <https://github.com/cjdelisle/cjdns>, the only thing it is missing is CJDNS over USB, but I feel that that is something that should be done at a higher level than a routing daemon. That being said, if you wanna modify CJDNS to bundle packets to go on flash drives, go for it!

Automatic local peering over raw ethernet frames is the main method of peering, although you can peer over any IPv4 or IPv6 network (including OnionCat over Tor/i2p for VPNception!), allowing CJDNS users to leverage any existing IP based network. CJDNS also uses self generated keypairs to assign you a unique IPv6 address, then using the Salsa20 stream cypher it encrypts all traffic twice (end to end & hop to hop).

CJDNS also supports transporting any IPv4 or IPv6 network over itself, so public exits or commercial providers could offer or sell you an IPv4 and/or IPv6 address and legacy internet access, or you could just use it to access a remote LAN too, depending on your use case.

If anyone needs CJDNS peering over the IPv4 or IPv6 internet, or if you are in Seattle and would like to link up, feel free to email me or head over to SeattleMesh.net <https://seattlemesh.net/>.

- Dan Ryan

On 07/29/2015 01:42 AM, Mattias Eliasson wrote:

Hi


For quite some time I've been thinking about how to release Internet from various problems and now that I found the OpenWireless project I'll share some of my ideas to see what response I get. I've spent a lot of time thinking about usability and cost of deployment rather than just focusing on technical issues. I think that the usability perspective is very important. The easier it is for users to open up their networks, the more users will join.


While analysing the technical and security aspect of this idea please also consider the usability aspect. This idea is very plug and play and allows for the creation of a router and installable software that will connect users without additional configuration. Its usage as a flexible VPN technology alone makes it a free alternative to Cisco:s Dynamic Multipoint VPN. Of course the latter will require some configuration but not more than any VPN service. For the network administrator it will probably be far easier to set up this as a VPN than any traditional technology.


My suggestion is to make a new network-level protocol that allows for automatic configuration of mesh networking. Let's call it the CIP, Cryptographic Internet Protocol. It's inspired by Serval Project’s MDP, Mesh Datagram Protocol.


Like MDP and other cryptographic protocols like TOR and I2P it relies on self generated public keys for addressing, and encryption to secure its contents and provide some degree of anonymity. From MDP we can derive automatic routing. This makes it fully distributed and "plug and play". Fast autonomous mesh networking was the main design goal, not anonymity. Whatever anonymity it provides that’s just a bonus.


My main problem with MDP is that it’s included in the larger “BatPhone” bundle which is an Android application which makes it hard to implement in routers and other network-level hardware which is required in order to make it a fast and very available protocol. As you can guess from my CIP name choice I think that a network level protocol that exists in parallel with the IP protocol(s) is the best way to go. Unlike other cryptographic protocol I suggest keeping it lightweight, easy to implement at a router/kernel level. Having an OpenWRT implementation is a necessity in order to perform mass deployment.


In order to utilise existing infrastructures it should be able to send data on top of IP. For non obscured fast connection there could be a dictionary where IP endpoints close to the target CIP address can be looked up. For higher anonymity onion or garlic routing can be used. This would make CIP both a mesh networking protocol and a high level protocol like TOR and I2P. The success of CIP would very much depend on this interoperability.


A complex scenario would be people setting up CIP over IP in LAN:s that are filtered enough to not support passing such traffic onto the Internet. In such a case they would be able to leverage existing IP infrastructure locally but they would need to connect their networks to the a mesh network to communicate across networks. It becomes even more complex if there are internet connections somewhere in the mesh network that can become a shortcut. That’s scenarios that neither MDP nor TOR/I2P is fully tested in, as neither does both mesh networking and internet tunneling.


Now that I introduced CIP over IP the next part is IP over CIP. It can be a powerful way to secure IP traffic, even locally on LAN:s. Here an IP2CIP directory service would be a simple and secure way to let the IP stack know where to send packages, similar to ARP on ethernet networks. Using multiple such directories would be similar to connecting to multiple VPN:s but more like Cisco’s DMVPN. This should be implemented in the hosts IP stack for end to end security. Ideally when communicating over an IP network I would want to lock down my unprotected IP traffic to just allow CIP over IP and then use IP over CIP in order to use IP-based software.


When accessing the unprotected internet there could be something similar to TOR out proxies or commercial VPN services that provides an anonymized bridge. However I probably eventually would prefer to stop using non-encrypted communication. A middle road would be to have exit nodes but only allow encrypted protocols like TLS and SSH to pass, but that may be a problem because many TLS implementations defaults to broken ciphers and SSH can easily be configured in an insecure way.. Perhaps the best thing would be the ability to mark a package as encryption-only and therefore allow the sender's IP stack and local configuration (firewall) to decide.


My next idea is to bridge gaps in mesh networking/internet by using DTN-based/like technology by the means of DTN mules in order to extend internet far beyond the reach of network equipment. Flash drives carried by mules are so much cheaper than building satellite networks, and field tests have shown it to work real well. But that’s a higher level project so I’ll save that for later. :)


//Mattias Eliasson



_______________________________________________
Tech mailing list
[email protected]
https://srv1.openwireless.org/mailman/listinfo/tech


_______________________________________________
Tech mailing list
[email protected]
https://srv1.openwireless.org/mailman/listinfo/tech

Reply via email to