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