# cjdns [Engelska](README.md) [Ryska](README_RU.md) [Kroatiska](README_HR.md) #### *Datornätverk - Ett nytt sätt* Cjdns är ett krypterat IPv6-nätverk. Adresser i nätverket baseras på assymetrisk kryptografi och paket dirigeras i nätverket genom att använda en s.k. distribuerad hashtabell (DHT, eller Distributed Hash Table på engelska). Genom denna design uppnås ett nätverk som knappt kräver någon konfiguration. Vi blir också av med många skalnings- och säkerhetsproblem som andra nätverk har. [![Build Status](https://travis-ci.org/cjdelisle/cjdns.svg?branch=master)](https://travis-ci.org/cjdelisle/cjdns) [![tip for next commit](https://tip4commit.com/projects/941.svg)](https://tip4commit.com/github/cjdelisle/cjdns) [![irc](https://img.shields.io/badge/irc%20chat-%23cjdns-blue.svg)](https://kiwiirc.com/client/irc.efnet.org/?nick=visitor|?#cjdns) ## Vitsord 23:26 <@jercos> well, cjdns is now officially more reliable than the open internet for getting to my cheaper VPSes :| 12:52 < mariner> so i don't know if it's been done before, and i assume it's obvious, but I think it's neat. Currently on hype from an airplane 00:36 < tester> man sites take so long to load on i2p 00:36 < tester> i value speed over anonymity any day it's notably more reliable than the normal internet 09:46 < Kubuxu> I so love cjdns code base my internet is way better now. ​ thanks i'm really upset and sad that its better but also quite happy ## Community * [irc://irc.efnet.org/#cjdns][IRC Web] * [Hyperboria][], det största cjdns-nätverket, över 2100 noder i Oktober 2015. * [Project Meshnet][] * [/r/darknetplan][] * [#cjdns på Twitter][] ## Dokumentation * [Projectmål](doc/projectGoals.md) * [Cjdns Whitepaper](doc/Whitepaper.md) * [Cjdns på Wikipedia][] Avancerad konfiguration: * [Sätt upp en cjdns NAT gateway till ditt LAN (EN)](doc/nat-gateway.md) * [Installera cjdns på OpenIndiana (EN)](doc/open-indiana.md) Tack för visat intresse, - Utvecklarna av Cjdns. -------------------------------------------------------------------------------- ## Hur du installerar cjdns Följande instruktioner är till för Debian-baserade Linux-distributioner eller för OS X. De bör vara tillräckligt informativa för att kunna anpassas till andra distributioner - förvänta dig dock inte att de kommer fungera rakt av. ### 0. Installera beroenden Cjdns byggsystem beror av [Node.js](http://nodejs.org/). Det är att föredra om du kan installera node.js på din maskin, men det är inte nödvändigt. Om node.js inte finns installerat eller om det är en oacceptabel version kommer node.js att laddas ner och installeras i kodträdet. #### Debian-distibutioner sudo apt-get install nodejs git build-essential #### Fedora 22+-distributioner sudo dnf install install nodejs git sudo dnf install @development-tools #### RHEL-distributioner sudo yum localinstall https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo yum install install nodejs git sudo yum install @development-tools #### OS X: Installera med homebrew: brew install cjdns #### OpenBSD: OpenBSD är tyvärr inte stabil just nu. pkg_add git node gcc gmake bash Välj gcc version 4.8.1p2 eller senare. #### FreeBSD: Allt du behöver finns tillgängligt i FreeBSD' ports. pkg install gmake node ### 1. Hämta cjdns från GitHub Clone'a repositoryt från GitHub och byt till katalogen cjdns: git clone https://github.com/cjdelisle/cjdns.git cjdns cd cjdns ### 2. Bygg ./do Vänta tills du ser följande meddelande `Build completed successfully, type ./cjdroute to begin setup.`, fortsätt sedan med följande: -------------------------------------------------------------------------------- ## Upplägg Kör cjdroute utan argument för HJÄLP: ./cjdroute ### 0. Kontrollera att du har allting som behövs. cat /dev/net/tun Om det står: `cat: /dev/net/tun: File descriptor in bad state` Bra! Om det står: `cat: /dev/net/tun: No such file or directory`, skapa den med följande kommandon: sudo mkdir -p /dev/net && sudo mknod /dev/net/tun c 10 200 && sudo chmod 0666 /dev/net/tun Prova sedan `cat /dev/net/tun` igen. Om det står: `cat: /dev/net/tun: Permission denied` så använder du troligen en VPS baserad på OpenVZ's virtualiseringsplattform. Fråga din leverantör om de kan tillåta/öppna upp TUN/TAP - denna terminologi är standard så de bör förstå vad du ber dem om. Om du använder OS X kan du ignorera detta steg. ### 1. Skapa en ny konfigurationsfil ./cjdroute --genconf >> cjdroute.conf **Skydda din konfigurationsfil!** En borttappad konfigurationsfil innebär att du tappat bort både ditt lösenord och dina uppkopplingar och alla som någonsin varit uppkopplade mot dig, kan inte längre göra det. En komprometterad konfigurationsfil innebär att någon annan kan agera som dig på nätverket. För att generera en konfigurationfil med rättigheter där bara du kan läsa och skriva till den: (umask 077 && ./cjdroute --genconf > cjdroute.conf) ### 2. Hitta en vän För att koppla upp dig mot ett redan existerande nätverk (t ex Hyperboria) måste du koppla upp dig till någon som redan tillhör nätverket. Detta är nödvändigt av ett antal orsaker: 1. Det hjälper till att förhindra missbruk då det är osannolikt att dåliga människor kommer missbruka ett system de fått tillgång till från en annan människa som de på något sätt har en relation till. 2. Cjdns är inte tänkt att vara ett overlay-nätverk ovanpå internet, utan tanken är att det ska byta ut det. Varje uppkoppling kommer i sinom tid att bytas ut mot en sladd, en fiberoptisk kabel eller en wifi. 3. Vid händelse av meningsskiljaktigheter kommer det finnas en "kedja av vänner" som länkar ihop alla involverade så det finns redan en bas för att komma fram till en lösning. För att hitta en vän, gå med i vår [community](#community). Kolla även in [Hyperboria Map][] för att hitta peers nära dig. ### 3. Koppla din nod till din väns nod **För att skapa en utgående uppkoppling** Leta upp `connectTo`-attributet i din konfigurationsfil: ``` javascript // Nodes to connect to. "connectTo": { // Add connection credentials here to join the network // Ask somebody who is already connected. } ``` En konfigurationsfil med flera utgående vän-noder, kan se ut: ``` javascript // Nodes to connect to. "connectTo": { //friend_1 (IPv4: 0.1.2.3; IPv6 fcaa:5bac:66e4:713:cb00:e446:c317:fc39) "0.1.2.3:45678": { "login": "k.alexander" "password": "thisIsNotARealConnection_1", "publicKey": "thisIsJustForAnExampleDoNotUseThisInYourConfFile_1.k" } //friend_2 (IPv4: 5.1.2.3; IPv6 fcbb:5bac:66e4:713:cb00:e446:c317:fc39) "5.1.2.3:5678": { "login": "k.alexander" "password": "thisIsNotARealConnection_2", "publicKey": "thisIsJustForAnExampleDoNotUseThisInYourConfFile_2.k" } } ``` Du kan lägga till så många uppkopplingar du vill till `connectTo`-attributet. **För att tillåta din vän att göra ingående uppkoppling** Leta upp `authorizedPasswords`-attributet i din konfigurationsfil: ``` javascript "authorizedPasswords": [ // A unique string which is known to the client and server. {"password": "thisisauniquestring_001"} // More passwords should look like this. // {"password": "thisisauniquestring_002"} // {"password": "thisisauniquestring_003"} // {"password": "thisisauniquestring_004"} ... // "your.external.ip.goes.here:45678":{"password": "thisisauniquestring_001","publicKey":thisisauniqueKEY_001.k"} ], ``` En konfigurationsfil med flera vän-noder uppsatta som ingående kan se ut: ``` javascript "authorizedPasswords": [ // A unique string which is known to the client and server. {"password": "thisisauniquestring_001", "user": "k.alexander"} // More passwords should look like this. //William Jevons (IPv4: 0.1.2.3; IPv6 fcaa:5bac:66e4:713:cb00:e446:c317:fc39) {"password": "thisisauniquestring_002", "user": "William Jevons"} //Marilyn Patel (IPv4: 5.1.2.3; IPv6 fcbb:5bac:66e4:713:cb00:e446:c317:fc39) {"password": "thisisauniquestring_003", "user": "Marilyn Patel"} // {"password": "thisisauniquestring_004"} ... // "your.external.ip.goes.here:45678":{"password": "thisisauniquestring_001","publicKey":thisisauniqueKEY_001.k"} ], ``` Du behöver ge William Jevons (som kopplar upp sig mot dig) följande fyra saker: 1. Din externa IPv4-adress 2. Den port som finns i din konfigurationsfil här: `// Bind to this port. "bind": "0.0.0.0:yourportnumberishere",` 3. Deras unika lösenord som du kommenterade ut eller skapade: `"password": "thisisauniquestring_002"` 4. Din publika nyckel: `"publicKey": "thisisauniqueKEY_001.k"` Hens loginuppgifter kommer då se ut som följer (med din IPv4-adress och port): ```javascript "1.2.3.4:56789": { "login": "William Jevons", "password": "thisisauniquestring_002", "publicKey": "thisIsJustForAnExampleDoNotUseThisInYourConfFile_1.k" } ``` Var vänlig notera att både du och din vän kan *påbörja* en uppkoppling outbound (från DIG --> VÄN) eller inbound (från VÄN --> DIG) men trafiken flödar i båda riktningarna så fort ni har kopplat upp er mot varandra. Se [doc/configure.md](doc/configure.md) för mer information om konfigurering, inkluderat hur du kan koppla upp dig mot andra cjdns noder över ethernet och wifi. ### 4. Säkra ditt system - kontrollera lyssnande tjänster När din nod är uppe och kör är den en IPv6 host. Operativsystemet kan automatiskt omkonfigurera nätverksservices att använda den nya adressen. Om detta *inte* är vad du ville borde du kontrollera att du inte erbjuder fler tjänster än vad du avsåg. ;) Se [doc/network-services.md](doc/network-services.md) för instruktioner. ### 5. Starta din nod! sudo ./cjdroute < cjdroute.conf Om du vill logga till fil: sudo ./cjdroute < cjdroute.conf > cjdroute.log För att avsluta cjdns: sudo killall cjdroute `sudo killall cjdns` är också användbart om du får problem. Använd `pgrep cjdroute` eller `top` för att kolla om cjdroute kör eller ej. *OBS!* Detta kör cjdns som användaren root så det kan konfigurera ditt system utan att behöva bry sig om rättigheter. För att starta cjdns utan root-rättigheter, se [doc/non-root-user.md](doc/non-root-user.md). ### 6. Logga in på IRC Välkommen till nätverket! Du är nu en nätverksadministrator och med det kommer vissa skyldigheter, som bl.a. innebär att du bör vara tillgänglig i händelse av att någonting inte stämmer med din utrustning. Enklast är att logga in på [IRC](#community) så att andra kan nå dig. ## Admingränssnittet När cjdroute är uppe och kör så finns det ett admingränssnitt tillgängligt på `udp://localhost:11234` (detta kan ändras i `cjdroute.conf`). Se [doc/admin-api.md](doc/admin-api.md) för mer information om admingränssnittet. Det finns flera olika verktyg i `contrib/` som kan interagera med det, bl.a.: * **python**; se [contrib/python/README.md](contrib/python/README.md). * **perl**, maintained by Mikey; se [contrib/perl/CJDNS/README](contrib/perl/CJDNS/README). [IRC Web]: http://chat.efnet.org/irc.cgi?chan=%23cjdns [Hyperboria]: http://hyperboria.net [Project Meshnet]: https://projectmeshnet.org [/r/darknetplan]: http://www.reddit.com/r/darknetplan [#cjdns på Twitter]: https://twitter.com/hashtag/cjdns [Hyperboria Map]: http://www.fc00.org/ [Buildbots]: https://buildbot.meshwith.me/cjdns/waterfall [Cjdns på Wikipedia]: https://en.wikipedia.org/wiki/Cjdns [Distributed Hash Table]: https://en.wikipedia.org/wiki/Distributed_hash_table [Beyond Pain]: https://lists.torproject.org/pipermail/tor-dev/2012-October/004063.html [Kademlia]: https://en.wikipedia.org/wiki/Kademlia [Tor]: https://www.torproject.org [I2P]: http://www.i2p2.de [Freenet]: https://freenetproject.org