Um dem CRXN Netzwerk beizutreten, sind grundsätzlich drei Dinge erforderlich:
- Spaß am Lernen und Motivation
- Ein netzwerkfähiges Gerät, welches Internetzugriff hat
- Eine Registrierung in der EntityDB
Vorwissen
Für diesen Blogeintrag setze ich folgendes Vorwissen voraus:
- Git
- Clone, Pull, Push, Fork, PR
- JSON
Geduld und Motivation
IP Routing kann sehr schwierig sein. Einmal sind es teilweise recht schwere Konzepte, welche dahinter sind - andererseits ist die praktische Umsetzung häufig mit Problemen verbunden. Daher kann es vorkommen, dass einige aufgeben. Man sollte sich daher im Vorhinein überlegen, ob man dem Netzwerk wirklich beitreten möchte.
Ein Gerät
Des Weiteren braucht man ein Gerät, welches Zugriff auf das Internet / Clearnet hat und am besten 24/7 läuft. Dafür eignet sich zum Beispiel ein alter Rechner, welchen man noch herumstehen hat (Achtung: Stromverbrauch) oder ein Einplatinencomputer wie ein Pi. Das Gerät sollte via Kabel an das Internet angebunden sein. Bei WiFi / WLAN kann es zu langsameren Geschwindigkeiten und hohen Latenzen führen. Alternativ kann man sich online eine virtuelle Maschine mieten. Meine Provider kann man auf byeob.de sehen. Eine kleine virtuelle Maschine mit einem CPU-Kern und einem Gigabyte Arbeitsspeicher ist im Normalfall ausreichend. Wenn man sich eine VM mietet, sollte man darauf achten, dass es sich um eine VM und keinen Container handelt. Bei virtuellen Maschinen installiert man selber einen Kernel und kann entsprechend das Routing und die Kernel Parameter genau steuern. Ein Container teilt sich den Kernel mit dem Host und “erbt” dabei auch die Einstellungen und Module. Sollte der Host beispielsweise kein WireGuard Modul haben, so kann man WireGuard im Container nicht ohne Umwege benutzten. Container werden häufig mit “LXC”, “Docker” oder “OpenVZ” beworben. Virtuelle Maschinen dagegen mit “KVM”, “WMware” und “Hyper-V”.
Auf diesem Gerät kann man nun ein Betriebssystem installieren. Im Allgemeinen funktioniert kein Windows und kein Apple.
General ist es nicht relevant, ob man das Gerät IPv4, IPv6 oder beides hat. Da über das Internet lediglich die Verbindung zu anderen CRXN Teilnehmern aufgebaut wird. In CRXN selber wird nur IPv6 verwendet.
Die Registrierung
Um im CRXN Netzwerk teilnehmen zu können, braucht man eine Entity in der EntityDB kurz edb. Diese kann man auf Codeberg finden. Um sich zu registrieren, kann man dies “forken”. In dem Fork erstellt man eine neue JSON Datei mit dem Namen <entity>.json
. Dabei ersetzt man <entity>
durch einen Namen. Dies kann zum Beispiel ein Nickname sein.
Folgendes kann man als Beispiel nehmen:
{
"person": {
"name": "Marek Küthe",
"email": "crxn@mk16.de",
"gpg": "9AA28159FCEB3CD83BC212017E869146699108C7"
},
"route": {
"fd92:58b6:2b2::/48": {
"description": "Bandura Communications",
"max-len": "48",
"device": {
"fd92:58b6:2b2::1": {
"type": "router",
"description": "My first router"
}
}
}
}
}
Es wird eine Einrückung von zwei Leertasten verwendet. Die Angaben unter Personen sind freiwillig. Wenn man keine Angaben machen möchte, kann man den Teil mit den Personen weglassen. Man kann bei dem Personen-Teil auch andere Attribute verwenden. Ich habe dort beispielsweise meinen Namen, meine E-Mail-Adresse und den Fingerabdruck meines GPG Schlüssel angegeben.
Unter route
gibt man nun die eigentlich relevanten Informationen an.
Es gelten folgende Regeln:
- Es muss mindestens ein Präfix geben
- Je Präfix muss mindestens ein Gerät vorhanden sein
Bei mir wäre das Präfix fd92:58b6:2b2::/48
. Man kann ein zufälliges Präfix aus dem ULA-Bereich fd00::/8
verwenden. Auf www.unique-local-ipv6.com kann man sich beispielsweise ULA-Präfixe generieren lassen. Man kann freiwillig eine Beschreibung angeben. Wenn man eine angibt, muss diese mindestens ein Zeichen lang sein und darf (aktuell) höchstens 2048 Zeichen lang sein.
max-len
muss man nicht angeben. Ich empfehle es jedoch stark. Wenn man später mehr als ein Gerät im CRXN Netzwerk hat, welches routet, muss man nicht für jedes Gerät ein neues Präfix anfragen, sondern kann sein Präfix in kleine Stücke aufteilen - beispielsweise /56 oder /60. max-len
gibt dabei die Länge des kleinsten Präfixes an. Das Minimum ist 64. Wenn man max-len
nicht angibt, kann es sein, dass man anfällig für Route Hjacking ist. Weitere Informationen dazu kann man auf crxn.de - max-len filter finden.
device
muss mindestens ein (im Optimalfall erreichbares) Gerät angeben. Dabei unterscheidet man zwischen generic
, router
oder server
. Wird der Type weggelassen, wird generic
angenommen. Die Beschreibung ist freiwillig. Im Normalfall hat ein Netzwerk mindestens ein Gerät - den Router. Dieser bekommt häufig die Adresse xxxx::1
zugewiesen. Man kann dem Router jedoch auch eine beliebige andere Adresse aus deinem Präfix geben.
Nachdem man die JSON Datei erstellt hat, kann man die JSON validieren. Dafür kann man beispielsweise jq
oder JSONLint verwenden. Danach kann man mithilfe der Schema-Datei schema.json
deine Attribute überprüfen. Dafür kann man ein Tool wie check-jsonschema
(Python) benutzten: check-jsonschema --schemafile schema.json <entity>.json
Danach kann man eine Pull Request erstellen. Normalerweise überprüft ein EntityDB Administrator die Anfrage innerhalb von einer Woche und merget diese. Danach ist man registriert.
Wenn man längere inaktiv ist, das Netzwerk nicht erreichbar und die Entity auch nicht, kann es passieren, dass die Entity in der EntityDB gelöscht wird.
Hilfe
Es kann immer wieder Stellen geben, wo man selber nicht mehr weiterweiß. In diesem Fall kann man andere Mitglieder des CRXN Netzwerkes fragen. Diese findet man auf Matrix im Raum #crxn:matrix.org