MCPcopy Index your code
hub / github.com/cjdelisle/cjdns

github.com/cjdelisle/cjdns @cjdns-v22.3

Chat with this repo
repository ↗ · DeepWiki ↗ · release cjdns-v22.3 ↗ · + Follow
5,100 symbols 13,785 edges 578 files 287 documented · 6% updated today★ 5,396
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

cjdns

English Русская версия Hrvatski Svenska Ελληνικά 繁體中文 简体中文 Español Français Português brasileiro

Netzwerk neu erfunden

Cjdns 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. Dies ermöglicht eine nahezu konfigurationslose Handhabung und verhindert viele Sicherheits- und Skalierungs-Probleme, welche andere existierende Netzwerke heimsuchen.

CII Best Practices tip for next commit irc License

Testimonials

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

<DuoNoxSol> it's notably more reliable than the normal internet

09:46 < Kubuxu> I so love cjdns code base

<whyrusleeping> my internet is way better now.
<whyrusleeping> thanks
<whyrusleeping> i'm really upset and sad that its better
<whyrusleeping> but also quite happy

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
21:01 <@grewalsat> :P
21:01 <@grewalsat> plus, access anything! :D

<davidar> Yeah, I have to admit I sort of avoided hypeirc because of stuff like that

Community

  • [irc://irc.efnet.org/#cjdns][IRC Web]
  • [Hyperboria][] das grösste cjdns-Netzwerk mit bis zu 2100 Knotenpunkten (Oktober 2015).
  • [/r/darknetplan][]
  • [#cjdns auf Twitter][]

Dokumentation

Erweiterte Konfiguration:

Danke für deine Zeit und dein Interesse,

Die cjdns-Entwickler.


Installation von cjdns

Diese 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. Wenn du wissen möchtest, was die Basis deines Betriebssystems ist, klicke hier.

0. Installations-Abhängigkeiten

Für beide Platformen ist es nicht zwingend notwendig, doch aber vorzuziehen, Node.js zu installieren. Wenn Node.js nicht verfügbar oder eine nicht akzeptierte Version ist, wird es in den Quellpfad heruntergeladen und installiert.

Debian basierte Distribution:

sudo apt-get install nodejs git build-essential python2.7

Fedora 22+ basierte Distribution:

sudo dnf install install nodejs git
sudo dnf install @development-tools

RHEL basierte Distribution (Fügt das EPEL Repository hinzu):

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

Aus dem Paket installieren:

sudo yum localinstall https://kojipkgs.fedoraproject.org//packages/cjdns/17.4/4.el6/src/cjdns-17.4-4.el6.src.rpm

Wenn 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. Du kannst das aber dramatisch beschleunigen:

systemctl enable cjdns-resume

Der Resume Service startet cjdns neu, wenn das System aufwacht.

Gentoo

emerge --ask nodejs sys-devel/gcc dev-lang/python:3.4 dev-vcs/git

macOS:

Installation mit Homebrew:

brew install cjdns

Installation mit MacPorts:

sudo port install cjdns

OpenBSD:

OpenBSD ist momentan leider ein bisschen experimentell.

pkg_add git node gcc gmake bash

Wähle die Version gcc-4.8.1p2 oder neuer.

FreeBSD:

Alles was du benötigst ist als Prebuild im FreeBSD' port bereits vorhanden.

pkg install gmake node

Arch:

Du kannst cjdns mit folgendem Befehl installieren.

pacman -S cjdns

Wenn du aus den Quellen installieren möchtest, kann alles, was du brauchst hiermit installiert werden.

pacman -S nodejs git base-devel

Alternativ kannst du per AUR das Packet cjdns-git installieren. Nach der Installation ist die Konfigurationsdatei unter /etc/cjdroute.conf zu finden. Um den Service cjdns.service zu starten, führe

systemctl start cjdns

aus. Um ihn zu stoppen:

systemctl stop cjdns

Gentoo:

cjdns ist noch nicht im Gentoo Repository, daher muss ein Overlay verwendet werden. Der einfachste Weg ist Layman zu verwenden, aber man kann das auch händisch machen.

Layman:

Als erstes muss Layman installiert werden.

emerge layman

Wenn Layman korrekt installiert ist, kann man das Overlay hinzufügen.

layman -f
layman -a weuxel

In Zukunft kann man folgenden Befehl verwenden um das Overlay zu syncen.

layman -S

Jetzt kann cjdns installiert werden.

emerge cjdns
Händische Installation:

Zuerst muss das Overlay Repository geklont werden.

cd /opt
git clone https://github.com/Weuxel/portage-weuxel.git

Nun bringen wir Portage dazu das Repo zu verwenden.

cd /etc/portage/repos.conf/

Erstelle eine Datei portage-weuxel.conf mit folgendem Inhalt:

[weuxel]
location = /opt/portage-weuxel
masters = gentoo
auto-sync = yes

Einmal syncen.

emerge --sync

Und cjdns installieren.

emerge cjdns

Automatische Crash Erkennung und neu starten

Kopiere das OpenRC Init Skript aus contrib/openrc nach /etc/init.d/ und ändere die Variablen CONFFILE und command nach Bedarf. Nun starte cjdns mit dem Kommando

/etc/init.d/cjdns start

Konfigiere das Initsystem cjdns automatisch zu starten

rc-update add cjdns default

Kopiere 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. Nun füge folgenden crontab Eintrag hinzu

# Restart crashed Services
* * * * *       root    /path/to/script/service_restart.sh

Solus:

Abhängigkeiten:

sudo eopkg install nodejs git build-essential system.devel python gcc binutils kernal-headers xorg-server-devel

Dann folge den Schritten weiter unten:

Entschuldigung für so viele Schritte. Es wird gerade an einem Paket gearbeitet.

1. Hole cjdns from GitHub

Klone das Repository von GitHub und wechsle zum Quellverzeichnis:

git clone https://github.com/cjdelisle/cjdns.git cjdns
cd cjdns

2. Build

./do

Es sollte folgendes stehen: Build completed successfully, type ./cjdroute to begin setup.. Danach gehe vor wie weiter unten beschrieben:


Setup

Lasse cjdroute ohne Optionen für HELP laufen:

./cjdroute

0. Stelle sicher, dass du alles bekommen hast.

Wenn du macOS verwendest, brauchst du Dir über diesen Schritt keine Sorgen machen.

LANG=C cat /dev/net/tun

Wenn steht: cat: /dev/net/tun: File descriptor in bad state Gut!

Wenn steht: cat: /dev/net/tun: No such file or directory, erstelle es wie folgt:

sudo mkdir -p /dev/net &&
sudo mknod /dev/net/tun c 10 200 &&
sudo chmod 0666 /dev/net/tun

Danach wieder cat /dev/net/tun.

Wenn 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.

1. Erstelle ein neues Konfiguration-File

./cjdroute --genconf >> cjdroute.conf

Schütze dein conf File!

Ein 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. Ein kompromitiertes conf File bedeutet, dass andere Leute sich mit deiner Identität im Netzwerk ausgeben können.

Um ein conf File mit den richtigen Rechten zu generieren, so dass nur dein User darauf schreiben und lesen kann:

(umask 077 && ./cjdroute --genconf > cjdroute.conf)

2. Finde einen Freund

Um 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:

  1. 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.
  2. 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.
  3. 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.

Um einen Freund zu finden, gehe nach draussen und beteilige dich an unserer Community. Weiter kannst du auch einen Blick auf die [Hyperboria-Karte][] werfen, um Peers in deiner Nähe zu finden.

3. Verbinde deinen Knoten mit dem deines Freundes

Um ein AUSgehende Verbindung herzustellen

In deinem conf File wirst du folgendes sehen:

// Nodes to connect to.
"connectTo":
{
    // Add connection credentials here to join the network
    // Ask somebody who is already connected.
}

Ein conf File mit mehreren konfigurierten Freundes-Knoten (Setup AUSgehende Verbindung) sollte wie folgt aussehen:

// 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"
    }
}

