1# cjdns 2 3[English](README.md) 4[Русская версия](README_RU.md) 5[Hrvatski](README_HR.md) 6[Svenska](README_SV.md) 7[Ελληνικά](README_GR.md) 8[繁體中文](README_ZHT.md) 9[Español](README_ES.md) 10[Français](README_FR.md) 11 12#### *Netzwerk neu erfunden* 13 14Cjdns implementiert ein verschlüsseltes IPv6 Netzwerk basierend auf Public-Key Kryptografie für die Adressen-Zuteilung und es benutzt eine verteilte Hash-Tabelle für das Routing. 15Dies ermöglicht eine nahezu konfigurationslose Handhabung und verhindert viele Sicherheits- und Skalierungs-Probleme, welche andere existierende Netzwerke heimsuchen. 16 17[![Build Status](https://api.travis-ci.org/cjdelisle/cjdns.svg?branch=master)](https://travis-ci.org/cjdelisle/cjdns) 18[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/387/badge)](https://bestpractices.coreinfrastructure.org/projects/387) 19[![tip for next commit](https://tip4commit.com/projects/941.svg)](https://tip4commit.com/github/cjdelisle/cjdns) 20[![irc](https://img.shields.io/badge/irc%20chat-%23cjdns-blue.svg)](https://kiwiirc.com/client/irc.efnet.org/?nick=visitor|?#cjdns) 21![License](https://img.shields.io/github/license/cjdelisle/cjdns.svg) 22 23## Testimonials 24 25 23:26 <@jercos> well, cjdns is now officially more reliable than the open 26 internet for getting to my cheaper VPSes :| 27 28 12:52 < mariner> so i don't know if it's been done before, and i assume it's 29 obvious, but I think it's neat. Currently on hype from an 30 airplane 31 32 00:36 < tester> man sites take so long to load on i2p 33 00:36 < tester> i value speed over anonymity any day 34 35 <DuoNoxSol> it's notably more reliable than the normal internet 36 37 09:46 < Kubuxu> I so love cjdns code base 38 39 <whyrusleeping> my internet is way better now. 40 <whyrusleeping> thanks 41 <whyrusleeping> i'm really upset and sad that its better 42 <whyrusleeping> but also quite happy 43 44 21:01 <@grewalsat> this is amazing. with my workpalce speedtest.net results I get around 6+mb speed, and with my cjdns-gate as vpn network I'm getting like 11-15mb download speed in speedtest.net 45 21:01 <@grewalsat> :P 46 21:01 <@grewalsat> plus, access anything! :D 47 48 <davidar> Yeah, I have to admit I sort of avoided hypeirc because of stuff like that 49 50## Community 51 52* [irc://irc.efnet.org/#cjdns][IRC Web] 53* [Hyperboria][] das grösste cjdns-Netzwerk mit bis zu 2100 Knotenpunkten (Oktober 2015). 54* [/r/darknetplan][] 55* [#cjdns auf Twitter][] 56 57 58## Dokumentation 59 60* [Projekt-Ziele](doc/projectGoals.md) 61* [Cjdns Whitepaper](doc/Whitepaper.md) 62* [Cjdns auf Wikipedia][] 63 64Erweiterte Konfiguration: 65 66* [Installiere ein cjdns NAT gateway für dein LAN](doc/nat-gateway.md) 67* [Installiere cjdns auf OpenIndiana](doc/open-indiana.md) 68 69Danke für deine Zeit und dein Interesse, 70 71Die cjdns-Entwickler. 72 73-------------------------------------------------------------------------------- 74 75## Installation von cjdns 76 77Diese Anleitungen sind für Debian-basierte Linux-Distributionen und macOS. Sie sollten erklärend genug sein, um sie auch auf anderen Distributionen zu verwenden - wenn auch nicht unbedingt eins-zu-ein. 78Wenn du wissen möchtest, [was die Basis deines Betriebssystems ist, klicke hier.](https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg) 79 80### 0. Installations-Abhängigkeiten 81 82Für beide Platformen ist es nicht zwingend notwendig, doch aber vorzuziehen, [Node.js](https://nodejs.org/) zu installieren. Wenn Node.js nicht verfügbar oder eine nicht akzeptierte Version ist, wird es in den Quellpfad heruntergeladen und installiert. 83 84#### Debian basierte Distribution: 85 86 sudo apt-get install nodejs git build-essential python2.7 87 88#### Fedora 22+ basierte Distribution: 89 90 sudo dnf install install nodejs git 91 sudo dnf install @development-tools 92 93#### RHEL basierte Distribution (Fügt das EPEL Repository hinzu): 94 95 sudo yum localinstall https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 96 sudo yum install install nodejs git 97 sudo yum install @development-tools 98 99#### Aus dem Paket installieren: 100 101 sudo yum localinstall https://kojipkgs.fedoraproject.org//packages/cjdns/17.4/4.el6/src/cjdns-17.4-4.el6.src.rpm 102 103Wenn du Suspend oder Hibernate auf einem Laptop verwendest wird cjdroute ein paar Minuten brauchen um Kaffee zu machen udn herauszufinden, was eigentlich gerade passiert ist, wenn es aufwacht. 104Du kannst das aber dramatisch beschleunigen: 105 106 systemctl enable cjdns-resume 107 108Der Resume Service startet cjdns neu, wenn das System aufwacht. 109 110#### Gentoo 111 112 emerge --ask nodejs sys-devel/gcc dev-lang/python:3.4 dev-vcs/git 113 114#### macOS: 115 116Installation mit [Homebrew](https://brew.sh/): 117 118 brew install cjdns 119 120Installation mit [MacPorts](https://www.macports.org/): 121 122 sudo port install cjdns 123 124#### OpenBSD: 125 126OpenBSD ist momentan leider ein bisschen experimentell. 127 128 pkg_add git node gcc gmake bash 129 130Wähle die Version gcc-4.8.1p2 oder neuer. 131 132#### FreeBSD: 133 134Alles was du benötigst ist als Prebuild im FreeBSD' port bereits vorhanden. 135 136 pkg install gmake node 137 138#### Arch: 139 140Du kannst cjdns mit folgendem Befehl installieren. 141 142 pacman -S cjdns 143 144Wenn du aus den Quellen installieren möchtest, kann alles, was du brauchst hiermit installiert werden. 145 146 pacman -S nodejs git base-devel 147 148Alternativ kannst du per AUR das Packet `cjdns-git` installieren. 149Nach der Installation ist die Konfigurationsdatei unter `/etc/cjdroute.conf` zu finden. 150Um den Service `cjdns.service` zu starten, führe 151 152 systemctl start cjdns 153 154 aus. 155 Um ihn zu stoppen: 156 157 systemctl stop cjdns 158 159#### Gentoo: 160 161cjdns ist noch nicht im Gentoo Repository, daher muss ein Overlay verwendet werden. 162Der einfachste Weg ist Layman zu verwenden, aber man kann das auch händisch machen. 163 164##### Layman: 165 166Als erstes muss Layman installiert werden. 167 168 emerge layman 169 170Wenn Layman korrekt installiert ist, kann man das Overlay hinzufügen. 171 172 layman -f 173 layman -a weuxel 174 175In Zukunft kann man folgenden Befehl verwenden um das Overlay zu syncen. 176 177 layman -S 178 179Jetzt kann cjdns installiert werden. 180 181 emerge cjdns 182 183##### Händische Installation: 184 185Zuerst muss das Overlay Repository geklont werden. 186 187 cd /opt 188 git clone https://github.com/Weuxel/portage-weuxel.git 189 190Nun bringen wir Portage dazu das Repo zu verwenden. 191 192 cd /etc/portage/repos.conf/ 193 194Erstelle eine Datei `portage-weuxel.conf` mit folgendem Inhalt: 195 196 [weuxel] 197 location = /opt/portage-weuxel 198 masters = gentoo 199 auto-sync = yes 200 201Einmal syncen. 202 203 emerge --sync 204 205Und cjdns installieren. 206 207 emerge cjdns 208 209#### Automatische Crash Erkennung und neu starten 210 211Kopiere das OpenRC Init Skript aus `contrib/openrc` nach `/etc/init.d/` und ändere die Variablen `CONFFILE` und `command` nach Bedarf. 212Nun starte cjdns mit dem Kommando 213 214 /etc/init.d/cjdns start 215 216Konfigiere das Initsystem cjdns automatisch zu starten 217 218 rc-update add cjdns default 219 220Kopiere das service_restart Skript `contrib/gentoo/service_restart.sh` an eine beliebige, geeignete Stelle im Verzeichnisbaum deines Systems und ändere die eMailadresse. Wenn du keine eMail erhalten willst, wenn der Service neu gestartet wurde, dann kommentiere die komplette Zeile aus. 221Nun füge folgenden crontab Eintrag hinzu 222 223 # Restart crashed Services 224 * * * * * root /path/to/script/service_restart.sh 225 226#### Solus: 227 228Abhängigkeiten: 229 230 sudo eopkg install nodejs git build-essential system.devel python gcc binutils kernal-headers xorg-server-devel 231 232Dann folge den Schritten weiter unten: 233 234*Entschuldigung für so viele Schritte. Es wird gerade an einem Paket gearbeitet.* 235 236 237### 1. Hole cjdns from GitHub 238 239Klone das Repository von GitHub und wechsle zum Quellverzeichnis: 240 241 git clone https://github.com/cjdelisle/cjdns.git cjdns 242 cd cjdns 243 244### 2. Build 245 246 ./do 247 248Es sollte folgendes stehen: `Build completed successfully, type ./cjdroute to begin setup.`. Danach gehe vor wie weiter unten beschrieben: 249 250-------------------------------------------------------------------------------- 251 252## Setup 253 254Lasse cjdroute ohne Optionen für HELP laufen: 255 256 ./cjdroute 257 258### 0. Stelle sicher, dass du alles bekommen hast. 259 260Wenn du macOS verwendest, brauchst du Dir über diesen Schritt keine Sorgen machen. 261 262 LANG=C cat /dev/net/tun 263 264Wenn steht: `cat: /dev/net/tun: File descriptor in bad state` Gut! 265 266Wenn steht: `cat: /dev/net/tun: No such file or directory`, erstelle es wie folgt: 267 268 sudo mkdir -p /dev/net && 269 sudo mknod /dev/net/tun c 10 200 && 270 sudo chmod 0666 /dev/net/tun 271 272Danach wieder `cat /dev/net/tun`. 273 274Wenn es sagt: `cat: /dev/net/tun: Permission denied` Dann verwendest du vielleicht einen VPS basierend auf der OpenVZ virtualisations Platform. Frage deinen Provider, ob er das TUN/TAP device - das ist standard Protokoll, sie sollten also genau wissen was du benötigst. Wenn du auf macOS bist, musst du dich nicht um dieses Setup kümmern. 275 276 277### 1. Erstelle ein neues Konfiguration-File 278 279 ./cjdroute --genconf >> cjdroute.conf 280 281**Schütze dein conf File!** 282 283Ein verlorenes conf File bedeutet, du hast dein Passwort und deine Verbindungen verloren und jeder der sich mit dir verbunden hatte wird nicht länger in der lage sein, sich mit dir zu verbinden. 284Ein kompromitiertes conf File bedeutet, dass andere Leute sich mit deiner Identität im Netzwerk ausgeben können. 285 286Um ein conf File mit den richtigen Rechten zu generieren, so dass nur dein User darauf schreiben und lesen kann: 287 288 (umask 077 && ./cjdroute --genconf > cjdroute.conf) 289 290 291### 2. Finde einen Freund 292 293Um in ein existierendes Netzwerk (z.B. Hyperboria) zu gelangen, musst du dich mit jemandem verbinden, der bereits mit diesem Netzwerk verbunden ist. Dies ist wegen verschiedensten Gründen notwendig: 294 2951. Es hilft den Missbrauch zu verhindern, denn schlechte Leute werden tendenziell ein System weniger missbrauchen, wenn ihnen, in einem Akt von menschlicher Freundlichkeit, von anderen der Zugang gewährt wird. 2962. Es ist nicht geplant das Alte Internet zu überlagern, sondern es zu ersetzen. Jede Verbindung wird zu gegebener Zeit durch ein Kabel, ein Glasfaser-Kabel oder eine Wireless-Netzwerk-Verbindung ersetzt. 2973. Im Falle einer Streitigkeit wird es eine "Kette von Freunden" geben, welche die involvierten Leute verbindet, so dass es bereits eine Basis zu einer Lösungsfindung gibt. 298 299Um einen Freund zu finden, gehe nach draussen und beteilige dich an unserer [Community](#community). Weiter kannst du auch einen Blick auf die [Hyperboria-Karte][] werfen, um Peers in deiner Nähe zu finden. 300 301 302### 3. Verbinde deinen Knoten mit dem deines Freundes 303 304**Um ein AUSgehende Verbindung herzustellen** 305 306In deinem conf File wirst du folgendes sehen: 307 308``` javascript 309// Nodes to connect to. 310"connectTo": 311{ 312 // Add connection credentials here to join the network 313 // Ask somebody who is already connected. 314} 315``` 316 317Ein conf File mit mehreren konfigurierten Freundes-Knoten (Setup AUSgehende Verbindung) sollte wie folgt aussehen: 318 319``` javascript 320// Nodes to connect to. 321"connectTo": 322{ 323 //friend_1 (IPv4: 0.1.2.3; IPv6 fcaa:5bac:66e4:713:cb00:e446:c317:fc39) 324 "0.1.2.3:45678": 325 { 326 "login": "k.alexander" 327 "password": "thisIsNotARealConnection_1", 328 "publicKey": "thisIsJustForAnExampleDoNotUseThisInYourConfFile_1.k" 329 } 330 331 //friend_2 (IPv4: 5.1.2.3; IPv6 fcbb:5bac:66e4:713:cb00:e446:c317:fc39) 332 "5.1.2.3:5678": 333 { 334 "login": "k.alexander" 335 "password": "thisIsNotARealConnection_2", 336 "publicKey": "thisIsJustForAnExampleDoNotUseThisInYourConfFile_2.k" 337 } 338} 339``` 340 341In der gegebenen JSON Syntax kannst du so viele Verbindungen wie du willst zum `connectTo` Attribut hinzufügen. 342 343 344**Um deinem Freund zu erlauben eine EINgehende Verbindung mit dir aufzubauen** 345 346In deinem config File wirst du eine Passage wie folgt finden: 347 348``` javascript 349"authorizedPasswords": 350[ 351 // A unique string which is known to the client and server. 352 {"password": "password001", "login": "default-login"} 353 354 // More passwords should look like this. 355 // {"password": "password002", "login": "my-second-peer"} 356 // {"password": "password003", "login": "my-third-peer} 357 // {"password": "password004", "login": "my-fourth-peer"} 358 ... 359 360 // "your.external.ip.goes.here:45678":{"login": "default-login", "password": "password001","publicKey":thisisauniqueKEY_001.k"} 361 362], 363``` 364 365Ein config File mit mehreren Freundes-Knoten (Setup EINgehende Verbindung) sollte wie folgt aussehen: 366 367``` javascript 368"authorizedPasswords": 369[ 370 // A unique string which is known to the client and server. 371 {"password": "thisisauniquestring_001", "user": "k.alexander"} 372 373 // More passwords should look like this. 374 //William Jevons (IPv4: 0.1.2.3; IPv6 fcaa:5bac:66e4:713:cb00:e446:c317:fc39) 375 {"password": "thisisauniquestring_002", "user": "William Jevons"} 376 //Marilyn Patel (IPv4: 5.1.2.3; IPv6 fcbb:5bac:66e4:713:cb00:e446:c317:fc39) 377 {"password": "thisisauniquestring_003", "user": "Marilyn Patel"} 378 // {"password": "thisisauniquestring_004"} 379 ... 380 381 // "your.external.ip.goes.here:45678":{"password": "thisisauniquestring_001","publicKey":thisisauniqueKEY_001.k"} 382], 383``` 384 385 386Du musst William Jevons (welcher die EINgehende Verbindung bei sich einträgt) die folgenden 4 Objekte geben: 387 3881. Deine externe IPv4-Adresse 3892. Den Port, welchen du in deinem conf File wie folgt findest: 390 391 `// Bind to this port. 392 "bind": "0.0.0.0:yourportnumberishere",` 393 3943. Das speziefische Passwort, welches du unkommentiert oder neu erstellt hast: 395`"password": "thisisauniquestring_002"` 3964. Deinen Public-Key: `"publicKey": "thisisauniqueKEY_001.k"` 3975. Seinen Benutzernamen: "William Jevons" 398 399Seine Zugangsdaten werde dann ungefähr wie folgt aussehen (mit deiner IPv4-Adresse und Port): 400 401```javascript 402"1.2.3.4:56789": { 403 "login": "William Jevons", 404 "password": "thisisauniquestring_002", 405 "publicKey": "thisIsJustForAnExampleDoNotUseThisInYourConfFile_1.k" 406} 407``` 408 409Bitte beachte, dass du und dein Freund jeweils nur eine AUSgehende (von DIR -> Freund) oder EINgehende (von Freund -> DIR) Verbindung *eintragen* müsst. Der Datenverkehr kann dann aber doch in beide Richtungen fliessen, sobald die Verbindung steht. 410 411Für mehr Details bezüglich Konfiguration, oder wie du mit anderen cjdns-Knoten über Ethernet und Wifi peerst, schaue dir das Dokument [doc/configure.md](doc/configure.md) an. 412 413 414### 4. Sichere dein System ab - prüfe auf lauschende Services 415 416Wenn dein Knoten einmal läuft, bist du ein neuwertiger IPv6 Host. Dein Betriebssystem wird wahrscheinlich automatisch deine Netzwerk-Services neu konfigurieren, um diese neue Adresse zu verwenden. 417Wenn das nicht dein Ziel ist, solltest du überprüfen, dass du nicht mehr Services bereitstellst als du willst. ;) 418 419Schaue dir [doc/network-services.md](doc/network-services.md) an für Anleitungen. 420 421 422### 5. Starte! 423 424 sudo ./cjdroute < cjdroute.conf 425 426Wenn du deine Logs in ein File geschrieben haben willst: 427 428 sudo ./cjdroute < cjdroute.conf > cjdroute.log 429 430Um cjdns zu stoppen: 431 432 sudo killall cjdroute 433 434Wenn du Probleme hast, benutze `killall cjdroute` um tabula rasa zu machen. Benutze 435`pgrep cjdroute` oder `top` um zu überprüfen, ob cjdns läuft. 436 437**Bemerkung!** 438 439Die obigen Anleitungen starten cjdns als root-user. Es kann also dein System konfigurieren ohne dich um erlaubniss zu bitten. Um cjdns als non-root-user zu starten, konsultiere [doc/non-root-user.md](doc/non-root-user.md). 440 441 442### 6. Komme ins IRC 443 444Willkommen im Netzwerk! Du bist jetzt ein Netzwerk-Administrator. Damit verbunden ist eine gewisse Verantwortung, die unter anderem darin bestehen erreichbar zu sein im Falle eines Problems mit deinen Gerätschaften. Du solltest dich auf [IRC](#community) aufhalten, so dass leute dich erreichen können. 445 446 447## Admin interface 448 449Wenn cjdroute gestartet wurde und läuft, kannst du das admin-Interface unter `udp://localhost:11234` erreichen (kann im folgenden Konfigurations-File geändert werden: `cjdroute.conf`). Konsultiere [doc/admin-api.md](doc/admin-api.md) für mehr Informationen bezüglich dem admin-Interface. Es gibt mehrere Tools in `contrib/`, 450welche damit interagieren können. 451 452Du kannst das admin-API wie folgt erreichen: 453 454* die **Python library**; konsultiere [here](contrib/python/README.md). 455* die **Perl library**, unterhalten by Mikey; konsultiere [here](contrib/perl/CJDNS/README). 456 457## Fehler melden 4581. Melde Fehler bitte nicht in diesem Repo, stattdessen melde sie hier: https://github.com/hyperboria/bugs/issues 4592. Geh ins IRC und sprich mit jemandem. 4603. Was passieren wird ist entweder 461 * Jemand hat Lust es zu fixen 462 * Du hast Lust es zu fixen 463 * Es interessiert niemanden und es wird für eine Weile vergessen und eventuell wird jemand später darauf stossen und es fixen oder es geht im Refactoring verloren. 464 * Niemand kann es im Moment beheben, aber es wird als merkenswert angesehen, weil es eine große Bedeutung in der Entwicklung des Quelltextes hat. In diesem Fall muss es technisch erklärt werden von jemandem, der den Quelltext sehr gut kennt. Derjenige wird einen Pullrequest in das docs/bugs Verzeichnis machen. 465 466### Sicherheit 467Sicherheitsprobleme sollten im IRC berichtet werden, genau wie andere Fehler. Wir haben keine geschlossene Gruppe von Leuten mit Spezialwissen, das Bedeutet, das Standardvorgehen für Sicherheitsmeldungen ist volle Enthüllung. 468Schaue unter https://github.com/cjdelisle/cjdns/blob/master/doc/security_specification.md nach, ob ein Sicherheitsproblem wirklich ein Sicherheitsproblem ist. 469 470Schon wieder diese Zeit des Jahres... Zeit für ein paar Open Source Projekte! 471[![Hacktoberfest](https://img.shields.io/badge/Open%20Source-Hacktoberfest-orange.svg)](https://hacktoberfest.digitalocean.com/) 472 473[IRC Web]: http://chat.efnet.org/irc.cgi?chan=%23cjdns 474[Hyperboria]: https://hyperboria.net 475[/r/darknetplan]: https://www.reddit.com/r/darknetplan 476[#cjdns auf Twitter]: https://twitter.com/hashtag/cjdns 477[Hyperboria-Karte]: https://www.fc00.org/ 478[Buildbots]: https://buildbot.meshwith.me/cjdns/waterfall 479 480[Cjdns auf Wikipedia]: https://en.wikipedia.org/wiki/Cjdns 481[Distributed Hash Table]: https://en.wikipedia.org/wiki/Distributed_hash_table 482[Beyond Pain]: https://lists.torproject.org/pipermail/tor-dev/2012-October/004063.html 483[Kademlia]: https://en.wikipedia.org/wiki/Kademlia 484 485[Tor]: https://www.torproject.org 486[I2P]: https://geti2p.net/en/ 487[Freenet]: https://freenetproject.org 488