Compare commits

..

18 commits

Author SHA1 Message Date
798e26c093 add site about vm hosting 2025-11-26 14:20:07 +01:00
Yannik
1892571198 public key added 2025-11-25 18:19:06 +01:00
Yannik
3695a29861 performance improvements:
* less redirects
* better font loading behaviour
2025-06-30 19:19:51 +02:00
Pluto
4606518627 config.toml: set highlight_code in markdown section (required for current zola versions) 2024-06-23 12:53:04 +02:00
Pluto
6889c011ca remove broken cross-origin zammad chat 2024-06-19 15:55:43 +02:00
036520da85 blog: 2024-02-07-outage fix two typos 2024-02-08 10:33:12 +01:00
edb36f89fc Merge pull request 'blog: add post for 2024.02.07 incident' (#10) from hirnpfirsich/website:add_2024-02-07-outage_blogpost into master
Reviewed-on: #10
2024-02-08 00:51:19 +01:00
5b10ecde65 blog: add post for 2024.02.07 incident 2024-02-07 18:41:35 +01:00
carl
615b9a40f8 remove windows crlf from style.css and add root em to fix footsize in nested environments 2023-11-30 12:54:03 +01:00
carl
38300978c6 add new knowledge about kaese-hack-lauchsuppe 2023-11-30 12:51:21 +01:00
amanita
e1ed95e4a1 add a blogpost about transparency and protocols 2023-11-18 20:28:58 +01:00
amanita
75a0a5440a add sorting by date for blog 2023-11-18 15:59:32 +01:00
Carl Suckfuell
c41c8b7e7f remove jobs tab, since it does not start with w 2023-10-29 15:27:24 +01:00
Carl Suckfuell
113a1be0cc stretch background; maybe looks better? 2023-10-28 13:36:08 +02:00
Carl Suckfuell
f049281f73 add some css elements to the blog template 2023-10-28 13:27:11 +02:00
amanita
c3fe78040b add a little blog. css still missing :D 2023-10-27 18:08:44 +02:00
amanita
7bdf2109a5 add pagecontent to how-to to allow some pretext 2023-10-27 18:08:44 +02:00
amanita
4ceb340595 change inheritance to simplify things; also remove the sexy nerd sentence. 2023-10-27 18:08:44 +02:00
17 changed files with 668 additions and 259 deletions

View file

@ -1,14 +1,15 @@
# The URL the site will be built for
base_url = "https://reudnetz.org"
base_url = "https://reudnetz.org/"
# Whether to automatically compile all Sass files in the sass directory
compile_sass = true
title = "Reudnetz w.V."
[markdown]
# Whether to do syntax highlighting
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Gutenberg
highlight_code = false
title = "Reudnetz w.V."
[extra]
# Put all your custom variables here

6
content/blog.md Normal file
View file

@ -0,0 +1,6 @@
+++
title = "Was geht?"
weight = 9
template = "blog.html"
+++
# Die neusten Neuigkeiten

View file

@ -0,0 +1,21 @@
+++
title = "Geheime Interna #1"
date = "2023-11-18"
+++
Die meisten Entscheidungen trifft das Reudnetz in einem mehr oder weniger unorgansierten Plenum.
Seit je her, beziehungsweise seit dem wir angefangen haben mitzuschreiben, was wir beschließen, veröffentlichen wir
die Protokolle, welche dabei entstehen.
Aus Bequemlichkeit landete bisher alles in einem [Ordner im Git.](https://git.reudnetz.org/reudnetz/public-wiki/src/branch/master/menschenzeugs/protokolle). Dort kann es öffentlich eingesehen werden und wird sogar manchmal gelesen.
Nun beschäftigt uns allerdings die Frage, ob wir diese Praxis beibehalten wollen.
Denn es gilt: "the internet never forgets" was einmal veröffentlicht ist, emazipiert sich von uns wird in caches und backups weiterleben, selbst wenn wir einmal entscheiden sollten die Quelle bei uns zu löschen oder zu verändern.
Da wir auch Details zu neuen und alten Anschlüssen besprechen, müssen wir aufpassen, wie wir die Dinge aufschreiben,
um nicht datenschutzrelevante Informationen zu veröffentlichen.
Besonders dieses Risiko nährt die Frage nach den Sinnhaftigkeit dieser kompletten Offenheit.
Gleichzeitig ist uns klar, was für ein starkes Bekenntnis an Transparenz es darstellt, die Ergebnisse unserer Treffen öffenlich zu halten.
Aus dem Unstand, das wir öffentliche Infrastruktur betreiben, lässt sich unter Umständen sogar ein Anspruch für diese Offenheit ableiten: Öffentliche Infrastruktur muss auch öffentlich verwaltet werden.
Aber auch die Frage nach dem Nutzen der Protokolle ist nicht abschließend beantwortet. Die Argumentation, das die Protokolle für Auszenstehende wenig informativ sind, da sie oft wenig ausführlich sind, trifft durchaus zu. Zu unserer Überraschung scheinen diese Protokolle aber doch gelegentlich von Menschen gelesen zu werden, die sich für das Reudnetz Interessieren.
Besser könnten Blogposts wie dieser sein, die ausführlicher über Themen berichten, die uns gerade Beschäftigen.
Sie zu schreiben ist aber aufwendig und deckt stets nur einen Teil unserer Arbeit ab.

View file

@ -0,0 +1,63 @@
+++
title = "Incident 07.02.2024"
date = "2024-02-07"
+++
In der Nacht von Dienstag auf Mittwoch (06.02.24 - 07.02.24) ist in der Wurzner Straße der Strom ausgefallen und hat uns eine ungeplante Downtime geschenkt.
Unser Kernnetz, sowie die Kundenanschlüsse, sind nach dem Stromausfall von selbst wieder hochgefahren.
Allerdings mussten wir bei beiden Hosting-Servern manuell eingreifen und bis in die Mittagsstunden des Folgetages Entstörungen durchführen.
---
## Verlauf
* 2024.02.06 23:30 CET: Stromausfall
* gesamter Ausfall unserer Infrastruktur
* 2024.02.07 00:20 CET: Stromausfall beendet
* Kundenanschlüsse stehen wieder zur Verfügung
* 2024.02.07 11:00 CET: _hyper01_ und _sol_ unlocked
* _hyper01_: Kunden VMs wieder online
* _sol_: bootet ohne Netzwerkkonnektivität - Reverse-Proxies und interne VMs weiterhin offline
* 2024.02.07 14:30 CET: _sol_ entstört
* Reverse-Proxies und interne VMs wieder Verfügbar
Seit 2024.02.07 14:30 CET ist das Reudnetz wieder uneingeschränkt online.
---
## Entstörung _sol_
_sol_ ist nach dem Freischalten der `full-disk-encryption` ohne Netzwerkkonnektivität gebootet.
Eine fehlkonfigurierte Boot-Partiton hat einen veralteten Linux-Kernel gebootet für den das OS keine Kernel-Module mehr bereitgestellt hat.
Durch die fehlenden Module konnte _sol_ seinen Netzwerk-Stack nicht konfigurieren da hierfür (unteranderem) das `bonding` Modul für 802.3ad (LACP) benötigt wird.
_sol_ konnte über das IPMI entstört werden.
Der Grund für die defekte Boot-Partiton war eine Wartung im Juni 2023.
Beim Austausch der HDDs in _sol_ gegen SSDs wurde die Bootpartition per `dd` kopiert.
Durch die gleichen FS/UU-IDs hat der Kernel das /boot auf der SSD gemountet, welches nicht in der Firmware als Boot-Device hinterlegt war.
Somit haben sich das Boot-Device und die eigentliche /boot-Partition immer weiter voneinander entfernt.
## Full-Disk-Encryption
Die Festplattenverschlüsselung von _hyper01_ und _sol_ musste manuell durch einen admin freigeschaltet werden.
Das ist 11 Stunden nach Ende des Stromausfalls passiert.
## PDU issues _hyper01_
Aufgrund von Netzteilproblemen ist _hyper01_ nicht automatisch gestartet.
Weder die Betätigung des `power-buttons`, noch das IPMI konnten den Server starten.
Aus Energieeffiziengründen wird _hyper01_ nur mit einem Netzteil betrieben.
Der Wechsel auf das Ersatznetzteil hat dem Server dann zum Starten verholfen.
---
## Reflektion
In den folgenden Pläna werden wir erarbeiten an welchen Stellen wir Verbesserungen erzielen können um diese Form von Ausfall zu verhindern.

View file

@ -0,0 +1,4 @@
+++
title = "Neuigkeiten"
sort_by = "date"
+++

View file

@ -0,0 +1,16 @@
+++
title = "Überarbeitung unserer Buchhaltung"
date = "2023-03-01"
+++
Wir sind gerade dabei eine neue Buchhaltungsperson einzuarbeiten.
In diesem Zuge ändern und verbessern wir unsere bisherige Buchhaltung.
**Wundert euch also nicht, wenn ihr:**
* Rechnungen bekommt
* Rechnungen mehrfach bekommt
Sollten Zahlungen ausstehen, werden wir euch nochmal explizit daran erinnern.
Liebe Grüße
Euer Reudnetz.

View file

@ -0,0 +1,9 @@
+++
title = "Einen Blog für die Webseite"
date = "2023-10-27"
+++
Immer mehr machen sich Wunsch und Notwendigkeit breit, auch mal etwas aktuelles über die Webseite zu verbreiten.
Nun soll hier Platz sein, für Geschichten und Einblicke in unsere Arbeit, Störungsmeldungen und Ausfalls-Forensik
oder auch einfach ein Paar nette Worte über Dinge die uns beschäftigen.
Viel Vergnügen damit.

View file

@ -0,0 +1,48 @@
+++
title = "Vegane Käse-Hack-Lauchsuppe"
+++
# Vegane Käse-Hack-Lauchsuppe
Falls das mit dem Internet mal wieder alles nervt, ist es eine gute Idee etwas zu kochen.
## Das Rezept
Genau wie bei der [Anleitung zum Einrichten von Openwrt](@/how-to/openwrt-router.md) ist ein Rezept ein Modell der
Realität und entspricht normalerweise nicht dem was wirklich ist.
Es sollte stets als Wegweiser durch den Möglichkeitsraum verstanden werden.
### Zutaten
|||
| ---: | ---
| 3 Stangen | Lauch
| 300g | Sojagranulat
| 1L | Soja/Hafersahne
| 3 | Zwiebeln
| 6 Zehen | Knoblauch
| 6EL | Hefeflocken
|1 Bund | Petersilie
| | Genüsebrühe
| | Sojasauce
| | Öl
| | Salz
| | Pfeffer
| | Kümmel
| | Edelsüßes Paprika
### Umsetzung
Lauch und Zwiebeln kleinschneiden.
Zwiebeln in **reichlich Öl** anbraten, denn wie häufig bei veganem Essen, enthält hier nichts Fett außer dem Öl. Sojagranulat dazugeben auch kurz anbraten.
Hefeflocken dazu und ebenfalls kurz mitbraten. Lauch dazu und nach kurzer Zeit mit Soja/Hafergetränk ablöschen.
Mindestens 10min köcheln lassen.
Währenddessen Knoblauch und Petersilie zerkleinern.
Die Petersilie dient später als Garnitur, der Knoblauch kann sofort in die Suppe.
Abschmecken mit Sojasauce, Hefeflocken, Gemüsebrühe und den Gewürzen.
Servieren mit der Petersilie.
Have fun.
### Anmerkungen
- Soja/Hafersahne ist teuer und kann auch durch entsprechende Pflanzenmilch und Stärke ersetzt werden. #kuefastyle
- Soja enthält Sojalecithin, Sonneblumenöl enthält auch Sonnenblumenlecithine. Beides kann dabei helfen, das sich Öl und Wasser besser vermischen lassen. Um mehr Fett schön in der Suppe unterzubringen, kann es sich lohnen, beides zu verwenden.

View file

@ -1,10 +0,0 @@
+++
title = "Jobs"
weight = 9
+++
# Jobausschreibungen des Reudnetzes
Aktuell haben wir keine konkreten Stellen anzubieten.
Falls du trotzdem eine Initiale Bewerbung schreiben möchstest:
Schick Deine Bewerbung mit den üblichen Unterlagen an mail reudnetz org

115
content/vm-hosting.md Executable file
View file

@ -0,0 +1,115 @@
+++
title = "VM Hosting"
weight = 9
+++
# VM Hosting im Reudnetz
Das Reudnetz hostet für Kund:inen und befreundete Orgas VMs.
Bei Interesse könnt ihr euch einfach per Mail an uns wenden (`mail [at] reudnetz [dot] org`)
## Technischer Überblick
### Features
* 2 vCPUs
* 2GB RAM
* 50GB Disk
* 150GB zusätzlicher Speicher pro Organisation für Backups und ISOs
* Netzwerk
* eigenes VLAN pro VM
* `v4`: `/30` pro VLAN/VM (RFC1918)
* `v6`: `/64` pro VM (geroutet auf link-local der VM)
* (optional) v4 port-forwarding
* (optional) v4 reverse-proxy für http/https
* (optional) "ready-to-use" VMs
* für gängige Linux-Distributionen die cloud-images anbieten
* Provisionierung der VMs über `cloud-init`
_Solltet ihr mehr Resourcen benötigen könnt ihr euch einfach melden_
### Virtualisierungslösung
Wir nutzen [Proxmox VE](proxmox.org) als Virtualisierungslösung. Jede Nutzer:in bekommt einen Zugang zur WebGUI um ihre VMs zu verwalten (Starten, Stoppen, ISO einlegen uvm.).
## Berechtigunskonzept
Wir nutzen Gruppen, Rollen und Berechtigungen um den Proxmox mandantenfähig zu machen.
Leider können wir euch keine Hardware-Kontingente zuweisen damit ihr eure eigenen VMs erstellen könnt (alla OpenStack, Hetzner, usw.).
Wir erstellen euch die VMs und weisen die euch "unveränderbar" zu. Damit könnt ihr sie administrieren (starten, stoppen, ISO einlegen usw). aber keine Hardwareeigentschaften verändern (zB. mehr Speicher zuweisen).
## Threat Models
Ihr solltet folgende Dinge beachten, wenn ihr eine VM bei uns habt.
### Generischer Virtualisierungsdisclaimer
Technisch bedingt kann der Virtualisierungsserver/Hypervisor alle 3 Regeln der IT-Sicherheit für eine VM brechen:
* `Confidentiality`: der Hypervisor hat Einblick in alle Geräte der VM (CPU, RAM, Disk, Network, ...)
* `Integrity`: der Hypervisor kann den Zustand jedes Gerätes der VM verändern
* `Availability`: der Hypervisor kann eine VM ausschalten
Somit kann auch jede Person, die administrativen Zugang zum Hypervisor hat, die selben Regeln brechen.
Außerdem können Bugs in der Virtualisierungsschicht dafür sorgen das VMs "ausbrechen" und den Hypervisor und oder andere VMs übernehmen können.
Dies gilt für alle Cloud-/Virtualisierungsangebote, nicht nur für die vom Reudnetz :)
### Full Disk Encryption
Wir nutzen Proxmox als Virtualisierungsplattform mit ZFS als Storage-Backend.
Dies ermöglicht uns das `Storage Replication` Feature von Proxmox zu benutzen.
Dadurch werden die Disks aller VMs regelmäßige auf alle Virtualisierungsserver gespiegelt.
Das ermöglicht uns:
* Wartungen an den Virtualisierungsserver ohne Ausfall für die VMs vorzunehmen (durch schnelle Live-Migrationen)
* Im Falle eines Ausfalles die VMs schneller verfügbar zu machen
Leider [verhindert](https://bugzilla.proxmox.com/show_bug.cgi?id=2350) die Nutzung dieses Features aktuell die Möglichkeit die Virtualisiserungsserver zu verschlüsseln (aka `full disk encryption`).
Somit sind unsere Virtualisierungsserver nicht verschlüsselt.
Wenn jemensch die Virtualisierungsserver aus dem Keller trägt hat diese Person auch Zugriff auf die Platten der VMs.
Um das zu verhindern müsst ihr eure VMs selber verschlüsseln. Bitte habt dabei allerdings im Hinterkopf dass wir aus einer laufenden VM auch die Verschlüsselungskeys extrahieren könnten.
Somit ist dies nur ein Schutz gegen physischen Diebstahl der VM - der `Generische Virtualisierungsdisclaimer` gilt trotzdem.
---
**Solltet ihr eine "ready-to-use" VM bestellen hat diese keine full-disk-encryption !**
---
## Disclaimer
### Backups
Wir machen aktuell keine Backups eurer VMs - wenn der Storage kaputt geht sind eure VMs weg.
Somit müsst ihr euch selber um die Sicherung eurer Daten aus der VM kümmern.
### Verfügbarkeit
Wie alle Dienste des Reudnetzes sind auch die VMs auf `best-effort` Basis.
Da wir aktuell noch keinen Cluster haben müsst ihr mit ein bis zwei Ausfällen pro Monat rechnen für Updates des Hypervisors (ihr werdet natürlich vorher benachrichtigt).
### Anbindung
Eure VMs teilen sich mit dem Rest des Reudnetzes unseren symmetrischen 1G Uplink.
Der Router, der die VMs (aktuell) terminiert, kann kein line-rate routing. Deswegen teilen sich alle VMs aktuell 500mbit/s symmetrisch.
### Haftung
---
**Dies ist keine juristische Einschätzung**
---
Ihr mietet die VM von uns und haftet deswegen auch für mögliche Straftaten.

File diff suppressed because one or more lines are too long

123
static/reudnetz.org.pgp.asc Normal file
View file

@ -0,0 +1,123 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
KErE8JTHyQMAab9cD4NNM/kM
=/qif
-----END PGP PUBLIC KEY BLOCK-----

View file

@ -32,6 +32,7 @@
url('introrustg-base2line-webfont.svg#intro_rust_gbase_2_line') format('svg');
font-weight: normal;
font-style: normal;
font-display: swap;
}
@font-face {
@ -44,6 +45,7 @@
url('introscriptr-h2base-webfont.svg#intro_script_rh2_base') format('svg');
font-weight: normal;
font-style: normal;
font-display: swap;
}
@font-face {
@ -56,12 +58,13 @@
url('introheadr-base-webfont.svg#intro_head_rbase') format('svg');
font-weight: normal;
font-style: normal;
font-display: swap;
}
body {
background-image:url(linien1.svg);
background-repeat:no-repeat;
background-size:contain;
background-size:100% auto;
background-position:center;
background-attachment:fixed;
background-color:#3F3836;
@ -148,9 +151,11 @@ a:visited:hover, a:visited:active {
}
.content p, .content li, .content td {
font-size:1.3em;
font-size:1.3rem;
}
.margin {
font-size:85%;
}
@ -217,4 +222,3 @@ p code {
}

20
templates/blog.html Executable file
View file

@ -0,0 +1,20 @@
{% extends "page.html" %}
{% block content %}
{{ page.content | safe }}
{% set posts = get_section(path="blogposts/_index.md") %}
{% for post in posts.pages %}
<h2 class="fg8" style="margin-bottom: 0px;"><a
href="{{ get_url(path=post.path) }}/" title="{{ post.title }}">{{ post.title }}</a></h2>
<p class="fg4" style="margin-bottom: 0px;margin-top: 0px;">{{ post.date }}</p>
<div class="fg12">
{% if post.summary %}
{{ post.summary | safe }}
{% else %}
{{ post.content | safe }}
{% endif %}
<hr style="margin-bottom: 1.5em">
</div>
{% endfor %}
{% endblock content %}

View file

@ -1,14 +1,11 @@
{% extends "index.html" %}
{% block title %}
<title>{{ page.title }} - {{ config.title }}</title>
{% endblock title %}
{% extends "page.html" %}
{% block content %}
{{ page.content | safe }}
{% set anleitungen = get_section(path="how-to/_index.md") %}
{% for page in anleitungen.pages %}
<li>
<a href="{{ get_url(path=page.path) }}" title="{{ page.title }}">{{ page.title }}</a>
<a href="{{ get_url(path=page.path) }}/" title="{{ page.title }}">{{ page.title }}</a>
</li>
{% endfor %}
{% endblock content %}

View file

@ -10,27 +10,18 @@
<link rel="icon" type="image/x-icon" href="{{ get_url(path="style") }}/favicon.ico" >
<link rel="stylesheet" type="text/css" href="{{ get_url(path="style") }}/fitgrid.css" />
<link rel="stylesheet" type="text/css" href="{{ get_url(path="style") }}/styles.css" />
<script src="https://reudnetz.org/jquery-3.4.1.min.js"></script>
<script src="https://help.reudnetz.org/assets/chat/chat.min.js"></script>
<script>
$(function() {
new ZammadChat({
fontSize: '12px',
chatId: 1,
show: false,
target: $('.chatwindow')
});
});
</script>
{% block title %}
<title>{{ config.title }}</title>
{% endblock title %}
</head>
<body>
<div class="center">
<div class="row head"/>
<div class="fg12 legal fg-no-mobile">
<a href="{{ get_url(path="impressum") }}">Impressum</a> | <a href="{{ get_url(path="/datenschutz") }}">Datenschutzhinweis</a>
<a href="{{ get_url(path="impressum") }}/">Impressum</a> | <a href="{{ get_url(path="datenschutz") }}/">Datenschutzhinweis</a>
</div>
<div class="fg6">
<a href="{{ get_url(path="/") }}"><h1>Reudnetz</h1></a>
<a href="{{ get_url(path="/") }}/"><h1>Reudnetz</h1></a>
</div>
<div class="fg6">
<h2>Internet für Leipzigs Osten</h2>
@ -42,14 +33,13 @@
{% block nav %}
{% for page in root_section.pages %}
<li>
<a href="{{ get_url(path=page.path) }}" title="{{ page.title }}">{{ page.title }}</a>
<a href="{{ get_url(path=page.path) }}/" title="{{ page.title }}">{{ page.title }}</a>
</li>
{% endfor %}
{% endblock nav %}
</ul>
</div>
</div>
<div class="chatwindow"> </div>
<div class="row content">
<div class="fg8">
{% block content %}
@ -61,14 +51,14 @@
<h3>Kontakt</h3>
<p>
mail [at] reudnetz [dot] org<br />
We support <a href="/reudnetz.org.pgp.asc">encryption</a>
</p>
<button class="open-zammad-chat">Chatte mit sexy Nerd aus deiner Umgebung (7km)</button>
{% endblock seitenleiste %}
</div>
</div>
<div class="row fg-no-desktop">
<div class="fg12 legal">
<a href="{{ get_url(path="impressum") }}">Impressum</a> | <a href="{{ get_url(path="/datenschutz") }}">Datenschutzhinweis</a>
<a href="{{ get_url(path="impressum") }}/">Impressum</a> | <a href="{{ get_url(path="/datenschutz") }}/">Datenschutzhinweis</a>
</div>
</div>
</div>

View file

@ -1,5 +1,9 @@
{% extends "index.html" %}
{% block title %}
<title>{{ page.title }} - {{ config.title }}</title>
{% endblock title %}
{% block content %}
{{ page.content | safe }}
{% endblock content %}