In der gegebenen JSON Syntax kannst du so viele Verbindungen wie du willst zum connectTo Attribut hinzufügen.

Um deinem Freund zu erlauben eine EINgehende Verbindung mit dir aufzubauen

In deinem config File wirst du eine Passage wie folgt finden:

"authorizedPasswords":
[
    // A unique string which is known to the client and server.
    {"password": "password001", "login": "default-login"}

    // More passwords should look like this.
    // {"password": "password002", "login": "my-second-peer"}
    // {"password": "password003", "login": "my-third-peer}
    // {"password": "password004", "login": "my-fourth-peer"}
    ...

    // "your.external.ip.goes.here:45678":{"login": "default-login", "password": "password001","publicKey":thisisauniqueKEY_001.k"}

],

Ein config File mit mehreren Freundes-Knoten (Setup EINgehende Verbindung) sollte wie folgt aussehen:

"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 musst William Jevons (welcher die EINgehende Verbindung bei sich einträgt) die folgenden 4 Objekte geben:

  1. Deine externe IPv4-Adresse
  2. Den Port, welchen du in deinem conf File wie folgt findest:

    // Bind to this port. "bind": "0.0.0.0:yourportnumberishere",

  3. Das speziefische Passwort, welches du unkommentiert oder neu erstellt hast: "password": "thisisauniquestring_002"

  4. Deinen Public-Key: "publicKey": "thisisauniqueKEY_001.k"
  5. Seinen Benutzernamen: "William Jevons"

Seine Zugangsdaten werde dann ungefähr wie folgt aussehen (mit deiner IPv4-Adresse und Port):

"1.2.3.4:56789": {
    "login": "William Jevons",
    "password": "thisisauniquestring_002",
    "publicKey": "thisIsJustForAnExampleDoNotUseThisInYourConfFile_1.k"
}

Bitte beachte, dass du und dein Freund jeweils nur eine AUSgehende (von DIR -> Freund) oder EINgehende (von Freund ->

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Class 2,433
Function 2,279
Method 272
Enum 99
Interface 17

Languages

C59%
C++18%
Rust13%
TypeScript8%
Python2%
PHP1%

Modules by API surface

contrib/http/text/javascript/d3/d3.js202 symbols
dht/dhtcore/NodeStore.c85 symbols
contrib/http/text/javascript/d3/d3.layout.js81 symbols
net/InterfaceController.c78 symbols
subnode/SubnodePathfinder.c74 symbols
rust/cjdns_sys/src/crypto/crypto_auth.rs67 symbols
net/SessionManager.c66 symbols
subnode/ReachabilityAnnouncer.c64 symbols
tunnel/RouteGen.c59 symbols
subnode/ReachabilityCollector.c55 symbols
dht/Pathfinder.c55 symbols
tunnel/IpTunnel.c48 symbols

For agents

$ claude mcp add cjdns \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page